前两篇我们打好了数据类型、变量和操作符的基础,这一篇终于要进入流程控制的世界了 —— 分支和循环是让程序拥有 “判断” 和 “重复执行” 能力的核心,也是我刚开始写逻辑题时最容易踩坑的地方,今天就把这些知识彻底梳理清楚。
一、if 语句
if 语句是最基础的分支结构,用来让程序根据条件选择不同的执行路径。
1. 基本语法
if (条件表达式)
{
// 条件为真时执行的代码
}
示例:判断一个数是否为正数
int num = 10;
if (num > 0)
{
printf("这是一个正数\n");
}
2. if-else 结构
当条件不满足时,执行另一段代码:
if (条件表达式)
{
// 条件为真时执行
}
else
{
// 条件为假时执行
}
示例:判断奇偶
int num = 7;
if (num % 2 == 0)
{
printf("偶数\n");
}
else
{
printf("奇数\n");
}
3. 多分支 if-else if
处理多个条件的情况:
if (条件1)
{
// 条件1为真
}
else if (条件2)
{
// 条件2为真
}
else
{
// 所有条件都为假
}
示例:判断成绩等级
int score = 85;
if (score >= 90)
{
printf("优秀\n");
}
else if (score >= 80)
{
printf("良好\n");
}
else if (score >= 60)
{
printf("及格\n");
}
else
{
printf("不及格\n");
}
踩坑提醒:
if后面的条件必须用括号包裹,且不要加分号(否则会变成空语句,逻辑直接出错)。
二、关系操作符
关系操作符用来比较两个值的大小关系,结果是真(非 0)或假(0)。
| 操作符 | 含义 | 示例 |
|---|---|---|
== | 等于 | a == 5 |
!= | 不等于 | a != 0 |
> | 大于 | a > b |
< | 小于 | a < b |
>= | 大于等于 | a >= 10 |
<= | 小于等于 | a <= 20 |
易错点:
=是赋值,==才是判断相等,千万不要写错!比如if (a = 5)会把a赋值为 5,结果永远为真。
三、条件操作符(三目运算符)
条件操作符是 if-else 的简写形式,语法简洁:
条件 ? 表达式1 : 表达式2;
- 条件为真 → 执行表达式 1
- 条件为假 → 执行表达式 2
示例:求两个数的最大值
int a = 10, b = 20;
int max = (a > b) ? a : b; // max = 20
适用场景:简单的二选一逻辑,复杂逻辑还是用
if-else更清晰。
四、逻辑操作符:&&、||、!
逻辑操作符用来组合多个条件:
| 操作符 | 含义 | 示例 | ||||
|---|---|---|---|---|---|---|
&& | 逻辑与 | 条件 1 && 条件 2 | ||||
| || | 逻辑或 | 条件1 || 条件2 | ||||
! | 逻辑非 | ! 条件 |
规则:
&&:两边都为真,结果才为真;只要有一个假,结果就为假||:只要有一个真,结果就为真;两边都假,结果才为假!:真变假,假变真
示例:判断是否为闰年
int year = 2024;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
printf("闰年\n");
}
else
{
printf("平年\n");
}
重点:短路求值
&&:左边为假时,右边不会执行||:左边为真时,右边不会执行这可以用来优化代码,避免不必要的计算。
五、switch 语句
switch 是另一种分支结构,适合处理多值判断的场景,比多分支 if-else if 更清晰。
基本语法
switch (表达式)
{
case 常量1:
// 语句
break;
case 常量2:
// 语句
break;
default:
// 所有case都不匹配时执行
break;
}
示例:根据数字输出星期几
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;
case 5: printf("周五\n"); break;
case 6: printf("周六\n"); break;
case 7: printf("周日\n"); break;
default: printf("输入错误\n"); break;
}
注意事项:
switch后的表达式只能是整型或字符型- 每个
case后必须加break,否则会 “贯穿” 到下一个 casedefault不是必须的,但建议加上,处理异常情况
六、while 循环
while 循环是最基础的循环结构,用来重复执行一段代码,直到条件不满足。
语法
while (条件表达式)
{
// 循环体
}
- 先判断条件,条件为真才执行循环体
- 循环体执行完后,再次判断条件
示例:计算 1 到 10 的和
int i = 1, sum = 0;
while (i <= 10)
{
sum += i;
i++; // 必须更新循环变量,否则会死循环
}
printf("sum = %d\n", sum); // 输出55
死循环:如果忘记更新循环变量(比如
i++),条件永远为真,程序会一直跑下去。
七、for 循环
for 循环是最常用的循环,把初始化、条件、更新写在一起,结构更紧凑。
语法
for (初始化表达式; 条件表达式; 更新表达式)
{
// 循环体
}
执行顺序:
- 初始化 → 2. 判断条件 → 3. 执行循环体 → 4. 更新 → 回到 2
示例:打印 1 到 10
int i;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
// 输出:1 2 3 4 5 6 7 8 9 10
技巧:
for循环的三个部分都可以省略,但分号不能丢,比如for(;;)就是一个死循环。
八、do-while 循环
do-while 循环和 while 类似,但先执行循环体,再判断条件,所以循环体至少会执行一次。
语法
do
{
// 循环体
} while (条件表达式);
示例:猜数字游戏(至少猜一次)
int num = 5, guess;
do
{
printf("猜一个1-10的数字:");
scanf("%d", &guess);
}
while (guess != num);
printf("恭喜你猜对了!\n");
适用场景:需要先执行一次再判断的场景,比如菜单选择、输入验证。
九、break 和 continue 语句
这两个语句用来控制循环的执行流程:
1. break
- 作用:跳出当前循环或 switch,结束整个循环
- 示例:找到 10 以内第一个能被 3 整除的数
int i;
for (i = 1; i <= 10; i++)
{
if (i % 3 == 0)
{
printf("找到:%d\n", i); // 输出3
break; // 跳出for循环
}
}
2. continue
- 作用:跳过本次循环剩余部分,直接进入下一次循环判断
- 示例:打印 1 到 10 中所有奇数
int i;
for (i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
continue; // 跳过偶数,直接下一次循环
}
printf("%d ", i); // 输出1 3 5 7 9
}
区别:
break是结束整个循环,continue是结束本次循环。
十、循环的嵌套
循环里面再套循环,就是嵌套循环,最常见的是二维遍历(比如打印九九乘法表)。
示例:打印九九乘法表
int i, j;
for (i = 1; i <= 9; i++)
{ // 外层循环:行
for (j = 1; j <= i; j++)
{ // 内层循环:列
printf("%d*%d=%d\t", j, i, i*j);
}
printf("\n"); // 每行结束换行
}
理解:外层循环控制 “大步骤”,内层循环控制 “小步骤”,比如外层控制行,内层控制列。
十一、goto 语句
goto 是无条件跳转语句,可以跳转到函数内任意标记的位置。
语法
goto 标签;
// ...
标签:
// 语句
示例:跳出多层循环
int i, j;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (i * j == 25)
{
printf("找到i=%d, j=%d\n", i, j);
goto end; // 直接跳转到end标签
}
}
}
end:
printf("程序结束\n");
注意:
goto会破坏代码结构,不推荐滥用,只在极少数场景(比如跳出多层循环)使用。
总结
这一篇我们系统学习了 C 语言的分支和循环:
- 分支:
if、switch让程序会 “做选择” - 循环:
while、for、do-while让程序会 “重复做事” - 控制:
break、continue、goto精细调整执行流程
回想我刚开始学的时候,总是搞不清 for 和 while 的区别,也经常在嵌套循环里绕晕。直到自己写了很多练习题(比如打印金字塔、九九乘法表),才慢慢把这些逻辑吃透。
下一篇我们会学习数组,终于可以处理一组数据了,一起加油!
我的学习感悟
这一章是编程逻辑的核心,光看笔记没用,一定要多写练习题。我当时把「判断闰年」「打印九九乘法表」「猜数字游戏」这些经典题目都敲了一遍,才真正理解了循环和分支的本质。写代码才是最好的老师,这句话真的没错。
持续更新 C 语言学习笔记,欢迎关注点赞收藏~输出才是最好的学习方式。
3820

被折叠的 条评论
为什么被折叠?



