C语言第3讲:分支和循环(上)—— 程序的“决策”与“重复”之旅

C语言第3讲:分支和循环(上)------ 程序的"决策"与"重复"之旅 🚀

C语言是结构化的程序设计语言,这里的"结构"指的是:

  • 🟩 顺序结构:一行行代码从上到下执行(像走路)。
  • 🔍 选择结构(分支):根据条件决定走哪条路(像十字路口)。
  • 🔁 循环结构:重复做某件事,直到满足条件为止(像跑步机)。

今天我们来学习"选择"和"循环",让程序变得聪明又勤劳!💪


🌳 if语句:程序的"十字路口"

想象你站在一个岔路口,面前有块牌子写着:"如果下雨,就打伞;否则,就穿短袖。"

这就是 if 语句在做的事------根据条件做出选择

基础语法:if(如果...就...)

c 复制代码
if (表达式)
    语句;
  • ✅ 表达式为 (非0)→ 执行语句
  • ❌ 表达式为 (0)→ 跳过语句

🧠 小贴士 :在C语言中,0 是"假",任何非0值(如1, -5, 100)都是"真"。

🌰 例子:判断奇数
c 复制代码
#include <stdio.h>
int main() {
    int num = 0;
    scanf("%d", &num);
    if(num % 2 == 1)  // 如果除以2余1
        printf("%d 是奇数\n", num);
    return 0;
}

🧩 相当于说:"如果这个数是奇数,就告诉我一声。"


if...else...:二选一

如果一件事有两种结果,比如"不是奇数就是偶数",那就需要 else

c 复制代码
if (表达式)
    语句1;
else
    语句2;
🌰 例子:判断奇偶
c 复制代码
if(num % 2 == 1)
    printf("是奇数\n");
else
    printf("是偶数\n");

🚦 就像交通灯:绿灯(真)走,红灯(假)停。


分支中包含多条语句:用 {} 打包

⚠️ 注意:ifelse 默认只控制一条语句

c 复制代码
if(age >= 18)
    printf("成年了\n");
    printf("可以谈恋爱了\n"); // ❌ 这句不管条件都执行!

✅ 正确做法:用 {} 把多条语句"打包"成一个"程序块"📦:

c 复制代码
if(age >= 18) {
    printf("成年了\n");
    printf("可以谈恋爱了\n");
} else {
    printf("未成年\n");
    printf("不可以早恋哦\n");
}

🎒 就像背包:{} 是背包,里面装的是你要带的"语句物品"。


嵌套if:多层判断,像俄罗斯套娃 🐣

有时候条件更复杂,比如判断一个数是0、正数还是负数:

c 复制代码
if(num == 0)
    printf("是0\n");
else if(num > 0)
    printf("是正数\n");
else
    printf("是负数\n");

🧩 像剥洋葱:一层层判断,直到找到答案。

✅ 练习:年龄分段
c 复制代码
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到底跟谁?

c 复制代码
if(a == 1)
    if(b == 2)
        printf("hehe\n");
    else
        printf("haha\n");

🚨 你以为 else 跟第一个 if 配对?错!

规则:else 总是跟最近的 if 配对!

🧩 就像找最近的"搭档":else 看了一圈,发现离它最近的是 if(b==2),就和它组队了。

🔧 解决方法 :用 {} 明确配对关系!

c 复制代码
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,编译器会报错!🚫


❌ 错误示范:不要连用关系符!

c 复制代码
if(18 <= age <= 36) // ❌ 错!

🤯 计算过程:先算 18<=age → 得0或1 → 再算 0<=36 → 永远为真!

✅ 正确写法:用逻辑与 &&

c 复制代码
if(age >= 18 && age <= 36) // ✅ 年龄在18到36之间
    printf("青年\n");

🧩 && 像"并且":必须两边都为真,整体才为真。


💎 条件操作符(三目操作符):一行的if-else

语法:exp1 ? exp2 : exp3

如果 exp1 为真,就执行 exp2;否则执行 exp3

🌰 例子:找两个数中的最大值
c 复制代码
int m = a > b ? a : b;

🧩 相当于:

c 复制代码
if(a > b) m = a;
else m = b;

✨ 三目操作符像"快捷方式":一行代码搞定判断。


🔌 逻辑操作符:组合条件的"开关"

操作符 含义 例子
! 逻辑非(取反) !flag
&& 逻辑与(并且) a && b
` `

!:取反

c 复制代码
if(!flag) // 如果flag为假
    printf("执行\n");

🔁 像开关:!truefalse!falsetrue

&&:并且

c 复制代码
if(month >= 3 && month <= 5)
    printf("春季\n");

🧩 两边都为真才执行,像"双保险"。

||:或者

c 复制代码
if(month == 12 || month == 1 || month == 2)
    printf("冬季\n");

