news 2026/6/9 21:08:49

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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())

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 15:40:45

day80(2.8)——leetcode面试经典150

22. 括号生成 22. 括号生成 题目&#xff1a; 题解&#xff1a; class Solution {int left; //左括号int right; //右括号List<String> res;void dfs(int l, int r, StringBuilder sb) {if(l0&&r0) {res.add(sb.toString());return ;}if(l>0) {sb.appen…

作者头像 李华
网站建设 2026/6/9 16:08:01

从零开始写算法——贪心篇2:买卖股票的最佳时间 + 划分字母区间

在算法中&#xff0c;贪心算法 (Greedy Algorithm) 往往是一个让人又爱又恨的话题。爱它是因为代码通常很短&#xff0c;恨它是因为“当前最优选择会导致全局最优”这个逻辑有时候很难一眼看穿。今天我们通过两道经典的 LeetCode 题目——121. 买卖股票的最佳时机 和 763. 划分…

作者头像 李华
网站建设 2026/6/9 20:14:17

【小程序毕设源码分享】基于springboot+小程序的汽车服务企业客户评价APP的设计与实现(程序+文档+代码讲解+一条龙定制)

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

作者头像 李华
网站建设 2026/6/9 21:09:18

【小程序毕设全套源码+文档】基于Android的地球村共享书屋平台的设计与实现(丰富项目+远程调试+讲解+定制)

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

作者头像 李华
网站建设 2026/6/5 19:51:19

Redis Zset的实现为什么用跳表,而不用平衡树?

之前写过一篇 Redis 数据类型的底层数据结构的实现&#xff0c;其中提到&#xff0c;ZSet 对象的底层数据结构实现之一是跳表。 然后&#xff0c;有读者就问&#xff1a;为什么不使用平衡树&#xff08;如红黑树、AVL 树&#xff09;&#xff1f; 我们先来了解下跳表&#xf…

作者头像 李华
网站建设 2026/6/5 19:43:25

2026之初凭这份Java面试突击指南,斩获9张大厂Offer

今年金三银四快要到了&#xff0c;不知道大家都拿到Offer没有&#xff0c;如果没有的话&#xff0c;希望大家不要怪LZ凡尔赛了&#xff08;手动狗头&#xff09;。LZ截止今天为止已经收到了第9家公司的Offer&#xff0c;这张的Offer的话给到28k*14薪。由于个人原因&#xff0c;…

作者头像 李华