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

C语言(从入门到精通)7---for 循环、do-while循环、break 和countine 的用法、goto语句

C语言学习笔记(从入门到精通) 第7部分
循环结构:for、do-while、break、continue、goto

C语言中实现重复执行代码的主要方式就是循环语句。本节重点讲解最常用的三种循环以及控制循环流程的关键语句。

1. for 循环(最常用)

语法格式:

for(初始化表达式;条件表达式;增量表达式){循环体语句;}

执行流程:

  1. 先执行初始化表达式(只执行一次)
  2. 判断条件表达式是否为真
    • 如果为真 → 执行循环体 → 执行增量表达式 → 回到第2步
    • 如果为假 → 跳出循环

经典写法示例:

#include<stdio.h>intmain(){// 打印 1 到 10for(inti=1;i<=10;i++){printf("%d ",i);}printf("\n");// 求 1+2+...+100intsum=0;for(inti=1;i<=100;i++){sum+=i;}printf("1+2+...+100 = %d\n",sum);return0;}

for 循环的几种常见变体:

// 1. 省略初始化(已经在外面定义了变量)inti=1;for(;i<=10;i++){...}// 2. 省略条件(相当于 while(1) 死循环)for(inti=0;;i++){...}// 3. 省略增量(在循环体内自己改)for(inti=0;i<10;){printf("%d ",i);i+=2;// 步长 2}// 4. 完全空 for(死循环)for(;;){...}// 等价于 while(1)

2. while 循环 与 do-while 循环

while 循环(先判断后执行)

while(条件表达式){循环体;}

do-while 循环(先执行后判断,至少执行一次)

do{循环体;}while(条件表达式);注意:最后的分号;一定不能忘!

三者对比示例(输入正整数,输入负数或0结束)

#include<stdio.h>intmain(){intnum;// 方式1:while 先判断printf("while 版本(可能一次都不执行):\n");printf("请输入正整数(输入<=0结束):");scanf("%d",&num);while(num>0){printf("你输入了:%d\n",num);printf("请输入正整数(输入<=0结束):");scanf("%d",&num);}// 方式2:do-while 先执行printf("\ndo-while 版本(至少执行一次):\n");do{printf("请输入正整数(输入<=0结束):");scanf("%d",&num);if(num>0){printf("你输入了:%d\n",num);}}while(num>0);return0;}

小结:什么时候用哪种循环?

  • 确定循环次数→ 优先用for
  • 不确定循环次数,但至少执行一次→ 用do-while
  • 不确定循环次数,先判断条件→ 用while

3. break 和 continue

break:立即跳出当前所在的循环(彻底结束循环)

continue:结束本次循环,立刻进入下一次循环(跳过本次循环剩余部分)

对比示例(打印 1~20 中不是 3 的倍数的数字)

#include<stdio.h>intmain(){printf("使用 continue 跳过 3 的倍数:\n");for(inti=1;i<=20;i++){if(i%3==0){continue;// 跳过本次循环,i++ 继续下一轮}printf("%d ",i);}printf("\n\n");printf("使用 break 在遇到 15 就结束:\n");for(inti=1;i<=20;i++){if(i==15){break;// 直接结束整个循环}printf("%d ",i);}printf("\n");return0;}

多层循环中 break 只跳出最近的一层