🧩 任一边为真就执行,像"多选一"。


🔥 闰年判断(综合练习)

c 复制代码
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
    printf("是闰年\n");

📅 规则:

  1. 能被4整除 不能被100整除
  2. 能被400整除

⚡ 短路求值:聪明的"偷懒"

  • &&:左边为假 → 右边不执行
  • ||:左边为真 → 右边不执行
c 复制代码
i = a++ && ++b && d++; // 如果a++为0,后面都不执行!

🧠 就像"短路":一旦确定结果,就不走完所有路。


🎛️ switch语句:多选一的"菜单"

当有多个固定选项时,switchif-else 更清晰。

c 复制代码
switch(表达式) {
    case 值1: 语句; break;
    case 值2: 语句; break;
    default: 语句; break;
}

🍽️ 像点餐:switch 是菜单,case 是菜名,break 是"点完就走"。

🌰 例子:输入1-7,输出星期几
c 复制代码
switch(day) {
    case 1: printf("星期一\n"); break;
    case 2: printf("星期二\n"); break;
    ...
    default: printf("输入错误\n"); break;
}

🔍 break的重要性

⚠️ 没有 break?会"穿透"到下一个 case

c 复制代码
case 1:
    printf("工作日\n");
case 2: // ❌ 没有break,会继续执行这里!
    printf("休息日\n");

🔥 像楼梯:break 是"停止键",没有它就会一直往下掉。


🔁 while循环:当...就一直做

c 复制代码
while(表达式)
    语句;

🏃‍♂️ 像跑步机:只要条件为真,就一直跑。

🌰 打印1~10
c 复制代码
int i = 1;
while(i <= 10) {
    printf("%d ", i);
    i++;
}

🔁 for循环:更紧凑的循环

c 复制代码
for(初始化; 判断; 调整)
    语句;
🌰 打印1~10
c 复制代码
for(int i = 1; i <= 10; i++)
    printf("%d ", i);

🧩 for 像"三合一":初始化、判断、调整都在一行,更整洁!


🔁 do-while循环:先做一次,再判断

c 复制代码
do {
    语句;
} while(表达式);

🧪 像实验:先做一次,再看结果是否继续。

🌰 计算一个数是几位数
c 复制代码
do {
    cnt++;
    n /= 10;
} while(n);

✅ 即使n=0,也至少执行一次(0是一位数)。


🛑 break和continue:循环的"控制键"

关键字 作用
break 永久跳出整个循环 🔚
continue 跳过本次,进入下一次循环 🔄
🌰 while中的continue陷阱
c 复制代码
while(i <= 10) {
    if(i == 5) continue; // 跳过i++,i永远=5 → 死循环!
    i++;
}

⚠️ continuewhile 中要小心调整变量!


🔁 10. 循环嵌套:循环中的循环

c 复制代码
for(i=100; i<=200; i++) {      // 外层:遍历100~200
    for(j=2; j<i; j++) {       // 内层:判断i是否为素数
        if(i % j == 0) break;
    }
    if(j == i) printf("%d ", i);
}

🧩 像"俄罗斯套娃":一个循环里面套另一个。


🚪 goto语句:无条件跳转

c 复制代码
goto error;
...
error:
    printf("出错了!\n");

⚠️ 建议少用!容易让程序"乱跳"。

✅ 但在多层循环中快速跳出时很有用。


🎉 总结

  • if/elseswitch 是程序的"大脑",做决策。
  • while/for/do-while 是程序的"双腿",重复执行。
  • break/continue 是"控制键",让循环更灵活。

掌握这些,你就能写出更智能的程序了!🚀

相关推荐
kalvin_y_liu3 小时前
【MES架构师与C#高级工程师(设备控制方向)两大职业路径的技术】
开发语言·职场和发展·c#·mes
xxxxxxllllllshi3 小时前
Java 代理模式深度解析:从静态到动态,从原理到实战
java·开发语言·笔记·算法·代理模式
计算机毕业设计指导3 小时前
从零开始构建HIDS主机入侵检测系统:Python Flask全栈开发实战
开发语言·python·flask
步行cgn3 小时前
SqlSessionFactory 的作用
java·开发语言
数据知道3 小时前
Go语言:Go 语言中的命令行参数操作详解
开发语言·后端·golang·go语言
hui函数4 小时前
Python全栈(基础篇)——Day05:后端内容(dict与set+while循环+for循环+实战演示+每日一题)
开发语言·后端·python
小猪绝不放弃.4 小时前
一张图入门 Docker
java·开发语言
可可南木4 小时前
ICT 数字测试原理 8 - -VCL 的测试参数
开发语言·功能测试·测试工具·pcb工艺
哟哟耶耶4 小时前
Starting again-02
开发语言·前端·javascript