C 语言学习记录:选择语句与循环语句
在 C 语言的学习进程中,选择语句和循环语句是构建程序逻辑的重要部分。作为结构化编程语言,C 语言主要包含顺序结构、选择结构和循环结构,其中选择语句和循环语句分别控制着程序的分支走向和重复执行,对实现复杂的业务逻辑起着关键作用。接下来,让我们深入学习这两类语句。
一、选择语句
在生活中,我们时刻面临着各种抉择,比如是选择去清华、北大还是其他地方深造,是否找朋友玩耍,以及选择及时行乐还是克勤克俭的生活方式等。在 C 语言里,也有相应的机制来处理这些类似的判断和选择,这就是选择语句。C 语言中有两种主要的选择语句结构:if-else
结构和switch-case
结构。
1.1 if-else 结构
if-else
结构用于根据条件的真假来执行不同的代码块。下面是一个根据学生考试分数进行评级的示例:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { while (1) { // 考试分数[90-100] 优秀 // 考试分数[80-90) 良好 // 考试分数[70-80) 中等 // 考试分数[60-70) 及格 // 考试分数[0-60) 孩子还需努力! int score = 0; printf("请输入学生的考试成绩:\n"); scanf("%d", &score); if (score >= 90 && score <= 100) { printf("优秀!\n"); } else if (score >= 80 && score < 90) { printf("良好!\n"); } else if (score >= 70 && score < 80) { printf("中等!\n"); } else if (score >= 60 && score < 70) { printf("及格!\n"); } else { printf("孩子还需努力!\n"); } } return 0; }
在这段代码中,通过if-else if
的链式结构,依次判断输入的分数落在哪个区间,从而输出相应的评级。如果分数在 90 到 100 之间,输出 “优秀”;在 80 到 90 之间,输出 “良好”,以此类推。最后的else
块则处理所有其他不符合前面条件的情况,即分数小于 60 时,输出 “孩子还需努力!”。
1.2 switch-case 结构
switch-case
结构适用于处理离散的条件判断。例如,根据用户输入的数字来执行不同的电脑操作:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { while (1) { // 碰到:离散条件情况 // 操作电脑:0-关机 1-重启 2-睡眠 3-锁定 // [0-5] [6-10] [11-15] [16-20] 适用:if-elseif printf("请输入对电脑的操作:\n"); printf("0 - 关机 1 - 重启 2 - 睡眠 3 - 锁定\n"); int i = -1; scanf("%d", &i); // switch() 中,只能放置变量的值 switch (i) { case 0: printf("关机\n"); // 不能省略:一旦省略,将导致switch出现穿透的情况 break; case 1: printf("重启\n"); break; case 2: printf("睡眠\n"); break; case 3: printf("锁定\n"); break; default: printf("错误操作\n"); break; } } return 0; }
在这个例子中,switch
语句根据变量i
的值进行判断。如果i
为 0,执行 “关机” 操作并通过break
语句跳出switch
结构;如果i
为 1,执行 “重启” 操作并跳出,以此类推。default
分支用于处理i
为其他值的情况,即用户输入了不在 0 到 3 范围内的数字时,输出 “错误操作”。需要注意的是,break
语句在switch-case
结构中非常重要,如果省略,程序会发生 “穿透” 现象,即继续执行下一个case
分支的代码,这可能导致不符合预期的结果。
1.3 选择语句总结
- 适用场景:在多分支语句中,当判断条件是值调节(即离散的具体值)时,适合使用
switch
语句;当判断条件是连续范围时,更适合使用if...else
语句。例如,判断一个月份属于哪个季节,由于月份是离散的值,可以使用switch
语句;而判断一个人的年龄范围属于哪个阶段,由于年龄是连续的范围,使用if...else
语句更为合适。
二、循环语句
在生活中,我们经常会做一些规律性、重复性的事情,比如每日更新博客、日复一日刷 B 站等。在 C 语言中,循环语句就是用来处理这类重复执行的任务。C 语言提供了三种循环方式:先验循环for
循环和while
循环,以及后验循环do-while
循环。
2.1 for 循环
for
循环通常用于已知循环次数的场景,其语法结构为for (初始变量; 判断条件 ; 变量的改变) {循环体}
。下面是一个简单的示例,用于打印从 1 到 5 的表白信息:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { for (int i = 1; i <= 5; i++) { printf("@#*,俺第%d次老虎油!\n", i); } // 练习:打印 从1到100的所有数 /*for (int i = 1; i <= 100; i++) { printf("i=%d\n", i); }*/ // 问题:打印 [1-100]期间的所有的偶数 for (int i = 1; i <= 100; i++) { // if - 如果 if (i % 2 == 0) { printf("偶数=%d\n", i); } } return 0; }
在这个代码中,首先定义了一个for
循环,初始变量i
为 1,判断条件是i
小于等于 5,每次循环结束后i
自增 1。在循环体中,打印出相应的表白信息。后面还展示了如何打印从 1 到 100 的所有数,以及如何通过if
语句筛选出 1 到 100 之间的所有偶数并打印。
2.2 while 循环
while
循环也是先验循环,即先判断条件,再执行循环体。其语法结构为while (判断条件) {循环体}
。下面是一个与前面for
循环功能相同的while
循环示例:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i = 1; while (i <= 5) { printf("@#*,俺第%d次老虎油!\n", i); i++; } return 0; }
在这个while
循环中,初始变量i
为 1,只要i
小于等于 5,就会执行循环体中的打印语句,并在每次循环结束后将i
自增 1,直到i
大于 5 时,循环结束。
2.3 do-while 循环
do-while
循环是后验循环,即先执行一次循环体,再判断条件。其语法结构为do {循环体} while (判断条件);
。以下是一个示例:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i = 1; do { printf("@#*,我来养你!\n"); i++; } while (i <= 5); return 0; }
在这个do-while
循环中,首先执行一次循环体,打印出 “@#*,我来养你!”,然后判断i
是否小于等于 5,如果是,则继续执行循环体,否则结束循环。需要注意的是,do-while
循环至少会执行一次循环体,这是它与for
循环和while
循环的重要区别。
2.4 特殊情况:死循环
死循环是指一直执行某一个事情的循环。在 C 语言中,如果作为条件:0 代表False
,非 0 代表True
。以下是两种常见的死循环写法:
while (1) { printf("@#*,我喜欢!\n"); } for (;;) { printf("@#*,我来养你!"); }
在while
循环中,条件始终为 1(即True
),所以会一直执行循环体;在for
循环中,省略了初始变量、判断条件和变量的改变,同样会导致循环永远不会结束。在实际编程中,死循环需要谨慎使用,通常用于一些需要持续运行的程序,如服务器程序等,但也需要提供相应的退出机制,以避免程序无法停止。
2.5 中止循环
在循环执行过程中,有时需要提前结束循环或者跳过某次循环,这就用到了continue
和break
语句。
- continue 语句:
continue
语句用于结束当次循环,进入到下一次循环。例如,每天向女朋友表白一次,但偶数天不去,奇数天去表白的示例:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { for (int i = 3; i <= 100; i++) { if (i % 2 == 0) { // 跳出当前循环,进入到下一次循环 continue; } printf("@#*,第%d次表白:我喜欢你!\n", i); } return 0; }
在这个代码中,当i
为偶数时,执行continue
语句,跳过本次循环的剩余部分,直接进入下一次循环,即不执行表白语句;当i
为奇数时,正常执行表白语句。
- break 语句:
break
语句用于结束整个循环,进入到循环以外的代码。例如,在表白的例子中,假设一辈子只活到 100 岁,并且在第 94 次表白后变心,结束循环:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { for (int i = 3; i <= 100; i++) { if (i % 2 == 0) { // 跳出当前循环,进入到下一次循环 continue; } if (i == 94) { // 结束循环,代码进入到循环以外的代码 break; } printf("@#*,第%d次表白:我喜欢你!\n", i); } printf("循环结束后,继续执行其它代码!"); return 0; }
在这个代码中,当i
等于 94 时,执行break
语句,立即结束整个for
循环,然后执行循环后面的打印语句 “循环结束后,继续执行其它代码!”。
通过对选择语句和循环语句的学习,我们能够更加灵活地控制程序的执行流程,实现各种复杂的逻辑功能。在实际编程中,需要根据具体的需求选择合适的语句结构,以提高程序的效率和可读性。希望这篇学习记录能对正在学习 C 语言的小伙伴们有所帮助,如有错误或不足之处,欢迎大家在评论区指正交流!
#算法##选择##C语言#C语言的初步学习