




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章循环结构程序设计2第五章
循环结构程序设计教学目标:掌握for语句的用法掌握while语句和do-while语句的用法学会使用循环结构程序设计教学重点与难点:学会使用循环结构设计程序35.1for语句
for语句是最常用的实现循环结构的语句,使用比较灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况。5.1.1for语句的格式1.for语句的一般格式为:
for(<表达式1>;<表达式2>;<表达式3>){语句块;
}45.1for语句2.格式说明:(1)for是关键字,小括号不得缺省,大括号中只有一条语句时,可以省略大括号。(2)小括号中的3个表达式的所表示的含义如下:表达式1:初值表达式,用于在循环开始前,为循环变量设置初始值。一般为赋值表达式。表达式2:循环控制逻辑表达式,它控制循环执行的条件,决定循环次数。一般为关系表达式或逻辑表达式。表达式3:一般为赋值表达式,改变循环变量的值,递增或递减。(3)大括号括起来的语句组称为循环体。55.1for语句3.执行过程:(1)先计算表达式1;(2)再计算表达式2,若其值为真(非0),则执行第三步;若为假,则结束循环,执行for循环后的语句;(3)执行循环体中的语句;(4)计算表达式3;(5)转回第二步继续执行依此循环,直至表达式2的值为假(0),退出循环。执行流程如图5.1所示。6图5.1for循环的执行流程图
5.1for语句7【例5.1】编写程序计算s=1+2+3+…+100。5.1for语句程序如下:#include<stdio.h>voidmain(){ ints=0,i; for(i=1;i<=100;i++) { s=s+i;/*循环体语句*/ } printf("s=%d\n",s);}程序运行结果:s=50508
【例5.2】从键盘输入某小组10个学生的C语言成绩,计算并输出平均分。5.1for语句#include<stdio.h>voidmain(){floatscore,sum=0;floataverage;inti;printf("请输入10学生的C语言成绩:\n");for(i=1;i<=10;i++){ scanf("%f",&score); sum=sum+score;}average=sum/10;printf("10个学生的C语言平均分是:%4.1f",average);}程序运行结果:请输入10个人的C语言成绩:80907020609030809575↙全班10个学生的C语言平均分是:69.09for语句中的三个表达式根据情况可以省略,说明如下:5.1.2for语句的进一步演变1.省略表达式1:
for语句的一般形式中的“表达式1”可以省略。但要注意省略表达式1时,其后的分号不能省略。此时,应在for语句之前给循环变量赋初值。例如:i=1;for(;i<=100;i++)sum=sum+i;
105.1.2for语句的进一步演变2.省略表达式2:表达式2的功能是终止循环,如果省略表达式2,即表示表达式2的值始终为真,循环将无终止地进行下去。例如:for(i=1;;i++)printf("%d",i);该循环无终止条件,将无限循环输出1、2、3、4、5……。如果要实现终止循环,则在循环体里设置有条件的结束循环for(i=1;;i++){s=s+i;if(i>100)break;}break的功能是终止循环,如果i>100即i=101时即结束循环。113.省略表达式3:
表达式3的功能是改变循环变量的值,递增或递减。如果省略表达式3,也将产生一个无穷循环。因此,如果要保证循环能正常结束,可以将表达式3放在循环体中。例如:for(i=1;i<=100;){sum=sum+i;i++;}5.1.2for语句的进一步演变125.1.2for语句的进一步演变4.三个表达式都可省略如:for(;;)即不设初值,不判断条件(表达式2为真值),循环变量不增值。无终止地执行循环体。在实际编程中,并不是说表达式1、表达式2和表达式3不存在,而是它们要出现在程序中其它地方:如:
i=1;/*表达式1*/for(;;){if(i>100)break;/*表达式2*/s=s+i;i++;/*表达式3*/}135.1.2for语句的进一步演变5.for语句中要注意的几个问题:(1)在for语句中,表达式1和表达式3也可以使用逗号表达式。在逗号表达式内按从左至右求解,整个表达式的值为其中最右边的表达式的值。例如:for(i=1;i<=100;i++,sum=sum+i;)相当于:for(i=1;i<=100;i++)sum=sum+i;(2)在for语句中,表达式一般为关系表达式(如i<=10)或逻辑表达式(如x>0‖y<-4),但也可以是其他表达式(如字符表达式、数值表达式)。(3)for语句的循环语句可以是空语句。空语句用来实现延时,即在程序执行中等待一定的时间。for(i=1;i<=1000;i++);注意:上面语句最后的逗号不能省略,它代表一个空语句。14【例5.4】求Fibonacci数列的前20项。该级数的前几项是:1、1、2、3、5、8、13、21、34、…5.1.2for语句的进一步演变#include<stdio.h>voidmain(){ intf1=1,f2=1,f3=0,i=3; printf("%d,%d",f1,f2); for(;i<=20;i++) { f3=f1+f2; printf("%d,",f3); if(i%5==0)printf("\n"); f1=f2; f2=f3; }}程序运行结果:1,,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,155.2
while语句1、while语句的格式:while(表达式){循环体语句;}2、格式说明:(1)while是c语言的关键字;(2)while后的圆括号不能缺少,表达式通常是关系表达式或逻辑表达式;表示循环的条件;也可以是任意合法的表达式;(3)循环体可以是多个语句,必须用大括号括起来。163、执行过程:先计算表达式的值,当表达式的值为非0时,执行循环体;再计算表达式的值,重复上述步骤,直到表达式的值为0时,结束循环,执行循环语句的后续语句。执行流程如图5.2所示。5.2
while语句图5.2while循环的执行流程图175.2
while语句
注意:(1)在while语句前应为循环控制变量赋初值;(2)循环体内应有改变循环控制变量的语句;(3)while循环的特点是先判断后执行,故循环有可能一次都不被执行;(4)while语句常常应用于未知循环次数的情况。185.2
while语句【例5.5】编写程序,输入若干学生的成绩,输出最高分和最低分。
程序如下:
#include<stdio.h>
voidmain(){floatscore,max,min;/*max存放最高分,min存放最低分*/printf("请输入成绩,输入负数结束");/*提示信息*/scanf("%f",&score);/*输入第一个学生的分数*/max=score;min=score;while(score>=0){ if(max<score)max=score; if(min>score)min=score; scanf("%f",&score);}printf("最高分为%5.1f,最低分为%5.1f",max,min);}191.do-while语句的格式采用while语句实现的是一种直到型循环结构,其语法的一般格式:do{循环体语句;}while(表达式);2.格式说明:(1)do、while是c语言的关键字;(2)while后的圆括号不能缺少,表达式是任意合法的表达式;(3)循环体可以是多个语句,必须用大括号括起来。5.3 do-while语句20
3.执行过程:(1)先执行do后面的循环体语句,(2)再计算while后圆括号中表达式的值,当表达式的值为非0时,转去执行循环体;直到为0时,结束循环,执行循环语句的后续语句;执行流程如图5.3所示。5.3 do-while语句图5.3do-while循环的执行流程图215.3 do-while语句注意:(1)循环体可以用复合语句;(2)循环控制变量在执行do前必须赋初值;循环体内应有改变循环控制变量的语句;(3)do-while循环的特点是先执行后判断,故循环至少被执行一次;(4)“;”不得丢失。22
【例5.7】统计从键盘输入的一行非空字符的个数(以回车作为输入结束标记)程序如下:#include<stdio.h>voidmain(){ charch; intnum=0; printf("请输入一行非空字符,以回车作为输入结束:"); do { ch=getchar();/*从键盘输入一个字符*/ num++;/*统计字符个数变量自加1*/ }while(ch!='\n');/*当ch不是回车时,继续执行循环体*/ printf("num=%d\n",num-1);}5.3 do-while语句235.4 循环的嵌套循环结构的循环体可以是任何合法的C语句,如果循环体中包含另一个循环语句,则构成了循环的嵌套,称为多层循环。三种循环语句for、while、do...while可以互相嵌套自由组合。循环嵌套常用的形式如下:245.4.1多层循环(1)for(;;){…for(;;){…}}(2)for(;;){…while(){…}}(3)for(;;){…do{…}while();}(4)do{…for(;;){…}}while();(5)while(){…for(;;){…}}(6)do{…while(){…}}25但要注意的是,各循环必须完整,相互之间绝不允许交叉。如下嵌套形式是错误的:do{for(;;){…}while();/*格式交叉*/}双层循环结构程序的执行过程是外循环执行一次,内层循环根据情况要执行一个循环过程。5.4.1多层循环26【例5.9】输出显示5行7列的星形矩阵。程序如下:#include<stdio.h>voidmain(){ inti,j; intcol,row; printf("请输入行数和列数:"); scanf("%d%d",&row,&col); for(i=1;i<=row;i++)/*控制行*/ { for(j=1;j<=col;j++)/*控制列*/ printf("*"); printf("\n");/*换行*/ }}程序运行结果:请输入行数和列数:57***********************************5.4.2循环嵌套的应用27【例5.10】输出:乘法九九表。程序如下:#include<stdio.h>voidmain(){ inti,j; for(i=1;i<10;i++)/*外层循环*/ { for(j=1;j<=i;j++)/*内层循环*/ printf("%d*%d=%d",i,j,i*j);/*输出数据*/ printf("\n");/*每一行输出完毕换行*/ } printf("\n");}5.4.2循环嵌套的应用28
在设计循环结构的程序时,有时,我们需要在循环体中提前跳出循环,或者在满足某种条件下,不执行循环中剩下的语句而立即从头开始新的一轮循环,这时就要用到break和continue语句。break语句break语句的一般格式为:break;
在循环语句中,break语句的作用是在循环体中测试到应立即结束循环时,使控制立即跳出循环结构,转而执行循环语句后的语句。
5.4.3break与continue语句29【例5-11】判断输入的整数是否为素数。素数是只能被1和本身整除的数。程序如下:#include<stdio.h>voidmain(){ intn,i; printf("请输入一个整数:"); scanf("%d",&n); for(i=2;i<n;i++) if(n%i==0)break; if(i>=n) printf("%d是素数\n",n); else printf("%d不是素数\n",n);}程序运行结果:请输入一个整数:11↙11是素数请输入一个整数:15↙15不是素数5.4.3break与continue语句30
2.continue语句continue语句只能用于循环结构中,一旦执行了continue语句,程序就跳过循环体中位于该语句后的所有语句,提前结束本次循环周期并开始新一轮循环。continue语句其一般格式是:
continue;注意:在多层循环中本语句只结束本层本次的循环,并不跳出循环。5.4.3break与continue语句31【例5.12】输出100以内能被7整除的数。程序如下:#include<stdio.h>voidmain(){ intn; for(n=7;n<=100;n++) { if(n%7!=0)continue; printf("%d",n); }}5.4.3break与continue语句程序运行结果:
714212835424956
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 运营管理中的挑战与应对策略计划
- 仓库设备维护管理倡议计划
- 《贵州德力能源有限公司纳雍县新房乡营龙煤矿(变更)矿产资源绿色开发利用方案(三合一)》评审意见
- 组装机箱知识培训课件
- 2025年阿拉善盟年货运从业资格证考试题库
- 2025年武汉货运资格考试答案
- 2025年乌鲁木齐货年从业资格证考试题目
- 2025年福州货运从业资格证考试题库答案解析
- 第5课+古代非洲与美洲+高一下学期统编版(2019)必修中外历史纲要下
- 0-3岁婴幼儿游戏知到课后答案智慧树章节测试答案2025年春青岛职业技术学院
- 四年级数学思维训练社团活动(素质拓展)电子教案
- 金属切削过程中的变形 revised课件
- 蒙古族文化课件
- 简明烧伤健康量表
- 传染病布氏菌病 课件
- 商业广告设计课件
- 教会行政管理学课程教案
- SJG 44-2018 深圳市公共建筑节能设计规范-高清现行
- 2022年高考(全国甲卷)语文仿真模拟卷【含答案】
- _重大事故后果分析(精)
- 水泥搅拌桩施工监理质量控制要点
评论
0/150
提交评论