




已阅读5页,还剩69页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章循环结构程序设计,6.1程序中需要用循环结构6.2用while语句和dowhile语句实现循环6.3用for语句实现循环6.4循环的嵌套6.5几种循环的比较6.6提前结束循环6.7程序举例,6.1程序中需要用循环结构,现实生活中许多问题是需要重复处理计算一个班50学生每人的平均成绩工厂各车间的生产日报表全国各省市的人口统计分析各大学招生情况统计全校教职工工资报表,6.1程序中需要用循环结构,绝大多数的应用程序都包含重复处理循环结构又称为重复结构循环结构和顺序结构、选择结构是结构化程序设计的三种基本结构,它们是各种复杂程序的基本构造单元,6.1程序中需要用循环结构,要构成一个有效的循环,应当指定两个条件:(1)需要重复执行的操作,这称为循环体(2)循环结束的条件,即在什么情况下停止重复的操作,6.2用while语句和dowhile语句实现循环,6.2.1用while语句实现循环6.2.2用dowhile语句实现循环6.2.3while和dowhile循环的比较,while语句的一般形式如下:while(表达式)语句,循环体,6.2.1用while语句实现循环,while语句的一般形式如下:while(表达式)语句,“真”时执行循环体语句“假”时不执行,循环条件表达式,while循环的特点是:先判断条件表达式后执行循环体语句,6.2.1用while语句实现循环,6.2.1用while语句实现循环,例求1+2+3+100,即解题思路:这是累加问题,需要先后将100个数相加要重复100次加法运算,可用循环实现后一个数是前一个数加1而得加完上一个数i后,使i加1可得到下一个数,6.2.1用while语句实现循环,sum=sum+ii=i+1,非0(真),0(假),i=1,#includevoidmain()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%dn,sum);,复合语句,能改为i100?,6.2.2用dowhile语句实现循环,do-while语句的特点:先无条件地执行循环体,然后判断循环条件是否成立一般形式为:do循环体语句while(表达式);,表达式,非0(真),0(假),循环体语句,6.2.2用dowhile语句实现循环,例用dowhile循环求:1+2+3+100,即,6.2.2用dowhile语句实现循环,解题思路:,i100,非0(真),0(假),sum=sum+ii=i+1,sum=0i=1,sum=0;i=1;dosum=sum+i;i+;while(i=100);,#includevoidmain()inti,sum=0;i=1;dosum=sum+i;i+;while(i=100);printf(“%dn”,sum);,5050,例募集慈善基金10000元,有若干人捐款,每输入一个人的捐款数后,计算机就计算当时的捐款总和。当某一次输入捐款数后,总和达到或超过10000元时,即宣告结束,输出最后的累加值。,解题思路:设计一个循环结构,在其中输入捐款数,求出累加值,然后检查此时的累加值是否达到或超过预定值,如果达到了,就结束循环操作,#includevoidmain()floatamount,sum=0;doscanf(%f,循环执行的条件,100018501500260025001200sum=10650.00,6.2.3while和dowhile循环的比较,凡是能用while循环处理的情况,都能用dowhile循环处理dowhile循环结构可以转换成while循环结构,6.2.3while和dowhile循环的比较,表达式,非0(真),0(假),循环体语句,表达式,非0(真),0(假),语句,语句,dowhile语句,while语句,6.2.3while和dowhile循环的比较,例6.11while和dowhile循环的比较以下两个程序,循环体是相同的程序(1)用while循环程序(2)用do-while循环运行时,在有的情况下结果相同,而另一些情况下结果不同,请仔细分析。,程序(1)#includevoidmain()ints=0,i;scanf(“%d”,程序(2)#includevoidmain()ints=0,i;scanf(“%d”,1s=55再运行一次:11s=0,1s=55再运行一次:11s=11,当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则,二者结果不相同(相同循环体时),6.3用for语句实现循环,6.3.1for语句的一般形式和执行过程6.3.2for语句的各种形式6.3.3for循环程序举例,for语句不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况for语句完全可以代替while语句,6.3.1for语句的一般形式和执行过程,for语句的一般形式为for(表达式1;表达式2;表达式3)语句,设置初始条件,只执行一次。可以为零个、一个或多个变量设置初值执行,6.3.1for语句的一般形式和执行过程,for语句的一般形式为for(表达式1;表达式2;表达式3)语句,循环条件表达式,用来判定是否继续循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环,6.3.1for语句的一般形式和执行过程,for语句的一般形式为for(表达式1;表达式2;表达式3)语句,作为循环的调整器,例如使循环变量增值,它是在执行完循环体后才进行的,for语句的执行过程:(1)先求解表达式1(2)求解表达式2,若其值为真,执行循环体,然后执行下面第(3)步。若为假,则结束循环,转到第(5)步(3)求解表达式3(4)转回上面步骤(2)继续执行(5)循环结束,执行for语句下面的一个语句,表达式2,非0(真),0(假),求解表达式3,求解表达式1,语句,for(i=1;i=100;i+)sum=sum+i;等价于i=1;while(i=100)sum=sum+i;i+;,用for语句更简单、方便,6.3.2for语句的各种形式,在实际编程中,for语句相当灵活,形式变化多样。前面介绍过for语句的一般形式为for(表达式1;表达式2;表达式3)语句,for(表达式1;表达式2;表达式3)语句,表达式1;for(;表达式2;表达式3)语句,for(表达式1;表达式3)if(表达式2)语句,for(表达式1;表达式2;)语句表达式3;,for(表达式1;表达式2;表达式3)语句,表达式1;for(;表达式2;)语句表达式3;,表达式1;for(;)if(表达式2)语句表达式3;,for(表达式1;表达式2;表达式3)语句,可以是设置循环变量初值的赋值表达式也可以是与循环变量无关的其他表达式,for(表达式1;表达式2;表达式3)语句,可以是与循环控制无关的任意表达式,for(表达式1;表达式2;表达式3)语句,可以是一个简单的表达式也可以是逗号表达式,for(表达式1;表达式2;表达式3)语句,一般是关系表达式或逻辑表达式也可以是数值表达式或字符表达式只要其值为非0,就执行循环体,for(i=0;(c=getchar()!=n;i+=c);,作用:不断输入字符,将它们的ASCII码相加,直到输入一个“换行”符为止,for(表达式1;表达式2;表达式3)语句,一般是关系表达式或逻辑表达式也可以是数值表达式或字符表达式只要其值为非0,就执行循环体,for(;(c=getchar()!=n;)printf(%c,c);,作用:每读入一个字符后立即输出该字符,直到输入一个“换行”为止,6.3.3for循环程序举例,例:在象棋的棋盘第1个格子中放1粒麦子,第2个格子中放2粒麦子,第3个格子中放4粒麦子,以后按此比例每一格加一倍,一直放到第64格(象棋的棋盘是88=64格),共放多少?体积是多少?,麦子总粒数=1+2+22+23+2631m3=1.42108粒,#includevoidmain()doublep=1,t=1,v;inti;for(i=1;i64;i+)p=p*2;t=t+p;v=t/1.42e8;printf(“total=%en”,t);printf(“volume=%en”,v);,p是当前一个格子中麦子粒数,t是当前麦子总粒数,v是总体积,total=1.844674e+019volnme=1.299066e+011,#includevoidmain()doublep=1,t=1,v;inti;for(i=1;i64;i+)p=p*2;t=t+p;v=t/1.42e8;printf(“total=%en”,t);printf(“volume=%en”,v);,改为i=1;i=64;i+会怎样?,#includevoidmain()doublep=1,t=1,v;inti;for(i=1;i64;i+)p=p*2;t=t+p;v=t/1.42e8;printf(“total=%en”,t);printf(“volume=%en”,v);,改为i=0;i64;i+会怎样?,例:人口增长预测。据2005年末统计,我国人口为130756万人,如果人口的年增长率为1%,请计算到哪一年中国总人口超过15亿。,解题思路:假设原来人口为p0,则一年后的人口为:p=p0*(1+r),r是年增长率每算出一年的人口后就检查是否达到或超过15亿。如果未达到或超过,再计算下一年的人口,直到某一年的人口达到或超过15亿为止,#includevoidmain()doublep=1.30756e9,r=0.01;inty;for(y=2006;p1.5e9;y+)p=p*(1+r);printf(year=%d,p=%en,y-1,p);,原来的值,1年后的值,year=2019,p=1.503007e+009,注意不是y,2019年达到15.03007亿人口,#includevoidmain()doublep=1.30756e9,r=0.01;inty;for(y=2006;p1.5e9;y+)p=p*(1+r);printf(year=%d,p=%en,y-1,p);,计算1000年后的人口,y=3006,y=3006,p=2.767941e+013,3006年达到276794亿人口,6.4循环的嵌套,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套内嵌的循环中还可以嵌套循环,这就是多层循环3种循环(while循环、dowhile循环和for循环)可以互相嵌套,6.5几种循环的比较,(1)一般情况下,3种循环可以互相代替(2)在while和do-while循环中,循环体应包含使循环趋于结束的语句。(3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。,6.6提前结束循环,6.6.1用break语句提前退出循环6.6.2用continue语句提前结束本次循环,6.6.1用break语句提前退出循环,在执行循环语句时,在正常情况下只要满足给定的循环条件,就应当一次一次地执行循环体,直到不满足给定的循环条件为止。但是有些情况下,需要提前结束循环。,例6.6统计各班级学生的平均成绩。已知各班人数不等,但都不超过30人。编一个程序能处理人数不等的各班学生的平均成绩。,解题思路:输入的成绩是负数时,表示本班数据已结束接收到一个负的分数时就提前结束循环用break语句实现提前结束循环,#includevoidmain()floatscore,sum=0,ave;inti,n;for(i=1;i31;i+)scanf(“%f”,负值,跳出循环,非负,累加,1008070-1n=3,ave=90.00,break语句的一般形式为:break;,只能用于循环语句和switch语句之中,而不能单独使用,6.6.2用continue语句提前结束本次循环,continue语句的一般形式为:continue;其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判断。,6.6.2用continue语句提前结束本次循环,continue语句和break语句的区别:continue语句只结束本次循环,而不是终止整个循环的执行break语句结束整个循环过程,不再判断执行循环的条件是否成立,break语句,强行退出循环,while(表达式1)if(表达式2)break;,continue语句,只结束本次循环,while(表达式1)if(表达式2)continue;,continue语句,只结束本次循环,break语句,强行退出循环,例输入一个班全体学生的成绩,把不及格的学生成绩输出,并求及格学生的平均成绩。,解题思路:在进行循环中,检查学生的成绩,把其中不及格的成绩输出,然后跳过后面总成绩的累加和求平均成绩的语句用continue语句处理,#includevoidmain()floatscore,sum=0,ave;inti,n=0;for(i=1;i=a,China!Glmre!,exp:输出10100之间的全部素数。所谓素数n是指,除1和n之外,不能被2(n-1)之间的任何整数整除。算法设计要点:(1)显然,只要设计出判断某数n是否是素数的算法,外面再套一个for循环即可。(2)判断某数n是否是素数的算法:根据素数的定义,用2(n-1)之间的每一个数去整除n,如果都不能被整除,则表示该数是一个素数。判断一个数是否能被另一个数整除,可通过判断它们整除的余数是否为0来实现。参考源程序如下:main()inti=11,j,counter=0;for(;i=1e-6)pi=pi+t;n+=2;s=-s;t=s/n;pi=pi*4;printf(“pi=%10.6fn”,pi);,例:打印所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。main()inti;for(i=100;i1000;i+)intx,y,z;x=i/100;y=(i-x*100)/10;z=(i-x*100-y*10)/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业行业高级人才面试题库
- 初二数学下册各章思维导图
- 高级人才招聘:会员制面试题目及答案衍生职业岗位选择技巧
- 细胞染色原理
- 药品不良反应复核管理体系建设
- 汽轮发动机讲解课件
- 微纳米技术制造
- 人体巨噬细胞
- 选举人团制度解析
- 五老活动实施方案
- 围手术期的ERAS营养护理管理
- 高处作业非标吊篮专项施工方案
- 2024至2030年中国品牌战略咨询服务市场现状研究分析与发展前景预测报告
- 2022版新《物理》义务教育课程标准教师培训测试题附答案
- 辽宁省丹东市2023-2024学年八年级下学期期末数学试卷(含答案)
- TSG+11-2020锅炉安全技术规程
- 从高考改卷谈对物理教学的几点启示
- DB32-T 4757-2024 连栋塑料薄膜温室建造技术规范
- 个人征信查询授权书范本
- 2024新版实习律师协议
- 县乡教师选调进城考试《教育心理学》题库含完整答案【全优】
评论
0/150
提交评论