news 2025/12/27 14:16:20

【初识C语言】循环结构(while语句、do…while语句和for语句)详细解答

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【初识C语言】循环结构(while语句、do…while语句和for语句)详细解答

系列文章目录

前期文章

【初识C语言】选择结构(if语句和switch语句)详细解答


文章目录

  • 系列文章目录
  • 前言
  • 一、循环结构的重要性和实现
    • 循环结构的重要性
    • 循环结构的实现
      • 1、用while语句实现循环
      • 2、用do…while语句实现循环
      • 3、用for语句实现循环
  • 二、循环的嵌套和结束
    • 循环的嵌套
    • 提前结束循环
      • 1、break语句提前终止循环
      • 2、continue语句提前结束本次循环
  • 总结

前言

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构。上期我们讲了选择结构的内容,这期我们主要系统讲解其中的循环结构的知识,帮助更多小伙伴认识和学习C语言,欢迎各位小伙伴在评论区分享心得体会。


一、循环结构的重要性和实现

循环结构的重要性

我们日常生活中需要解决一些重复性、机械性的操作,比如:求100以内所有整数之和;求班级内50个同学的平均成绩。

这些操作仅仅只是值不同,但所进行的操作确实相同的,如果只是一行一行代码去实现,去挨个相加,不仅浪费时间,而且占用内存空间。

因此,我们可以使用循环结构去解决这些需要重复处理的问题。

循环结构的实现

C语言提供的循环结构语句主要有while语句、do…while语句和for语句。

1、用while语句实现循环

while语句的一般形式

while(表达式)//表达式也称为循环条件表达式语句;//语句就是循环体

while语句循环的特点是:先判断条件表达式,后执行循环体语句

要想要while循环构成有效循环,需要指定两个条件:
(1)循环体,即需要重复执行的操作;
(2)循环结束的条件,即在什么情况下停止重复。

执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

举个例子:求1+2+3+……+10的值是多少?

#include<stdio.h>intmain(){inti=1,sum=0;//定义变量i的初值为1,sum的初值为0while(i<=10)//当i>10,条件表达式i<=10的值为假,不执行循环体{//循环体开始sum=sum+i;//第1次累加后,sum的值为1i++;//i的值+1,为下次累加做准备}//循环体结束printf("%d",sum);//输出1+2+3+……+10的累加和return0;}

如果你已经了解了while语句的基本用法,现在轮到你来试试看了,做做下面的这道题:
KiKi说祝福

2、用do…while语句实现循环

do…while语句的一般形式

do循环体语句;while(表达式);

do…while语句循环的特点是:先无条件地执行一次循环体,然后判断循环条件是否成立

对于同一个问题我们既可以用while语句来处理,也可以用do…while语句来处理,二者可以相互转换。

还是这道例子:求1+2+3+……+10的值是多少?

#include<stdio.h>intmain(){inti=1,sum=0;do//循环开始时不检查条件,先执行一次循环体{sum=sum+i;i++;}while(i<=10);//当i>10时,表达式i<=10的值为假,跳出循环体printf("%d",sum);return0;}

从上面的例子可以看出,do…while和while都可以用在这道题里,具体要使用什么语句,看程序猿自己的心情。

为了让大家更方便能看出do…while和while的区别,我把代码进行修改一下:

#include<stdio.h>intmain(){inti=11,sum1=0,sum2=0;printf("i = %d\n",i);// 用do…while语句实现do{// 循环开始时不检查条件,先执行一次循环体sum1=sum1+i;// 所以sum1会得到sum1+i,也就是0+11=11i++;}while(i<=10);// 当i>10时,表达式i<=10的值为假,跳出循环体printf("sum1 = %d\n",sum1);// sum1 = 11// 用while语句实现while(i<=10){// 当i>10,条件表达式i<=10的值为假,跳出循环体sum2=sum2+i;// 因为循环体已跳过,所以sum2表达式不执行i++;}printf("sum2 = %d\n",sum2);// sum2 = 0return0;}


从上面的对比可以看出,我们在进行一些无论如何都要执行至少一遍操作的循环的时候,就可以使用do…while语句。当然,如果你更擅长while语句也可以,只是会多几步操作。

如果你已经会使用do…while语句了,那就再试试这道题,这次使用do…while语句完成:
KiKi说祝福

3、用for语句实现循环

for语句对比前两个语句,不仅更加灵活,在实际使用过程中,也是基本使用次数更多的。当然,还是那句话——不管哪个语句,能解决问题就好语句。

for语句的一般形式:

for(表达式1;表达式2;表达式3)语句

三个表达式的主要作用是:
表达式 1:设置初始条件,只执行一次。
表达式 2:循环条件表达式,用来判断是否继续进行循环。在每次执行循环体前都先执行此表达式,决定是否继续循环。
表达式 3:作为循环的调整。例如使循环变量增值,它在每次执行完循环体才进行的。

因此,for语句也可以理解成:

for(循环变量赋初值;循环条件;循环变量增值)语句

还是举个例子:求1+2+3+……+10的值是多少?

#include<stdio.h>intmain(){inti=0,sum=0;for(i=1;i<=10;i++){// i赋值为1;当i>10时为假,循环体结束;如果为真,i增值1sum=sum+i;}printf("%d",sum);return0;}


可以看出,对比while语句和do…while语句,for语句不仅更加简洁,而且更加一目了然。对于循环体代码非常多的while语句,完全可以用for语句代替。

好了,如果你会使用for语句了,那就再试试这道题,使用for语句解决:
KiKi说祝福

看到这里我们就可以小结一下,对于已知重复次数的循环,使用for语句更方便、更清晰。而仅知道循环结束的条件,不知道循环次数的用while语句和do…while语句更简洁。

