C语言第3讲:分支和循环(上)—— 程序的“决策”与“重复”之旅
C语言第3讲:分支和循环(上)—— 程序的“决策”与“重复”之旅 🚀
C语言是结构化的程序设计语言,这里的“结构”指的是:
- 🟩 顺序结构:一行行代码从上到下执行(像走路)。
- 🔍 选择结构(分支):根据条件决定走哪条路(像十字路口)。
- 🔁 循环结构:重复做某件事,直到满足条件为止(像跑步机)。
今天我们来学习“选择”和“循环”,让程序变得聪明又勤劳!💪
🌳 if语句:程序的“十字路口”
想象你站在一个岔路口,面前有块牌子写着:“如果下雨,就打伞;否则,就穿短袖。”
这就是 if
语句在做的事——根据条件做出选择。
基础语法:if
(如果…就…)
if (表达式)语句;
- ✅ 表达式为 真(非0)→ 执行语句
- ❌ 表达式为 假(0)→ 跳过语句
🧠 小贴士:在C语言中,
0
是“假”,任何非0值(如1, -5, 100)都是“真”。
🌰 例子:判断奇数
#include <stdio.h>
int main() {int num = 0;scanf("%d", &num);if(num % 2 == 1) // 如果除以2余1printf("%d 是奇数\n", num);return 0;
}
🧩 相当于说:“如果这个数是奇数,就告诉我一声。”
if...else...
:二选一
如果一件事有两种结果,比如“不是奇数就是偶数”,那就需要 else
:
if (表达式)语句1;
else语句2;
🌰 例子:判断奇偶
if(num % 2 == 1)printf("是奇数\n");
elseprintf("是偶数\n");
🚦 就像交通灯:绿灯(真)走,红灯(假)停。
分支中包含多条语句:用 {}
打包
⚠️ 注意:if
和 else
默认只控制一条语句!
if(age >= 18)printf("成年了\n");printf("可以谈恋爱了\n"); // ❌ 这句不管条件都执行!
✅ 正确做法:用 {}
把多条语句“打包”成一个“程序块”📦:
if(age >= 18) {printf("成年了\n");printf("可以谈恋爱了\n");
} else {printf("未成年\n");printf("不可以早恋哦\n");
}
🎒 就像背包:
{}
是背包,里面装的是你要带的“语句物品”。
嵌套if:多层判断,像俄罗斯套娃 🐣
有时候条件更复杂,比如判断一个数是0、正数还是负数:
if(num == 0)printf("是0\n");
else if(num > 0)printf("是正数\n");
elseprintf("是负数\n");
🧩 像剥洋葱:一层层判断,直到找到答案。
✅ 练习:年龄分段
if(age < 18) printf("少年\n");
else if(age <= 44) printf("青年\n");
else if(age <= 59) printf("中老年\n");
else if(age <= 89) printf("老年\n");
else printf("老寿星\n");
🎂 从“少年”一路判断到“老寿星”,像升级打怪!
悬空else问题:else到底跟谁?
if(a == 1)if(b == 2)printf("hehe\n");elseprintf("haha\n");
🚨 你以为 else
跟第一个 if
配对?错!
✅ 规则:else
总是跟最近的 if
配对!
🧩 就像找最近的“搭档”:
else
看了一圈,发现离它最近的是if(b==2)
,就和它组队了。
🔧 解决方法:用 {}
明确配对关系!
if(a == 1) {if(b == 2)printf("hehe\n");
} else {printf("haha\n"); // 这样就清晰了!
}
🛠️
{}
就像“牵手”,明确谁和谁是一对。
🔍 关系操作符:比较的“标尺”
操作符 | 含义 | 例子 |
---|---|---|
> | 大于 | a > b |
< | 小于 | a < b |
>= | 大于等于 | a >= b |
<= | 小于等于 | a <= b |
== | 等于 | a == b ✅ |
!= | 不等于 | a != b |
⚠️ 注意:
=
是赋值,==
是比较!
❌if(x = 3)
是把3赋给x,永远为真!
✅if(x == 3)
才是判断x是否等于3。
🔧 防错技巧:写成 if(3 == x)
,如果误写成 3 = x
,编译器会报错!🚫
❌ 错误示范:不要连用关系符!
if(18 <= age <= 36) // ❌ 错!
🤯 计算过程:先算
18<=age
→ 得0或1 → 再算0<=36
→ 永远为真!
✅ 正确写法:用逻辑与 &&
if(age >= 18 && age <= 36) // ✅ 年龄在18到36之间printf("青年\n");
🧩
&&
像“并且”:必须两边都为真,整体才为真。
💎 条件操作符(三目操作符):一行的if-else
语法:exp1 ? exp2 : exp3
如果
exp1
为真,就执行exp2
;否则执行exp3
。
🌰 例子:找两个数中的最大值
int m = a > b ? a : b;
🧩 相当于:
if(a > b) m = a;
else m = b;
✨ 三目操作符像“快捷方式”:一行代码搞定判断。
🔌 逻辑操作符:组合条件的“开关”
操作符 | 含义 | 例子 |
---|---|---|
! | 逻辑非(取反) | !flag |
&& | 逻辑与(并且) | a && b |
` | ` |
!
:取反
if(!flag) // 如果flag为假printf("执行\n");
🔁 像开关:
!true
→false
,!false
→true
&&
:并且
if(month >= 3 && month <= 5)printf("春季\n");
🧩 两边都为真才执行,像“双保险”。
||
:或者
if(month == 12 || month == 1 || month == 2)printf("冬季\n");
🧩 任一边为真就执行,像“多选一”。
🔥 闰年判断(综合练习)
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))printf("是闰年\n");
📅 规则:
- 能被4整除 且 不能被100整除
- 或 能被400整除
⚡ 短路求值:聪明的“偷懒”
&&
:左边为假 → 右边不执行||
:左边为真 → 右边不执行
i = a++ && ++b && d++; // 如果a++为0,后面都不执行!
🧠 就像“短路”:一旦确定结果,就不走完所有路。
🎛️ switch语句:多选一的“菜单”
当有多个固定选项时,switch
比 if-else
更清晰。
switch(表达式) {case 值1: 语句; break;case 值2: 语句; break;default: 语句; break;
}
🍽️ 像点餐:
switch
是菜单,case
是菜名,break
是“点完就走”。
🌰 例子:输入1-7,输出星期几
switch(day) {case 1: printf("星期一\n"); break;case 2: printf("星期二\n"); break;...default: printf("输入错误\n"); break;
}
🔍 break的重要性
⚠️ 没有 break
?会“穿透”到下一个 case
!
case 1:printf("工作日\n");
case 2: // ❌ 没有break,会继续执行这里!printf("休息日\n");
🔥 像楼梯:
break
是“停止键”,没有它就会一直往下掉。
🔁 while循环:当…就一直做
while(表达式)语句;
🏃♂️ 像跑步机:只要条件为真,就一直跑。
🌰 打印1~10
int i = 1;
while(i <= 10) {printf("%d ", i);i++;
}
🔁 for循环:更紧凑的循环
for(初始化; 判断; 调整)语句;
🌰 打印1~10
for(int i = 1; i <= 10; i++)printf("%d ", i);
🧩
for
像“三合一”:初始化、判断、调整都在一行,更整洁!
🔁 do-while循环:先做一次,再判断
do {语句;
} while(表达式);
🧪 像实验:先做一次,再看结果是否继续。
🌰 计算一个数是几位数
do {cnt++;n /= 10;
} while(n);
✅ 即使n=0,也至少执行一次(0是一位数)。
🛑 break和continue:循环的“控制键”
关键字 | 作用 |
---|---|
break | 永久跳出整个循环 🔚 |
continue | 跳过本次,进入下一次循环 🔄 |
🌰 while中的continue陷阱
while(i <= 10) {if(i == 5) continue; // 跳过i++,i永远=5 → 死循环!i++;
}
⚠️
continue
在while
中要小心调整变量!
🔁 10. 循环嵌套:循环中的循环
for(i=100; i<=200; i++) { // 外层:遍历100~200for(j=2; j<i; j++) { // 内层:判断i是否为素数if(i % j == 0) break;}if(j == i) printf("%d ", i);
}
🧩 像“俄罗斯套娃”:一个循环里面套另一个。
🚪 goto语句:无条件跳转
goto error;
...
error:printf("出错了!\n");
⚠️ 建议少用!容易让程序“乱跳”。
✅ 但在多层循环中快速跳出时很有用。
🎉 总结:
if/else
和switch
是程序的“大脑”,做决策。while/for/do-while
是程序的“双腿”,重复执行。break/continue
是“控制键”,让循环更灵活。掌握这些,你就能写出更智能的程序了!🚀