首页/新闻资讯/正文详情

C语言分支与循环语句详解

发布时间:2026/11/13 6:00:24 来源:云帆数科 栏目:资讯中心
C语言分支与循环语句详解
C语言分支与循环语句详解一、分支语句让程序会“思考”1. if 语句2. switch 语句二、循环语句让程序会“重复”1. while 循环2. do-while 循环3. for 循环三、循环控制语句break 和 continue四、实战1. 判断100~200之间的素数2. 给定两个数求这两个数的最大公约数五、嵌套循环与常见陷阱1. 嵌套循环2. 常见错误与建议六、小结在C语言中程序默认按顺序执行但实际开发中我们需要根据条件做出选择分支或者重复执行某段代码循环。掌握分支和循环语句就掌握了程序的“大脑”和“肌肉”。本文将带你系统学习if、switch、for、while和do-while并配合大量示例帮你彻底理解它们的用法和注意事项。一、分支语句让程序会“思考”1.if语句if是最基础的条件判断语句格式如下if(条件表达式){语句// 条件为真时执行}也可以加上else处理相反情况if(条件表达式){语句// 条件为真时执行}else{语句// 条件为假时执行}还可以用else if实现多分支例如评价成绩时if(score90){printf(优秀);}elseif(score60){printf(及格);}else{printf(不及格);}注意事项条件表达式可以是任何能产生0假或非0真值的表达式。即使只有一条语句也建议加上大括号{}避免后续添加语句时出错。不要将误写为否则会变成赋值编译器通常不会报错但逻辑全错。2.switch语句switch用于多分支等值判断如根据整数值跳转比多个else if更清晰。switch(整型表达式){case常量1:// 代码块break;case常量2:// 代码块break;default:// 所有case都不匹配时执行break;}示例根据数字输出星期几intday3;switch(day){case1:printf(周一);break;case2:printf(周二);break;case3:printf(周三);break;case4:printf(周四);break;case5:printf(周五);break;case6:printf(周六);break;case7:printf(周日);break;default:printf(无效日期);}关键点case后面必须是整型常量不能是变量或浮点数。每个case结束时一般会加break否则会“穿透”执行后续所有case这通常是逻辑错误但有时也可利用穿透。default可选通常放在最后。二、循环语句让程序会“重复”1.while循环先判断条件再执行循环体可能一次都不执行。while(条件){// 循环体}示例计算1到100的和intsum0,i1;while(i100){sumi;i;}2.do-while循环先执行一次循环体再判断条件至少执行一次。do{// 循环体}while(条件);// 注意分号常用于菜单输入、密码验证等场景例如charchoice;do{printf(是否继续(y/n): );scanf( %c,choice);// 注意空格跳过换行}while(choice!ychoice!n);3.for循环for集初始化、条件判断、更新于一体结构紧凑最常用。for(初始化;条件;更新){// 循环体}执行顺序初始化 → 条件判断真则进入→ 循环体 → 更新 → 再判断…示例遍历数组intarr[5]{1,2,3,4,5};for(inti0;i5;i){printf(%d ,arr[i]);}注意三个表达式都可以省略但分号必须保留例如for(;;)是死循环。在C99标准后可以在for内声明变量如int i其作用域仅限于循环内部。三、循环控制语句break 和 continuebreak立即跳出当前所在的最内层循环或switch语句。continue跳过本次循环剩余代码直接进入下一次循环迭代在for中会先执行更新部分再判断。示例查找第一个能被7整除的数并跳出for(inti1;i100;i){if(i%70){printf(找到%d\n,i);break;}}示例只打印奇数跳过偶数for(inti1;i10;i){if(i%20)continue;printf(%d ,i);}四、实战1. 判断100~200之间的素数#includestdio.h#includemath.h// 数学库用于 sqrt 函数intmain(){printf(100~200之间的素数为);// 从 101 开始检查到 199每次加 2偶数一定不是素数跳过for(inti101;i200;i2){intflag0;// 标记是否为合数0 表示假设为素数1 表示找到因子// 检查从 3 到 sqrt(i) 的所有奇数因子// 只检查奇数是因为 i 已经是奇数偶数因子不可能整除奇数for(intj3;jsqrt(i);j2){if(i%j0)// 如果 j 能整除 i则 i 不是素数{flag1;// 标记为合数break;// 找到一个因子即可跳出内层循环}}// 如果 flag 仍为 0说明没有找到任何因子i 是素数if(!flag){printf(%d ,i);// 输出素数}}return0;}输出结果100~200之间的素数为101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199这个例子完美融合了for循环外层遍历数字内层检查因子if分支判断是否整除break提前退出内层循环提高效率我第一次运行的时在使用sqrt()的时候未使用头文件math.h结果输出把所有遍历的所有数字都输出了。2. 给定两个数求这两个数的最大公约数#includestdio.hintmain(){intmin0,max0;scanf(%d%d,min,max);// 从键盘读取两个整数分别存入 min 和 max// 确保 min 存放较小的数max 存放较大的数如果输入顺序反了就交换if(minmax){inttempmin;// 临时变量用于交换minmax;maxtemp;}intmax_cf0;// 用于记录当前找到的最大公约数初始为 0// 从 1 到较小数 min 逐一尝试每一个整数 ifor(inti1;imin;i){// 如果 i 能同时整除 min 和 max说明 i 是它们的公约数if(min%i0max%i0){max_cfi;// 更新最大公约数由于 i 不断增大最后记录的就是最大的}}// 输出结果printf(这两个数的最大公约数为%d,max_cf);return0;}这段代码采用的是暴力枚举法穷举从 1 到两个数中较小者的所有整数找出能同时整除两个数的最大那一个。而deepseek给我推荐了一个求最大公约数的优化算法辗转相除法欧几里得算法#includestdio.hintmain(){inta0,b0;scanf(%d%d,a,b);// 确保 a 存放较小的数b 存放较大的数交换使得 a bif(ab){inttempa;ab;btemp;}intmax_cf1;// 用于记录当前找到的最大公约数初始为 0// 辗转相除法求最大公约数while(a)// 当 a 不为 0 时继续循环{inttempb%a;// 计算 b 除以 a 的余数ba;// 把原来的除数 a 作为新的被除数 batemp;// 把余数作为新的除数 a}// 循环结束时 a 为 0此时 b 中存放的就是最大公约数max_cfb;// 将最大公约数存入 max_cfprintf(这两个数的最大公约数为%d,max_cf);return0;}算法说明辗转相除法基于原理gcd(a, b) gcd(b % a, a)不断用较小数除较大数取余直到余数为 0此时较小的数除数即为最大公约数。时间效率O(log n)远高于穷举法的O(n)并且代码简洁不会漏解。我一开始使用穷举法想法和求素数类似从最小值的平方根开始找代码如下intmax_cf1;// 用于记录当前找到的最大公约数初始为 1两数必有公约数 1for(intisqrt(min);imin;i){if(min%i0max%i0){max_cfi;}}验证了几个例子都没问题当我还在沾沾自喜的时候deepseek告诉我代码存在逻辑漏洞从sqrt(min)开始向上遍历到min希望找到能同时整除min和max的最大数。这个思路漏掉了小于sqrt(min)的公约数而最大公约数完全可能小于sqrt(min)。反例min 14max 18真实最大公约数是2因为 142×7182×3²sqrt(14) ≈ 3.74int截断后循环从3开始循环检查3~14没有数能同时整除 14 和 18i7不能整除18i14不能整除18最终max_cf保持初始值1输出错误答案1所以这个算法不完整不能用于求最大公约数。五、嵌套循环与常见陷阱1. 嵌套循环外层循环每执行一次内层循环会完整执行一轮。例如打印九九乘法表for(inti1;i9;i){for(intj1;ji;j){printf(%d×%d%-2d ,j,i,i*j);}printf(\n);}2. 常见错误与建议忘记更新变量导致死循环。例如while (i 10) { /* 没有 i */ }。分号误用for (i0; i10; i); 后面的分号会让循环体为空后面大括号中的代码只执行一次。作用域混乱在for内定义的变量在循环外不可见。switch忘记break导致意外穿透。浮点数作为循环条件可能导致精度问题尽量使用整型。六、小结各语句类型的适用场景分别是if-else任何条件分支尤其是范围判断switch多个等值判断整型/字符for已知循环次数如遍历数组while未知次数先条件判断do-while至少执行一次如菜单循环熟练掌握这些基础语句你就能编写出逻辑清晰、效率良好的C程序。后续学习函数、指针等更高级特性时分支和循环依然是基石。希望这篇博客能帮你彻底理清C语言的分支与循环。如果你有疑问或想深入某个细节欢迎留言讨论

相关推荐

C#编程的最佳工具
C#编程的最佳工具

C#是企业中广泛使用的编程语言,特别是那些依赖微软的程序语言。如果您使用C#构建应用程序,则最有可能使用Visual Studio,并且已经寻找了一些扩展来对您的开发进行管理。但是,这个工具列表可能会改变您编写C#代码的方式。 C#编程的… · 2026/11/13 6:00:23

C# 编程语言
C# 编程语言

C# 问答C# 快速指南 C# 速查表更新于 2025/6/8 22:52:17 C# 速查表 提供所有基本概念的快速参考。C# 在后端编程中非常流行,并且广泛应用于 Web 应用程序、桌面应用程序、面向对象编程 (OOP) 以及与 .NET 的跨平台开发,提供了丰富的就业机会。学习这份速… · 2026/11/13 6:00:23

鸟枪换炮后的威力
鸟枪换炮后的威力

新光源注入器调试在即,本来计划用两台工控机跑起所有的后台服务,把楚涵搞得疲惫不堪反复折腾快一年的服务器终于到了,这个经历去年买注入器的三台示波器的时候就领教过,简单的买东西一件事,竟然因为各种纠缠在学校资产… · 2026/11/2 13:02:22

电工证包考过在哪里怎么考多久拿证全解析
电工证包考过在哪里怎么考多久拿证全解析

电工证包考过在哪里怎么考多久拿证全解析 之前考的证在外省能不能转过来?这个问题不少朋友都在问,特别是那些在外地打工或者刚换工作的电工。现在我们来聊聊, 电工证包考过在哪里 ,以及 多久拿证 的问题,给你一个清晰的流程和建议。… · 2026/11/13 5:59:37

低压电工证广州要多久合格标准与通过率
低压电工证广州要多久合格标准与通过率

广州低压电工证要多久拿下来 上岗必备的取证指南 你是不是正在为找电工相关工作发愁?低压电工证作为电工行业的上岗必备,是很多求职者进入工地、工厂、物业等行业的“敲门砖”。在广州市,尤其是在建筑、电力、制造业等岗位,没有低压电工证,连面试资格都… · 2026/11/13 5:59:37

南阳电工证考点怎么准备才能一次过?含金量不低但实操考试心里没底怕挂科
南阳电工证考点怎么准备才能一次过?含金量不低但实操考试心里没底怕挂科

南阳电工证考点怎么准备才能一次过?含金量不低但实操考试心里没底怕挂科 实操考试心里没底怕挂科,这是很多初次报考南阳电工证的小伙伴最真实的心声。电工证的含金量在各行各业都有体现,尤其是在建筑、制造业、电力系统等岗位上,它是持证上岗的硬门槛。但… · 2026/11/13 5:59:37

电工证包考过在哪里保姆级教程怎么找?怕考不过白交培训费的看过来
电工证包考过在哪里保姆级教程怎么找?怕考不过白交培训费的看过来

电工证包考过在哪里保姆级教程怎么找?怕考不过白交培训费的看过来 怕考不过白交培训费?别急,这篇保姆级教程手把手教你搞清楚【电工证包考过在哪里】,还有答题技巧、变更流程、通过率这些干货,直接帮你避坑,稳稳拿证。… · 2026/11/13 5:59:37

舟山电工证考试地点真实经历:考不过白交培训费?这些细节你必须知道
舟山电工证考试地点真实经历:考不过白交培训费?这些细节你必须知道

舟山电工证考试地点真实经历:考不过白交培训费?这些细节你必须知道 怕考不过白交培训费?别急,先看看别人是怎么通过的。我认识的焦作公路工程朋友老王,就是被培训机构忽悠报名了舟山电工证考试,结果因为没了解清楚考试地点和流程,差点交了两万块培训费… · 2026/11/13 5:59:37

青铜峡电工证怎么转回来?保姆级教程帮你搞定
青铜峡电工证怎么转回来?保姆级教程帮你搞定

青铜峡电工证怎么转回来?保姆级教程帮你搞定 之前考的证在外省能不能转过来?这个问题我天天被问,今天就用 保姆级教程 告诉你,怎么把外省电工证顺利转回青铜峡,还能避免被坑。别急,下面就是我从业十年的实战经验,带你一步步走。… · 2026/11/13 5:58:37

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/12 14:09:01

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43

维修电公用考电工证吗 在哪考最靠谱
维修电公用考电工证吗 在哪考最靠谱

维修电公用考电工证吗 在哪考最靠谱 工地太忙根本没时间复习考试,你是维修电工,天天在项目上跑,连抽个空背个题都难。那问题来了—— 维修电公用考电工证吗 ?答案是: 必须考 。尤其是在当前施工行业,没有电工证,连进场都可能被拦下。而且,… · 2026/11/13 0:00:08

电工证是不是可以登高?含金量和证书范围你必须知道的事
电工证是不是可以登高?含金量和证书范围你必须知道的事

电工证是不是可以登高?含金量和证书范围你必须知道的事 证书过期了不知道怎么复审延期,这事儿很多人遇到过,尤其是像你这样在郑州金水区做劳务班组负责人,手里握着几十个工人的证书,稍微一疏忽,就可能影响工程进度和公司信誉。特别是电工证是不是可以登… · 2026/11/13 0:00:08

鸡西电工证哪家下证快官方报名入口怎么找
鸡西电工证哪家下证快官方报名入口怎么找

鸡西电工证哪家下证快官方报名入口怎么找 你是不是也担心 学历不高怕报不上名 ?别急,今天我就来跟你说说, 鸡西电工证哪家下证快 ,还有 官方报名入口 到底怎么找,别让那些“代办”“代考”耽误了你的机会。… · 2026/11/13 0:00:08

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 4:35:34

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 4:36:01

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 21:15:21

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码