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

更新补发第6天:7天学会C语言,每天5分钟,不需要基础

这是更新补发的第6天的课程,内容是循环语句。

循环语句总共有三种:

for循环while循环do-while循环

第5天其实已经讲了一些for循环,今天再复习一下。

一、for循环

三个循环语句中我特别喜欢for循环,因为它很简洁。

我们先来看一个例子:

例1:编程输出100行:你好,C语言!

程序如下:

for循环的语法格式如下:

注意:当循环体只有一条语句时,循环体前后的大括号{ }可以去掉。

所以例1也可以写成:

循环体printf("你好,C语言!\n"); 前面的 { 和后面的 } 去掉了。

再看一个例子:

例2:编程输出从1到100的整数,每行输出1个。

程序如下:

例2也可以写成:

知道{ }的作用嗎?

if (條件) 語句;

if (條件) 語句1;else 語句2;

凡是語法中出現一條語句的地方,想要放多條語句,就用{ }。

这段话很简洁描述了大括号的作用,是头条友友ScholarMartin在我的评论区留言的,我原封不动放上来,非常感谢@ScholarMartin。

再次强调:当循环体只有一条语句时,循环体前后的大括号{ }可以去掉。

个人建议保留大括号{ },不要去掉。

例3:编程输入10个整数,求平均值。

注意输出是用printf( )函数,输入是scanf( )函数。

程序如下:

运行时输入10个整数,就可以得到平均值。

注意输入的10个整数,以回车间隔(就是输入一个整数就回车一次),或者以空格隔开(输入的10个整数之间用空格间隔,输入完10个数后回车),都行。

比如我输入1、2、3、4、5、6、7、8、9、10这10个整数,每输入1个数就回车一次,运行结果如下:

如果运行时输入10个整数,还是输入1到10,数字之间以空格隔开,输入完10个数以后回车,得到平均值。运行结果如下:

前面1到10是输入的10个整数,最后得到平均值是5.5。

注意之前说过,%f输出的实数默认保留6位小数,那么我只想保留2位小数怎么办呢?把输出语句中%f改成%.2f,就是%和f之间加上.2,注意2前面的小数点不要漏了,表示保留2位小数。

例4:编程输入10个整数,求平均值,要求输出的平均值保留2位小数。

运行时输入10个整数,还是输入1到10,数字之间以空格隔开,输入完10个数以后回车,得到平均值。运行结果如下:

还有一个问题,大家看程序中平均值变量ave的数据类型是float型,不是int型,因为平均值是可能有小数的,所以平均值变量的数据类型不是int,而是float型。

另外,求出总和s以后,除以10得到平均值,程序中不是

ave = s / 10 ;

而是

ave = s / 10.0 ;

因为这个除法运算符/, 它左右两边是整数的话,得出来的结果会自动取整(就是自动去掉小数部分),而它左右两边只要有一个为实数,结果才是实数。

比如: 55/10的结果是5, 55/10.0的结果是5.5, 55.0/10的结果也是5.5。

好了,我们再来看看while循环。

二、wile循环

for循环的循环次数是确定的,我一看

就知道循环要执行10次。

因为i一开始赋值为1,只要i小于等于10,就要执行循环体,执行循环体以后再执行i++(就是i增加1),每执行一次循环i加一次1,直到加到大于10才停止循环,所以知道循环次数为10次。

而while循环只看循环条件,循环次数不一定是确定的。

1、while语法格式

注意while括号后面没有分号。

当条件为真时,重复执行循环体,直到条件为假。

2、while执行步骤

首先判断条件是否为真,若为真执行循环体,然后再回头判断条件是否为真,重复这个过程,直到条件为假,再执行后续语句。

注意:如果一开始条件就为假,则循环体一次也不执行,直接执行while后续语句了。

3、实践

例5:编程求1+2+3+…+100的和。

运行结果为5050。

可能你觉得这道题还是用for循环简洁,确实,用哪种循环语句看个人习惯,你可以选用for循环,也可以选用while循环。

for循环可以改成while循环很简单:

for循环语法格式:

改成while循环就是:

前面讲了,一般循环次数确定时用for循环,循环次数不确定时用while循环。

例6:编程输入若干个整数,直到输入0为止,求这些整数的和。

这道题循环次数是不确定的,因为你不知道用户输入多少个数以后才输入0,所以我们用while循环实现。

运行时输入100、-2、90、0,则得出结果为188。

这里先输入一个整数n,才能判断n是否等于0,有些伙伴可能会犯这样的错误:

就是while之前没有输入n,此时n没有值,就无法判断它是否为0,所以这是不对的。

在判断n是否为0之前,n必须先有值。

所以在

之前,一定要有

这道程序还有一个容易错的地方,大家看以下程序有什么问题?

例7:程序功能为输入若干整数,直到输入0为止,求这些整数的和。请问如下程序有什么问题。

看出问题所在了吗?

这个程序,循环体中没有

也就是说,程序只输入了一次整数n,在循环没开始的时候输入的(while之前有一个scanf),

假设一开始输入的整数是10,那么程序是一个死循环,因为n永远值等于10,它没有办法改变,因为循环体里面没有重新输入,n就没有办法变成0,它永远是10,永远无法让条件为假,就是永远没法结束循环。

三、do-wile循环