二、循环的嵌套和结束

循环的嵌套

一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。while语句、do…while语句、for语句都可以互相嵌套。

还是看个例子:用循环输出一个“ * ”组成直角三角形:

#include<stdio.h>intmain(){inti,j;for(i=0;i<5;i++){// for语句循环j=0;// 给j赋初值while(j<=i){// while语句的循环条件表达式printf(" * ");j++;// 最后执行增值操作;如果不增值,那while将一直循环下去}printf("\n");}return0;}


我们可以清楚的看到,for语句的循环体里面包含了while语句循环,这就是嵌套。当然,你也可以用把while语句循环换成do…while语句或者for语句。

下面就做道非常经典的例题来检验一下吧。
九九乘法表

提前结束循环

在正常情况下循环语句会根据事先指定的循环条件正常执行和终止循环,但当出现某种情况的时候,需要提前结束正在执行的循环。

比如:在征集善款的时候,每个人捐赠的钱数都是不确定的,但只要捐到目标额度,就不需要再进行捐款了,就可以退出循环。

提前结束循环的语句有两个:break语句和continue语句。

1、break语句提前终止循环

break语句的一般形式为:

break;

break语句的作用是:使流程跳转到循环体之外,接着执行循环体下面的语句。

下面举个栗子:假设一百个学生进行捐款,每个人捐款的数额由用户输入,捐款的数额达到1000元就结束。

#include<stdio.h>intmain(){intstudent,amount=0,total=0;// amount代表捐款数,total用来存放捐款总数for(student=1;student<=100;student++){printf("请输入捐款数额:");scanf("%d",&amount);//捐款数由用户输入total=total+amount;if(total>=1000){//当捐款总数大于等于1000元时,就执行下面语句break;//break跳出循环体,跳出的是for循环体}}printf("%d\n",total);return0;}


这里小伙伴容易有个误区,在这里进行声明:break语句跳出的不是if语句里面的语句,而是整个for循环的循环体。

笔记:break语句只能用于循环语句和switch语句,不能单独使用。

2、continue语句提前结束本次循环

continue语句的一般形式为:

continue;

continue语句的作用是:结束本次循环,即跳过循环体中下面尚未执行的语句,然后进行下一次是否执行循环的判定。

通常用于并不希望终止整个循环,而只是希望提前结束本次循环,接着执行下次循环的情况,就可以用continue。

举个例子:要求输出100~200之间不能被3整除的数。

#include<stdio.h>intmain(){intn;for(n=100;n<=200;n++){if(n%3==0){//当n能被3整除时,执行continue语句continue;//跳过循环体,进行下一个循环判定}printf("%d ",n);//因为能被3整除的数都被跳过了,所以输出的都是不能被3整除的数}return0;}

笔记:continue语句只能用于循环语句中。

学到了这里,针对break和continue语句,我们再做一个练习巩固下:
KiKi求质素


总结

这期内容我们重点学习了循环结构的三种语句和提前结束循环的两种语句,希望小伙伴有所收获。喜欢这期内容的小伙伴可以点个赞支持一下,小霍尽快更新下一期内容。

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

老树开新花:OpenCore Legacy Patcher让旧Mac重获新生

你是否曾为心爱的老Mac感到惋惜&#xff1f;看着它因为硬件限制而无法升级到最新的macOS系统&#xff0c;仿佛一位老友被时代抛弃。现在&#xff0c;这一切都有了转机——OpenCore Legacy Patcher&#xff08;OCLP&#xff09;项目正以创新的技术方案&#xff0c;为这些"老…

作者头像 李华
网站建设 2025/12/26 22:25:31

TaskFlow任务编排框架实战指南:从入门到精通

在当今复杂的业务场景中&#xff0c;如何高效地管理和执行多个相互依赖的任务成为了开发人员面临的重要挑战。TaskFlow任务编排框架基于有向无环图(DAG)技术&#xff0c;为Java开发者提供了一套完整的任务流程管理解决方案。本文将带您深入了解这个轻量级框架的核心特性和实际应…

作者头像 李华
网站建设 2025/12/15 1:06:46

剪映API自动化开发实战:从零构建智能视频剪辑系统

剪映API自动化开发实战&#xff1a;从零构建智能视频剪辑系统 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 在当今视频内容爆炸式增长的时代&#xff0c;传统的手动剪辑方式已经无法…

作者头像 李华
网站建设 2025/12/15 1:06:20

探索千万级3D对象宝库:Objaverse-XL完整使用手册

探索千万级3D对象宝库&#xff1a;Objaverse-XL完整使用手册 【免费下载链接】objaverse-xl &#x1fa90; Objaverse-XL is a Universe of 10M 3D Objects. Contains API Scripts for Downloading and Processing! 项目地址: https://gitcode.com/gh_mirrors/ob/objaverse-x…

作者头像 李华
网站建设 2025/12/26 10:54:00

解锁网盘高速下载:3步告别限速困扰的终极攻略

还在为网盘下载速度慢而烦恼吗&#xff1f;每次下载大文件都要忍受几十KB/s的龟速&#xff1f;网盘直链下载助手正是为你量身打造的解决方案&#xff01;这款免费开源的浏览器脚本工具能够帮助用户获取百度网盘、阿里云盘等六大主流网盘的直链下载地址&#xff0c;彻底告别网盘…

作者头像 李华
网站建设 2025/12/21 6:46:17

剪映自动化革命:JianYingApi让视频剪辑进入智能时代

剪映自动化革命&#xff1a;JianYingApi让视频剪辑进入智能时代 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 在当今视频内容爆发的时代&#xff0c;JianYingApi作为第三方剪映Api接…

作者头像 李华