当前位置: 首页 > news >正文

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");

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


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

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

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");

🔁 像开关:!truefalse!falsetrue

&&:并且

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");

📅 规则:

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

⚡ 短路求值:聪明的“偷懒”

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

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


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

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

switch(表达式) {case1: 语句; break;case2: 语句; 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++;
}

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


🔁 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/elseswitch 是程序的“大脑”,做决策。
  • while/for/do-while 是程序的“双腿”,重复执行。
  • break/continue 是“控制键”,让循环更灵活。

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

http://www.dtcms.com/a/441893.html

相关文章:

  • 09.Docker compose
  • 梁山专做网站的公司徐州便民信息网
  • HarmonyOS 应用开发深度解析:ArkTS 状态管理与渲染控制的艺术
  • ThreadX全家桶迎来移交Eclipse基金会后的第2次更新,发布V6.4.3版本,更新终于回到正轨
  • 中国工信备案查询网站哪个网站能免费下载
  • 网站图片上传功能怎么做设计网红店铺
  • 保姆级 Docker 入门到进阶
  • 网站建站网站80s隐秘而伟大新网站怎么做谷歌推广呢
  • uv 配置国内镜像加速教程
  • Leetcode 295. 数据流的中位数 堆
  • Go 语言的 channel
  • python包管理器——uv
  • 【LeetCode】92. 反转链表 II
  • LeetCode:90.最长有效括号
  • AI 重塑行业格局:从金融风控到智能制造的深度实践
  • 网站开发公共文件太仓营销型网站建设
  • MSM多标量乘法:策略及挑战
  • 做58一样的网站网站如何在国外推广
  • Vue渲染—深入VNode(h函数、JSX、render函数)
  • GPT_Data_Processing_Tutorial
  • 华为AC+AP无线网络组网与配置指南
  • 交互动效设计
  • 电子商务网站建设与管理相关文献邢台路桥建设总公司没有网站吗
  • Leetcode 3700. Number of ZigZag Arrays II
  • Turbopack介绍(由Vercel开发的基于Rust的高性能前端构建工具,用于挑战传统构建工具Webpack、vite地位)Next.js推荐构建工具
  • 网站自适应 如何做ui设计可以从事什么工作
  • 【学习记录】宝塔面板 + Docker 快速部署 RustDesk 自建远程控制服务器
  • 【3DGS复现】Autodl服务器复现3DGS《简单快速》《一次成功》《新手练习复现必备》
  • ollama的下载以及Spring AI Alibaba的ChatModel和ChatClient的流式输出和在idea的实现
  • 自己搭建服务器 发布网站 域名如何申请深圳专业做网站专业