while循环和for循环一样,都是先判断条件是否为真,如果条件为真就进入循环,直到循环条件为假则结束循环。那么,如果一开始条件就为假,则循环一次都不会被执行。

do-whille循环与前面两种循环不一样,它是先执行循环体,然后判断条件是否为真,如果循环为真则继续执行循环体,否则结束循环。

1、do-while语法格式

注意do后面没有分号,while(条件)后面有一个分号。

先执行循环体,然后判断条件,当条件为真时,重复执行循环体,直到条件为假。

2、do-while执行步骤

先执行循环体,然后判断条件,当条件为真时,重复执行循环体,重复这个过程,直到条件为假,再执行后续语句。

所以不管三七二十一,循环体至少会执行一次。

和for和while不一样,for和while如果一开始条件就为假,则循环体一次也不执行,但是do-while循环体至少会执行一次。

3、实践

例8:编程求1+2+3+…+100的和。

可以看出while改成do-while也很容易:

while的语法格式:

改成do-while语句如下:

例9:编程输入若干整数,直到输入0为止,求这些整数的和,用do-while实现。程序如下:

执行时如果输入100、-2、98和0,运行结果为196。

四、break语句和continue语句

1、break语句

break的功能:中断循环。

语法格式:

break;

break的意思就是中断循环,或者说跳出循环。

例10:下列程序的运行结果是什么?

运行结果只输出1和2:

循环体中,当满足条件( i%3==0 ),执行break; 中断循环,执行循环后续语句即printf(“\n”);

2、continue语句

continue语句功能:跳过循环体中在continue后面的语句,执行下一次循环。

语法格式:

continue;

break的意思是中断循环,而continue是跳过循环体后面的语句,执行下一次循环。

我们把例10中的break改成continue,看看发生了什么?

例11:下列程序的运行结果是什么?

运行结果是输出1 2 4 5 7 8 10,而3、6、9不能被输出:

当满足条件( i%3==0 )时,执行continue; 此时跳过continue;后面的语句printf(“%d ”, i);,执行下次循环,直到循环条件为假,才结束循环,执行后续语句printf(“\n”);

也就是说,当continue被执行时,它后面的语句printf(“%d ”, i);就不能执行了(跳过了),所以3、6、9没有输出。

break语句和continue语句没明白的也不要紧,可以先略过,你只要先懂得for、while和do-while循环就可以了。

另外强调一下,我们知道输入方式有两种状态:

C程序中的符号,只要不是输出信息的(不是在printf()的双引号里面的信息),那么所有的圆括号、尖括号、大括号、逗号、分号、双引号等等所有这些符号,都必须是这个状态下的符号:

http://www.rkmt.cn/news/1388090.html

相关文章:

  • 【PolarCTF】审计
  • 使用高斯混合模型对鸢尾花数据集进行聚类分析
  • Unity实时屏幕目标检测与交互框架:YOLOv12工程化实践
  • 【仅限前500名领取】Midjourney光效渲染黄金参数包(含32组实测Prompt+Lighting Tag权重矩阵+SDXL交叉验证数据集)
  • 需求拆了又拆,版本发了又鸽,你到底被卡在哪一环?
  • Azure Blob Storage企业级数据生命周期管理实战
  • 别再写‘素颜’小程序了!这5个CSS技巧让你的界面瞬间高级(附代码)
  • 2026年保山市本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 大熊猫898989
  • 2026年大同市正规上门黄金白银回收品牌门店名录 K金+铂金+金条+银条回收门店联系方式推荐+指南 - 盛世金银回收
  • RAG接入不是终点:企业AI助手答不准,断点通常在这几层
  • 如何解决kafka topic数量过多带来的性能问题?
  • 基于Solana与USDC构建Web3微支付API:实现按请求计费的实践
  • Unity UGUI遮罩性能深度解析:RectMask2D与Mask原理对比
  • 军用笔记本电脑推荐:半加固笔记本L156D和全加固笔记本C173D
  • 20张爆笑手绘图+核心代码,带你秒懂AI从神经网络到Agent的底层逻辑!
  • 2026年门店小程序买单功能怎么开通?
  • AI招聘工具怎么选?2026年最新AI招聘工具选型框架
  • Unity高斯泼溅实时渲染实战:从点云到GPU加速3D场景
  • 从台场独角兽谢幕,到1/12布衣可动延续:高达与模玩的“尺度接力”
  • FactoryIO虚拟工厂仿真:用SCL写一个带急停和循环停止的机械手程序(附完整代码)
  • Power BI矩阵视觉:替代Excel透视表的交互式分析核心
  • MSTP配置后必做的5个检查命令:从‘display stp brief’到‘dis stp topology-change’的排错指南
  • nginx-healthcheck-module
  • MCP协议实战:构建AI增强开发环境,提升研发效能
  • 别再让ECU‘掉线’了!手把手教你用UDS 3E服务维持诊断会话(附CANoe实操)
  • 多重安全保护:DLG-1如何保障交通工程师的测试安全?
  • DeepSeek模型服务集成测试全链路验证方案(含API网关+LLM响应一致性校验)
  • 20行代码构建AI模型智能路由器:基于MCP与WhichModel的动态选型方案
  • ARM调试通信通道(DCC)与指令传输寄存器(ITR)架构解析
  • dBm、dBFS、幅度、线性功率完整换算与标定原理