for(inti=1;i<=3;i++){for(intj=1;j<=5;j++){if(j==3)break;// 只跳出 j 这一层循环printf("i=%d, j=%d\n",i,j);}}

4. goto 语句(不推荐使用,但要了解)

语法:

goto标签名;...标签名:语句;

常见两种用法(了解即可)

// 用法1:跳出多层循环(替代多层 break)for(inti=0;i<10;i++){for(intj=0;j<10;j++){if(某种很深的条件成立){gotoEND;// 直接跳到最外层结束}}}END:printf("结束\n");
// 用法2:简化某些错误处理(早期代码常见)if(打开文件失败)gotoERROR;if(读取失败)gotoERROR;...ERROR:printf("发生错误\n");return-1;

现代编程观点

  • 强烈不推荐在普通业务逻辑中使用goto
  • 99% 的goto都可以用结构化方式(break、continue、函数返回、异常处理等)替代
  • 唯一合理场景:多层嵌套跳出C语言中集中错误处理(但现代写法更推荐用函数封装)

总结对比表

语句作用跳出范围是否推荐典型使用场景
for次数确定、计数型循环★★★★★几乎所有计数循环
while条件型,先判断★★★★未知次数,需先判断条件
do-while条件型,至少执行一次★★★至少执行一次的交互场景
break立即结束整个循环当前所在循环★★★★★找到目标、异常退出
continue跳过本次循环剩余部分当前本次循环★★★★过滤掉某些不符合条件的项
goto无条件跳转到指定标签任意位置(危险)☆☆☆极少数多层跳出/错误集中处理

下一节建议学习内容:

  • 循环嵌套与经典案例(打印三角形、九九乘法表、质数判断等)
  • 随机数生成(rand() 和 srand())

有任何不明白的地方或想看具体练习题,都可以直接问我!

http://www.jsqmd.com/news/358528/

相关文章:

  • 彻底拆解 Java HashMap 扩容机制
  • 2026年陕蒙地区铁路煤炭运输用抑尘剂性价比品牌排名 - myqiye
  • 【小程序毕设源码分享】基于springboot+android的智能健康管理助手app的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【小程序毕设源码分享】基于springboot+Android的地球村共享书屋平台的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 深聊河南远大锅炉有限公司的产品优势,国际项目售后技术费用多少 - 工业设备
  • COMSOL声学—超声波无损检测(三维) 模型介绍:本模型主要利用压力声学、静电、固体力学以及...
  • Java不支持多继承是缺陷吗?——从多语言对比视角的深度分析
  • 从S锁/X锁到Next-Key Lock:MySQL锁机制硬核拆解
  • 2026年值得选的旅游用车租车公司,杭州佳程服务超棒 - 工业品网
  • C++11实战:手把手教你写个线程池
  • 【小程序毕设源码分享】基于springboot+小程序的高校讲座信息APP的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Python】python-can使用记录
  • P9132 [USACO23FEB] Watching Cowflix P 题解
  • URL.createObjectURL 和 reader.readAsDataURL 对比,适用场景和最佳实践?
  • 毕业设计 基于单片机的红外热视仪(源码+硬件+论文)
  • C语言对话-31.与大虾对话 领悟设计模式
  • 别墅入户门一线品牌有哪些?2026九大领军者技术实力全面解析 - 匠言榜单
  • 2026 AI写论文软件大比拼:学生党适配指南
  • 亲测好用!一键生成论文工具 千笔·专业学术智能体 VS 文途AI 专科生专属
  • 探讨靠谱的生育津贴咨询应用品牌怎么选 - mypinpai
  • 从零开始写算法——贪心篇2:买卖股票的最佳时间 + 划分字母区间
  • 2026年倍克朗性价比排名,可靠的泳池漆厂家哪家好 - 工业推荐榜
  • 搞自动化的人应该都玩过电梯模型吧?今天咱们来唠唠用西门子S7-200 PLC和组态王搞五层电梯控制那点事儿。这玩意儿说难不难,但要让电梯跑得顺溜还得费点心思
  • 倍克朗专业不专业 泳池漆排名 价格合理的推荐 - myqiye
  • 屠榜级身材引爆大银幕!阿如那新戏拳击造型惊呆网友:反正很曼妙
  • HTTP 401 - {“code“:“InvalidApiKey“,“message“:“Invalid API-key provided.“,“request_id“:“d2725b0b-cb8
  • FileReader 四种主要读取方法对比
  • 江西医养结合养老院怎么选,有这些联系电话不怕找不到合适的 - mypinpai
  • 2026年精密轧机推荐厂商排行榜,实力大揭秘 - 工业品牌热点
  • 探讨深圳高新邦科技有限公司,为你揭秘其服务特色及价格 - 工业品牌热点