版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习目标掌握while,do-while和for三种循环语句及区别。学会使用continue、break及goto语句。掌握循环的嵌套使用。能够使用循环语句进行程序设计。坚持民族自尊、文化自信,激发爱国热情,弘扬中华民族精神。案例导入案例5裁纸奔月【问题描述】“嫦娥奔月”的幻想孕育了现代航天技术的萌芽。
2021年6月17日,3名中国航天员升空并成功进入“天宫号”空间站,向太空迈出了新的里程碑,使中国跻身于世界航天大国之列。地球离月球的距离是386000公里,有人说:“将一张纸裁成两等份,把裁好的两张纸摞起来,再裁成两等份。如此重复下去,第43次后纸的高度就是地球离月球的距离”。一张纸的厚度是0.006cm,你相信吗?知识学习【知识准备】
裁纸奔月的算法要点:有规律地重复叠折和计算。在日常生活中常常会遇到许多有一定规律的重复性操作,解决这类问题需要用到循环语句。C语言中有3种循环语句:while、do-while和for循环语句。本章学习内容如下:5.1while语句5.2do-while循环语句5.3for循环语句5.4循环的嵌套5.5三种循环语句的比较5.7循环控制5.8综合应用第二知识空间:逻辑推理*5.1while循环语句假真表达式图5-1while语句的流程图循环体语句while循环又称当型循环。格式: while(表达式) {
循环体语句; }功能:先计算表达式的值,再进行判断,当表达式的值为真(非0)时,执行循环体语句,如此反复,直到表达式的值为假(0)时结束循环。5.1while循环语句【例5.1】用while语句计算1+2+…+36的值。可看作数列{ak=k|k=1,2,…,36}的求和,累加求和的通项为:iSum+k—>iSum,伪语言描述如下:Begin1=>i,0=>iSumwhilei≤36 {iSum+i=>iSumi+1=>i}printiSumEnd5.1while循环语句【例5.1】用while语句计算1+2+…+36的值。
#include<stdio.h>
intmain()
{ inti,iSum; i=1;
//初始化循环变量 iSum=0;
//累加器清零 while(i<=36)
//循环条件
{ iSum+=i; //累加求和 i++;
//修正循环变量
} printf("sum=%d",iSum);
//输出结果return0;
}运行结果如下:sum=6665.2do-while语句do-while循环又称直到型循环。格式:do{循环体语句;}while(表达式);功能:先执行循环体语句,再求表达式,若表达式的值为非0(真),则再次执行循环体语句,如此反复,直到表达式的值为0(假)结束循环,并继续执行do-while循环后面的语句,如图5-3所示。5.2do-while语句【例5.2】用do-while语句模仿珠算666,即计算1+2+……+36的值。#include<stdio.h>intmain(){inti,iSum;i=1;iSum=0;do{ iSum+=i;//累加求和 i++;//修正循环变量}while(i<=36);//循环判断,若结果为“真”则继续循环printf("sum=%d",iSum);return0;}运行结果如下:sum=6665.3for循环语句for循环语句又称计数循环,其一般格式为:for(初始表达式;循环条件表达式;变量增值表达式){循环体语句;}功能说明:(1)先执行初始表达式;(2)计算循环条件表达式,若为非0(真),执行循环体;若为0(假),则结束循环。(3)计算变量增值表达式,然后重复执行第二步。5.3for循环语句【例5.3】用for语句计算1+2+•••+36的值。在for循环中:初始表达式:i=1,sum=0循环条件表达式:i<=36变量增值表达式:i++#include<stdio.h>intmain(){ inti,sum; for(i=1,sum=0;i<=36;i++){ sum=sum+i; } printf("sum=%d\n",sum);return0;}运行结果如下:sum=6665.4循环的嵌套循环体内包含另外一个循环语句称为循环的嵌套。循环嵌套时,外层循环执行一次,内层循环从头到尾执行一遍。3种循环不仅可以自身嵌套,而且还可以互相嵌套。5.4循环的嵌套【例5.4】打印九九乘法表。5.4循环的嵌套【例5.4】打印九九乘法表。算法设计:(1)从上往下,简化为打印第1行乘积、...、第k行乘积、...、第9行乘积,用for语句实现。for(k=1;k<=9;k++){
打印第k行乘积;printf("\n");}(2)观察第k行(k=1,2,3,…,9):k*1k*2k*3k*4......k*i……k*9(i=1,2,3,…,9)从左往右,通项为:ai=k*i的数列{ai|i=1,2,...,9},用循环实现。for(i=1;i<=9;i++)printf("%4d",k*i);第k行是另起以行,必须换行printf("\n")。5.4循环的嵌套【例5.4】打印九九乘法表。#include<stdio.h>intmain(){intk,i;for(k=1;k<=9;k++)/*外循环*/{ for(i=1;i<=9;i++)/*内循环*/ printf("%4d",k*i);/*右对齐,隔开*/ printf("\n");/*换行*/
}}5.5三种循环语句的比较(1)三种循环都可以处理同一类问题,且可以互相替代。(2)三种循环都能用break结束循环,用continue开始下一次循环。(3)while和do-while只判断循环条件。循环变量的初值化要放在循环语句之前(如i=0,s=1等),在循环体中还应包含修改循环条件的语句(如i++,j++等)。(4)for语句本身除了包含循环条件之外还可以给循环变量赋初值。当然也允许省略其中某些部分。如果省略前后两项成为for(;循环条件;)时,完全与while(循环条件)等效。(5)while和for都是先判断后循环,而do-while是先循环后判断。案例5裁纸奔月【问题分析】把厚度为0.006cm的纸不断地裁剪、摞折,经过43次操作后,如果摞好的纸当作梯子,你就可以沿着纸梯子直奔月球。本案例的任务就是利用C语言提供的循环语句,求解纸的厚度。演示经过43次操作后纸的高度足以奔月。
【算法设计】(1)准备工作:定义两个变量paper和n,分别存储纸的厚度与裁摞次数,并把paper初值设为0.006cm,n的初始值设为0。(2)如果纸的厚度小于地月之距离时,即paper<38500000000cm时,重复做以下工作:裁纸摞起来,即纸的厚度变成2倍,次数加1,即n+1。(3)如果paper>=38500000000cm时,结束裁纸摞叠,并完成如下工作:①输出纸的厚度,即打印变量paper。②输出最后摞纸次数,即打印变量n。案例5裁纸奔月参考代码如下:#include<stdio.h>voidmain(){doublepaper=0.006;intn=0;while(paper<38500000000.0)/*纸厚小于地球与月球之距离时,重复做*/{paper=paper*2;/*摞起来,即纸的厚度*2*/n=n+1; /*记录摞纸的次数*/}printf("纸的厚度:%f\n",paper);printf("摞纸次数:%d\n",n);}运行结果如下:纸的厚度:52776558133.248001摞纸次数:435.7循环控制5.7.1break与continue语句一般格式:break;continue;功能说明:(1)break:强行结束循环,转向执行循环语句的下一条语句。(2)continue:结束本次循环。对于while和do-while循环,跳过循环体其余语句,转向循环终止条件的判断;而对for循环,跳过循环体其余语句,转向循环变量增值量表达式的计算,如图5-11所示。5.6break、continue和goto语句5.7.1break与continue语句5.7循环控制5.7.2goto语句和标号语句goto语句的格式:goto<语句标号>;功能说明:(1)goto语句是无条件转移语句,程序执行到goto语句时,无条件地转移到<语句标号>所指定的语句并执行。(2)<语句标号>是一个标识符,应按标识符的命名规则来命名。(3)标号语句则是由语句标号和其后的冒号构成的,即:语句标号:是goto语句的转移目标。5.8综合应用案例5-1趣味古典数学问题
【问题描述】有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长大到第3个月后每个月又生一对兔子。假设所有的兔子都不死亡,问每个月的兔子总对数为多少?程序运行效果如图5-12所示。
图5-12趣味古典数学问题运行效果案例5-1趣味古典数学问题【算法分析】把每个月的兔子总对数组成的数列记为{fn|n=1,2,3...},把不满一个月的兔子称小兔子,满一个月而不满二个月的兔子称中兔子,满三个月及以上的兔子称老兔子,根据题意有:每对老兔子每月都生一对小兔子。于是每月的小、中、老兔子,以及兔子总数见下表。
表5-1月份-兔子明细表案例5-1趣味古典数学问题【算法设计】数列{fn}有如下关系:f1=1f2=1fn=fn-1+fn-2(n
3)这就是fibonacci数列。因此,打印数列前21项可用下算法描述:Begin(算法开始)1=>f1,1=>f2printf1,f2for(n=3;n<=21;n++){fn-1+fn-2=>fn
,printfn//由前两项的fn-1、fn-2求得fn,并输出fn
fn-1
=>fn-2,fn=>fn-1//修改fn-1
,fn-2
的值,被下次循环递推}End(算法结束)
案例5-1趣味古典数学问题#include<stdio.h>intmain(){inti;longf1=1L,f2=1L,f;printf("%6ld%6ld",f1,f2);for(i=3;i<=21;i++){f=f1+f2;//由前两项的f1,f2求得当前项fprintf("%6ld",f);//输出fif(i%7==0)printf("\n");//每行限输出7个fibonacci数
f1=f2; //修改f1的值,被下次循环递推
f2=f;//修改f2的值,被下次循环递推}return0;}案例5-2文字游戏【问题描述】下列乘法算式中:每个汉字代表1个数字(0~9)。相同的汉字代表相同的数字,不同的汉字代表不同的数字。
赛软件*比赛=软件比拼试编程确定使得整个算式成立的数字组合,如有多种情况,请给出所有可能的答案。案例5-2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新版《医疗器械经营质量管理规范》培训考核试题及答案2025
- 高级技工考试题库及答案
- 叉车理论培训考试题及答案
- 2026年吉林中医助理医师考试试题及答案
- 冷链物流企业电工装卸作业安全操作规程
- 变电站工程实施方案
- 复配农药制剂项目规划选址论证报告
- 变电站工程技术方案
- 报废机动车拆解项目投资计划书
- 化工企业组建方案
- DL∕T 1926-2018 火力发电机组自启停控制系统技术导则
- 律所之间转委托合同范本
- 广州市建筑工程建材监管与服务平台操作手册
- JTG-H30-2015公路养护安全作业规程
- 屋顶钢架拆除方案
- TCPA 005-2024 星级品质 婴儿纸尿裤
- JC∕T 2476-2018 机械喷涂砂浆
- 主要施工管理计划(通用版)
- GB/T 5900.4-2022机床主轴端部与卡盘连接尺寸第4部分:圆柱连接
- LY/T 2058-2012实木地板坯料
- GB 16357-1996工业X射线探伤放射卫生防护标准
评论
0/150
提交评论