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