news 2026/4/23 11:16:38

【初识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进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 13:45:48

Python工作流引擎深度评测:如何构建企业级业务流程自动化平台

Python工作流引擎深度评测&#xff1a;如何构建企业级业务流程自动化平台 【免费下载链接】SpiffWorkflow A powerful workflow engine implemented in pure Python 项目地址: https://gitcode.com/gh_mirrors/sp/SpiffWorkflow 在数字化转型浪潮中&#xff0c;企业业务…

作者头像 李华
网站建设 2026/4/16 16:07:21

深蓝词库转换终极指南:轻松实现多平台输入法词库同步

深蓝词库转换终极指南&#xff1a;轻松实现多平台输入法词库同步 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 还在为不同输入法之间的词库不兼容而烦恼吗&#xf…

作者头像 李华
网站建设 2026/4/17 17:37:55

Applite:让macOS软件管理变得如此简单

Applite&#xff1a;让macOS软件管理变得如此简单 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为复杂的命令行操作而烦恼吗&#xff1f;Applite作为一款专为macOS设计的…

作者头像 李华
网站建设 2026/4/20 10:53:32

如何轻松转换CAJ文档:3步实现PDF永久保存

还在为CAJ文档的有效期限制而烦恼吗&#xff1f;ScienceDecrypting项目为您提供完美的解决方案&#xff0c;让您轻松处理文档保护&#xff0c;将加密文档转换为标准PDF格式。无论您是学术研究者还是标准工程师&#xff0c;这个工具都能帮您实现文档的永久保存和自由使用。 【免…

作者头像 李华
网站建设 2026/4/16 19:57:31

TrafficMonitor插件系统完整配置与使用指南

TrafficMonitor作为Windows平台知名的网络状态监测工具&#xff0c;其插件系统为用户提供了强大的功能扩展能力。通过插件机制&#xff0c;用户可以在任务栏实时显示天气信息、硬件状态、股票行情等多样化内容&#xff0c;将简单的网速监控升级为全面的系统信息中心。本指南将详…

作者头像 李华
网站建设 2026/4/9 4:36:30

Android平台USB MIDI驱动程序完整使用指南

Android平台USB MIDI驱动程序完整使用指南 【免费下载链接】USB-MIDI-Driver USB MIDI Driver for Android 3.1 or later 项目地址: https://gitcode.com/gh_mirrors/us/USB-MIDI-Driver 在移动音乐制作和现场演出日益普及的今天&#xff0c;Android设备与专业MIDI设备的…

作者头像 李华