C语言分支与循环语句
一、if-else 分支
if-else 是最基本的条件判断语句,根据表达式的真假决定执行哪段代码。
c
#include <stdio.h>
int main() {
int score = 78;
if (score >= 90) {
printf("优秀\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
return 0;
}
输出:及格
if 后面的括号里放的是判断条件,条件为真(非0)就执行对应的代码块。else if 可以加多个,else 是兜底的,前面都不满足就走这里。
二、switch 语句
switch 适合对一个变量的多个固定值做判断,比一长串 if-else 看着清爽。
c
#include <stdio.h>
int main() {
int day = 3;
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
default:
printf("其他\n");
break;
}
return 0;
}
输出:星期三
注意每个 case 后面要加 break,不然会"穿透"继续往下执行。比如去掉上面 case 3 的 break,程序会把 case 4 也打印出来。default 相当于 else,前面都没匹配上就走这里。
三、for 循环
for 循环用得最多,一般当你明确知道要循环几次的时候用它。
c
#include <stdio.h>
int main() {
for (int i = 0; i < 5; i++) {
printf("第 %d 次循环\n", i);
}
return 0;
}
输出:
第 0 次循环
第 1 次循环
第 2 次循环
第 3 次循环
第 4 次循环
for 括号里分三部分:初始化; 条件; 更新。i 从 0 开始,每次加 1,到 i 等于 5 的时候条件不成立,循环结束。
四、while 循环
while 循环适合不知道要循环几次,只关心条件是否满足的场景。
c
#include <stdio.h>
int main() {
int num = 1;
while (num <= 100) {
printf("%d ", num);
num *= 2;
}
return 0;
}
输出:1 2 4 8 16 32 64
每次循环判断 num 是否小于等于 100,是就继续。一旦条件不满足就跳出。
还有一种 do-while,不管条件成不成立,先执行一次再说:
c
#include <stdio.h>
int main() {
int i = 10;
do {
printf("%d ", i);
i--;
} while (i > 0);
return 0;
}
输出:10 9 8 7 6 5 4 3 2 1
五、break 和 continue
这两个关键字用来控制循环的执行流程。
break:直接跳出循环
执行到 break 的时候,不管循环条件还成不成立,直接结束整个循环。
c
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
printf("%d ", i);
}
return 0;
}
输出:0 1 2 3 4
本来要循环 10 次,但 i 等于 5 的时候 break 了,后面的 5、6、7、8、9 全跳过了。
continue:跳过本次,继续下一次
continue 不会结束整个循环,只是跳过当前这一次的剩余代码,直接进入下一次循环。
c
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
printf("%d ", i);
}
return 0;
}
输出:1 3 5 7 9
偶数的时候 continue 了,后面那行 printf 没执行,直接跳到 i++ 然后下一轮。所以最后只打印了奇数。
在嵌套循环中
break 只能跳出它所在的那层循环,外面那层照常跑:
c
#include <stdio.h>
int main() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (j == 3) {
break; // 只跳出内层循环
}
printf("(%d,%d) ", i, j);
}
printf("\n");
}
return 0;
}
输出:
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
(2,0) (2,1) (2,2)
每次内层循环到 j==3 就 break,但外层循环不受影响,照常进入下一轮。
六、实际用法举例
找到第一个能被 7 整除的数
c
#include <stdio.h>
int main() {
int arr[] = {12, 35, 8, 49, 21, 63};
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len; i++) {
if (arr[i] % 7 == 0) {
printf("第一个能被7整除的数是 %d,下标是 %d\n", arr[i], i);
break;
}
}
return 0;
}
跳过负数,只处理正数
c
#include <stdio.h>
int main() {
int nums[] = {3, -1, 7, -4, 9, 0, 2};
int len = sizeof(nums) / sizeof(nums[0]);
for (int i = 0; i < len; i++) {
if (nums[i] <= 0) {
continue;
}
printf("%d ", nums[i]);
}
return 0;
}
输出:3 7 9 2
总结
| 语句 | 用途 |
|---|---|
| if-else | 条件分支,二选一或多选一 |
| switch | 值匹配,适合固定枚举值判断 |
| for | 明确循环次数时使用 |
| while | 只关心条件,不确定次数时使用 |
| break | 立刻终止当前循环 |
| continue | 跳过本次,进入下一次循环 |