C语言分支与循环语句详解:从入门到精通

发布时间:2026/9/12 9:06:07

C语言分支与循环语句详解:从入门到精通 1. 引言C语言作为一门经典的结构化编程语言其流程控制语句是构建程序逻辑的基石。分支和循环语句共同构成了程序的控制流使程序能够根据条件执行不同的代码路径或者重复执行特定的任务。掌握这些语句是学习C语言编程的关键一步。本文将系统讲解C语言中的分支语句if、if-else、switch和循环语句while、do-while、for通过丰富的代码示例帮助读者深入理解其语法、执行流程和实际应用场景。2. 分支语句分支语句允许程序根据条件表达式的真假值选择执行不同的代码块实现决策逻辑。2.1 if 语句if语句是最基本的分支结构当条件为真时执行指定的代码块。语法if(condition){// 条件为真时执行的语句}示例判断一个数是否为正数#includestdio.hintmain(){intnum10;if(num0){printf(%d 是正数。\n,num);}return0;}2.2 if-else 语句if-else语句在条件为真时执行一个代码块为假时执行另一个代码块。语法if(condition){// 条件为真时执行的语句}else{// 条件为假时执行的语句}示例判断奇偶数#includestdio.hintmain(){intnum7;if(num%20){printf(%d 是偶数。\n,num);}else{printf(%d 是奇数。\n,num);}return0;}2.3 else-if 阶梯当需要判断多个条件时可以使用else if构建多分支结构。语法if(condition1){// 条件1为真时执行}elseif(condition2){// 条件2为真时执行}elseif(condition3){// 条件3为真时执行}else{// 所有条件都为假时执行}示例成绩等级评定#includestdio.hintmain(){intscore85;if(score90){printf(成绩等级A\n);}elseif(score80){printf(成绩等级B\n);}elseif(score70){printf(成绩等级C\n);}elseif(score60){printf(成绩等级D\n);}else{printf(成绩等级F不及格\n);}return0;}2.4 switch 语句switch语句根据表达式的值跳转到匹配的case标签处执行适用于多路分支选择。语法switch(expression){caseconstant1:// 语句break;caseconstant2:// 语句break;// 更多 case...default:// 默认语句}重要规则expression必须是整型或字符型表达式case后的常量必须是整型常量或字符常量break语句用于跳出switch否则会“穿透”执行下一个casedefault是可选的当没有匹配的case时执行示例根据星期数输出星期名称#includestdio.hintmain(){intday3;switch(day){case1:printf(星期一\n);break;case2:printf(星期二\n);break;case3:printf(星期三\n);break;case4:printf(星期四\n);break;case5:printf(星期五\n);break;case6:printf(星期六\n);break;case7:printf(星期日\n);break;default:printf(无效的星期数\n);}return0;}case 穿透示例#includestdio.hintmain(){intmonth2;intdays0;switch(month){case1:case3:case5:case7:case8:case10:case12:days31;break;case4:case6:case9:case11:days30;break;case2:days28;// 不考虑闰年break;default:printf(无效的月份\n);return1;}printf(%d 月有 %d 天\n,month,days);return0;}3. 循环语句循环语句用于重复执行一段代码直到满足特定条件为止。3.1 while 循环while循环在条件为真时重复执行循环体先判断条件后执行。语法while(condition){// 循环体语句}// while 死循环模板while(1){// 循环体// 需要使用 break 语句退出循环}**示例计算1到10的和**c#includestdio.hintmain(){inti1;intsum0;while(i10){sumi;i;// 不要忘记更新循环变量否则会导致无限循环}printf(1到10的和为%d\n,sum);return0;}3.2 do-while 循环do-while循环先执行一次循环体然后判断条件条件为真则继续循环。至少执行一次。语法do{// 循环体语句}while(condition);// do-while 死循环模板do{// 循环体// 需要使用 break 语句退出循环}while(1);**示例用户输入验证**c#includestdio.hintmain(){intnumber;do{printf(请输入一个正数);scanf(%d,number);if(number0){printf(输入错误请重新输入\n);}}while(number0);printf(您输入的正数是%d\n,number);return0;}3.3 for 循环for循环是最常用的循环结构将初始化、条件判断和更新三个部分集中在一行。语法for(initialization;condition;update){// 循环体语句}// for 死循环模板for(;;){// 循环体// 需要使用 break 语句退出循环}执行流程执行初始化表达式只执行一次检查条件表达式如果为假则退出循环执行循环体执行更新表达式返回第2步示例打印乘法表#includestdio.hintmain(){printf(九九乘法表\n);for(inti1;i9;i){for(intj1;ji;j){printf(%d×%d%-2d ,j,i,i*j);}printf(\n);}return0;}for 循环的变体// 多个初始化或更新表达式for(inti0,j10;ij;i,j--){printf(i%d, j%d\n,i,j);}4. 循环控制语句4.1 break 语句break语句用于立即终止所在的最内层循环或switch语句。示例在数组中查找元素#includestdio.hintmain(){intnumbers[]{2,4,6,8,10,12,14,16,18,20};inttarget12;intfound0;for(inti0;i10;i){if(numbers[i]target){printf(找到目标值 %d索引为 %d\n,target,i);found1;break;// 找到后立即退出循环}}if(!found){printf(未找到目标值 %d\n,target);}return0;}4.2 continue 语句continue语句跳过当前循环的剩余部分直接进入下一次循环的条件判断。示例打印1-10中的奇数#includestdio.hintmain(){for(inti1;i10;i){if(i%20){continue;// 如果是偶数跳过本次循环}printf(%d ,i);}printf(\n);return0;}5. 嵌套结构分支和循环语句可以相互嵌套构建复杂的程序逻辑。5.1 嵌套分支示例判断闰年#includestdio.hintmain(){intyear;printf(请输入年份);scanf(%d,year);if(year%40){if(year%1000){if(year%4000){printf(%d 年是闰年。\n,year);}else{printf(%d 年不是闰年。\n,year);}}else{printf(%d 年是闰年。\n,year);}}else{printf(%d 年不是闰年。\n,year);}return0;}5.2 嵌套循环示例打印金字塔图案#includestdio.hintmain(){introws5;for(inti1;irows;i){// 打印空格for(intj1;jrows-i;j){printf( );}// 打印星号for(intk1;k(2*i-1);k){printf(*);}printf(\n);}return0;}6. 常见应用场景**示例菜单驱动程序#includestdio.hintmain(){intchoice;do{printf(\n 学生管理系统 \n);printf(1. 添加学生\n);printf(2. 删除学生\n);printf(3. 查询学生\n);printf(4. 退出系统\n);printf(请选择操作);scanf(%d,choice);switch(choice){case1:printf(执行添加学生功能...\n);break;case2:printf(执行删除学生功能...\n);break;case3:printf(执行查询学生功能...\n);break;case4:printf(感谢使用再见\n);break;default:printf(无效选择请重新输入\n);}}while(choice!4);return0;}7. 最佳实践与注意事项7.1 代码可读性使用恰当的缩进和空格添加必要的注释避免过深的嵌套一般不超过3层使用有意义的变量名7.2 常见错误忘记更新循环变量导致无限循环误用赋值运算符if (x 5)而不是if (x 5)缺少 break 语句在switch中导致 case 穿透循环条件错误for (int i 0; i 10; i--)导致无限循环浮点数相等比较避免if (x 0.1)应使用if (fabs(x - 0.1) 0.00001)7.3 性能考虑将不变的计算移到循环外减少循环内的函数调用使用i代替i对于内置类型无区别但对自定义类型有性能差异8. 总结C语言的分支和循环语句是构建程序逻辑的核心工具分支语句if、if-else、switch让程序能够根据条件做出决策循环语句while、do-while、for让程序能够重复执行任务控制语句break、continue提供了更精细的流程控制掌握这些语句的语法、执行流程和适用场景是编写高效、可读C程序的基础。建议读者通过大量练习来巩固这些概念从简单的示例开始逐步构建更复杂的程序逻辑。在实际编程中应根据具体需求选择最合适的控制结构并始终注意代码的可读性和维护性。
延伸阅读

更多相关文章

2026/9/10 1:08:44

智能体技能开发实战:从天气查询到多模态输出

1. 什么是Agent Skills?Agent Skills(智能体技能)本质上是一组可复用的功能模块,让AI智能体具备完成特定任务的能力。就像给机器人安装不同的工具包——拧螺丝需要电动起子,切割金属需要激光刀,每个技能都对…

2026/9/8 6:18:44

央企合同治理新规:穿透式监管与智能合同管理实践

1. 央企合同治理新规深度解读最近一份编号46的监管文件在央企系统内引发广泛讨论,这份关于合同治理的新规最引人注目的就是提出了"穿透式监管"这一创新理念。作为在央企法务部门工作十余年的从业者,我深刻感受到这不仅是简单的流程调整&#x…

2026/9/10 8:10:42

整理infrared热点(二)

#long-distance-relationship #突然很确信我们有些地方有点像蜘蛛侠与格温 三、具有尺度和位置敏感性的红外小目标检测Infrared Small Target Detection with Scale and Location Sensitivity 插曲 去了解一下特征融合-发现是深度学习里的 【极致中配】Stanford CS231N 计算…

2026/9/12 9:05:15

i-have-adhd:神经多样性时代的数字生存协议

1. 这不是标签,是真实存在的神经多样性体验“i-have-adhd”——最近在社交平台、创意社区甚至职场讨论区高频出现的短句,表面看像一句自述,实则已演变为一种轻量级身份标识、一种群体共鸣信号、一种对主流节奏的温和抵抗宣言。它不带诊断书&a…

2026/9/12 9:05:15

AI原生SDLC操作手册:重塑软件交付全流程

AI 原生 SDLC 操作手册(The AI-Native SDLC playbook)这两年我团队最大的变化,不是用了多少 AI 工具,而是整个软件交付的流程被重塑了一遍。如果你还停留在“用 Copilot 补全代码”的阶段,那接下来的内容可能会颠覆你对…

2026/9/12 9:05:15

论文降重与文本改写服务避坑指南:如何识别不靠谱的改写工具

引言:为什么降重服务频频踩坑 毕业论文写作中,降重与文本改写几乎是每位毕业生绕不开的环节。面对知网、维普、格子达等查重系统的严格检测,不少同学选择借助第三方改写服务来降低重复率。然而,市面上的改写服务鱼龙混杂&#xf…

2026/9/12 9:05:15

用MLX从零训练321万参数Transformer:完整实战记录

标题里“321万”这个数字,看着挺唬人,对吧?其实在 LLM 动不动几百亿参数的今天,这点参数量连“玩具”都算不上。但我还是坚持把它当成一个正经项目来做,原因很简单:我想把 Transformer 的训练过程彻底看明白…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码