[计算机软件及应用]循环结构程序设计ppt课件_第1页
[计算机软件及应用]循环结构程序设计ppt课件_第2页
[计算机软件及应用]循环结构程序设计ppt课件_第3页
[计算机软件及应用]循环结构程序设计ppt课件_第4页
[计算机软件及应用]循环结构程序设计ppt课件_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、5.1 程序中需求用循环构造程序中需求用循环构造5.2 用用while语句和语句和dowhile语句实现循环语句实现循环5.3 用用for语句实现循环语句实现循环5.4 循环的嵌套循环的嵌套5.5 提早终了循环提早终了循环5.6 几种循环的比较几种循环的比较5.7 程序举例程序举例5.8 提高部分提高部分P1155.1 程序中需求用循环构造程序中需求用循环构造现实生活中许多问题是需求反复处置计算一个班50学生每人的平均成果工厂各车间的消费日报表全国各省市的人口统计分析各大学招生情况统计全校教职工工资报表P1155.1 程序中需求用循环构造程序中需求用循环构造绝大多数的运用程序都包含反复处置循环

2、构造又称为反复构造循环构造和顺序构造、选择构造是构造化程序设计的三种根本构造,它们是各种复杂程序的根本构造单元P1155.1 程序中需求用循环构造程序中需求用循环构造要构成一个有效的循环,该当指定两个条件:(1)需求反复执行的操作,这称为循环体(2)循环终了的条件,即在什么情况下停顿反复的操作P1155.2.1 用while语句实现循环5.2.2 用dowhile语句实现循环P1155.2.1 用用while语句实现循环语句实现循环P115例例5.1求求1+2+3+100,即,即解题思绪:解题思绪:这是累加问题,需求先后将这是累加问题,需求先后将100个数相加个数相加要反复要反复100次加法运

3、算,可用循环实现次加法运算,可用循环实现后一个数是前一个数加后一个数是前一个数加1而得而得加完上一个数加完上一个数i后,使后,使i加加1可得到下一个数可得到下一个数1001nn5.2.1 用用while语句实现循环语句实现循环P115sum=sum+ii=i+1非非0真真i1000假假i=1#include void main() int i,sum=0; i=1; while (i=100) sum=sum+i; i+; printf(%dn,sum); 复合语句复合语句能改为能改为i100? while语句的普通方式如下:语句的普通方式如下: while (表达式表达式) 语句语句循环体循

4、环体 while语句的普通方式如下:语句的普通方式如下: while (表达式表达式) 语句语句“真时执行循环体语句真时执行循环体语句“假时不执行假时不执行循环条件表达式循环条件表达式while循环的特点是:循环的特点是:先判别条件表达式先判别条件表达式后执行循环体语句后执行循环体语句语句语句非非0(真真)表达式表达式0(假假)P117do-while语句的特点:先无条件地执语句的特点:先无条件地执行循环体,然后判别循环条件能否成立行循环体,然后判别循环条件能否成立普通方式为:普通方式为: do 循环体语句循环体语句 while (表达式表达式);表达式表达式非非0(真真)0(假假)循环体语句

5、循环体语句当表达式的值为真当表达式的值为真循环体语句循环体语句P117 例例5.2 用用dowhile循环求:循环求: 1+2+3+100,即,即1001nnP117解题思绪:解题思绪:i 100非非0(真真)0(假假)sum=sum+ii=i+1sum=0i=1 sum=0; i=1; do sum=sum+i; i+; while(i=100); i 100sum=sum+ii=i+1sum=0,i=1#include void main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(“%dn,sum);5050例例5

6、.3 募集慈悲基金募集慈悲基金10000元,有假设元,有假设干人捐款,每输入一个人的捐款数后,计干人捐款,每输入一个人的捐款数后,计算机就输出当时的捐款总和。当某一次输算机就输出当时的捐款总和。当某一次输入捐款数后,总和到达或超越入捐款数后,总和到达或超越10000元元时,即宣告终了,输出最后的累加值。时,即宣告终了,输出最后的累加值。解题思绪:解题思绪:设计一个循环构造,在其中输入捐款设计一个循环构造,在其中输入捐款数,求出累加值,然后检查此时的累加数,求出累加值,然后检查此时的累加值能否到达或超越预定值,假设到达了,值能否到达或超越预定值,假设到达了,就终了循环操作就终了循环操作#incl

7、ude void main() float amount,sum=0; do scanf(%f,&amount); sum=sum+amount; while(sum10000); printf(sum=%9.2fn,sum);循环执行的条件循环执行的条件1000 1850 1500 2600 2500 1200 sum= 10650.005.3 用用for语句实现循环语句实现循环P1195.3.1 for语句的普通方式和执行过程语句的普通方式和执行过程5.3.2 for循环程序举例循环程序举例for语句不仅可以用于循环次数曾经确语句不仅可以用于循环次数曾经确定的情况,还可以用于循环次

8、数不确定定的情况,还可以用于循环次数不确定而只给出循环终了条件的情况而只给出循环终了条件的情况for语句完全可以替代语句完全可以替代while语句语句5.3.1 for语句的普通方式和语句的普通方式和执行过程执行过程P120for语句的普通方式为语句的普通方式为 for(表达式表达式1;表达式;表达式2;表达式;表达式3) 语句语句设置初始条件,只执行一设置初始条件,只执行一次。可以为零个、一个或次。可以为零个、一个或多个变量设置初值执行多个变量设置初值执行5.3.1 for语句的普通方式和语句的普通方式和执行过程执行过程P120for语句的普通方式为语句的普通方式为 for(表达式表达式1;

9、表达式;表达式2;表达式;表达式3) 语句语句循环条件表达式,用来断定能否继续循环条件表达式,用来断定能否继续循环。在每次执行循环体前先执行此循环。在每次执行循环体前先执行此表达式,决议能否继续执行循环表达式,决议能否继续执行循环5.3.1 for语句的普通方式和语句的普通方式和执行过程执行过程P120for语句的普通方式为语句的普通方式为 for(表达式表达式1;表达式;表达式2;表达式;表达式3) 语句语句作为循环的调整器,例如作为循环的调整器,例如使循环变量增值,它是在使循环变量增值,它是在执行完循环体后才进展的执行完循环体后才进展的for语句的执行过程:语句的执行过程:(1) 先求解表

10、达式先求解表达式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+;用

11、用for语句更简单、方便语句更简单、方便5.3.2 for循环程序举例循环程序举例例5.4 在象棋的棋盘第1个格子中放1粒麦子,第2个格子中放2粒麦子,第3个格子中放4粒麦子,以后按此比例每一格加一倍,不断放到第64格(象棋的棋盘是88=64格),共放多少?P120麦子总粒数麦子总粒数=1+2+22+23+2631m3=1.42108粒粒#include void main() double p=1, t=1, v; int i; for(i=1; i64; i+) p = p * 2; t = t + p; v = t / 1.42e8; printf(“total=%en,t); prin

12、tf(“volume=%en,v); p是当前一个格子中麦子粒数是当前一个格子中麦子粒数t是当前麦子总粒数是当前麦子总粒数v是总体积是总体积total=1.844674e+019volnme=1.299066e+011#include void main() double p=1, t=1, v; int i; 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+会怎样?会怎样?#include void main(

13、) double p=1, t=1, v; int i; 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+会怎样?会怎样? 例例5.5 人口增长预测。据人口增长预测。据2005年末统计年末统计,我国人口为,我国人口为130756万人,假设人口的万人,假设人口的年增长率为年增长率为1%,请计算到哪一年中国总,请计算到哪一年中国总人口超越人口超越15亿。亿。解题思绪:解题思绪:假设原来人口为假设原来人口为p0 ,那么一

14、年后的人口为:,那么一年后的人口为:p=p0*(1+r) ,r是年增长率是年增长率每算出一年的人口后就检查能否到达或超每算出一年的人口后就检查能否到达或超越越15亿。假设未到达或超越,再计算下一年亿。假设未到达或超越,再计算下一年的人口,直到某一年的人口到达或超越的人口,直到某一年的人口到达或超越15亿亿为止为止#include void main() double p=1.30756e9,r=0.01; int y; for(y=2006; p1.5e9; y+) p=p*(1+r); printf(year=%d,p=%en,y-1,p);原来的值原来的值1年后的值年后的值year=201

15、9,p=1.503007e+009留意不是留意不是y2019年到达年到达15.03007亿人口亿人口#include void main() double p=1.30756e9,r=0.01; int y; for(y=2006; p1.5e9; y+) p=p*(1+r); printf(year=%d,p=%en,y-1,p);计算计算1000年后的人口年后的人口y=3006y=3006,p=2.767941e+0133006年到达年到达276794亿人口亿人口#include void main() double p=1.30756e9,r=0.01; int y; for(y=200

16、6; p1.5e9; y+) p=p*(1+r); printf(year=%d,p=%en,y-1,p);迭代公式迭代公式5.4 循环的嵌套循环的嵌套P124一个循环体内又包含另一个完好的循环一个循环体内又包含另一个完好的循环构造,称为循环的嵌套构造,称为循环的嵌套内嵌的循环中还可以嵌套循环,这就是内嵌的循环中还可以嵌套循环,这就是多层循环多层循环3种循环种循环(while循环、循环、dowhile循环和循环和for循环循环)可以相互嵌套可以相互嵌套5.5 提早终了循环提早终了循环5.5.1 用break语句提早退出循环5.5.2 用continue语句提早终了本次循环P1245.5.1 用

17、用break语句提早退出循环语句提早退出循环在执行循环语句时,在正常情况下只需满足给定的循环条件,就该当一次一次地执行循环体,直到不满足给定的循环条件为止。但是有些情况下,需求提早终了循环。P124 例5.6 统计各班级学生的平均成果。知各班人数不等,但都不超越30人。编一个程序能处置人数不等的各班学生的平均成果。解题思绪:解题思绪:输入的成果是负数时,表示本班数据已输入的成果是负数时,表示本班数据已终了终了接纳到一个负的分数时就提早终了循环接纳到一个负的分数时就提早终了循环用用break语句实现提早终了循环语句实现提早终了循环#include void main() float score,

18、sum=0,ave; int i,n; for(i=1; i31; i+) scanf(“%f,&score); if(score0) break; sum=sum+score; n=i-1; ave=sum/n; printf(“n=%d,ave=%7.2fn,n,ave); 负值,跳出循环负值,跳出循环非负,累加非负,累加100 80 70 -1 n=3,ave= 90.00break语句的普通方式为:语句的普通方式为: break; 只能用于循环语句和只能用于循环语句和switch语句之中,而不能单独运用语句之中,而不能单独运用5.5.2 用用continue语句提早终了语句提早

19、终了本次循环本次循环 continue语句的普通方式为: continue; 其作用为终了本次循环,即跳过循环体中下面尚未执行的语句,接着进展下一次能否执行循环的判别。P1265.5.2 用用continue语句提早终了语句提早终了本次循环本次循环continue语句和break语句的区别:continue语句只终了本次循环,而不是终止整个循环的执行break语句终了整个循环过程,不再判别执行循环的条件能否成立 P126假假表达式表达式1真真表达式表达式2假假真真break语句语句强行退出循环强行退出循环while(表达式表达式1) if(表达式表达式2) break; 假假表达式表达式1真真

20、表达式表达式2假假真真continue语句语句只终了本次循环只终了本次循环while(表达式表达式1) if(表达式表达式2) continue; 假假表达式表达式1真真表达式表达式2假假真真continue语句语句只终了本次循环只终了本次循环假假表达式表达式1真真表达式表达式2假假真真break语句语句强行退出循环强行退出循环 例例5.7 输入一个班全体学生的成果,把不输入一个班全体学生的成果,把不及格的学生成果输出,并求及格学生的平及格的学生成果输出,并求及格学生的平均成果。均成果。解题思绪:解题思绪:在进展循环中,检查学生的成果,把其中在进展循环中,检查学生的成果,把其中不及格的成果输出

21、,然后跳过后面总成果的不及格的成果输出,然后跳过后面总成果的累加和求平均成果的语句累加和求平均成果的语句用用continu语句处置语句处置#include void main()float score,sum=0,ave; int i,n=0; for(i=1; i6; i+) printf(“score:); scanf(“%f,&score); if(score60) printf(“Fail:%7.2fn,score); continue; sum=sum+score; n=n+1; ave=sum/n; printf(“n=%d,ave=%7.2fn,n,ave);不及格不及格

22、输出成果输出成果跳过下面语句跳过下面语句score:89 score:56 Fail:56score:76 score:58 Fail:58score:98 n=3 ave=87.675.6 几种循环的比较几种循环的比较P128(1)普通情况下,普通情况下,3种循环可以相互替代种循环可以相互替代(2) 在在while和和do-while循环中,循环体循环中,循环体应包含使循环趋于终了的语句。应包含使循环趋于终了的语句。(3) 用用while和和do-while循环时,循环变循环时,循环变量初始化的操作应在量初始化的操作应在while和和do-while语句之前完成。而语句之前完成。而for语句

23、可以在表达式语句可以在表达式1中实现循环变量的初始化。中实现循环变量的初始化。5.7 程序举例程序举例P128 例例5.8 有一对兔子,出生后第有一对兔子,出生后第3个月起每个个月起每个月都生一对兔子。小兔子长到第月都生一对兔子。小兔子长到第3个月后个月后每个月又生一对兔子。假设一切兔子都不每个月又生一对兔子。假设一切兔子都不死,问死,问40个月的兔子总数为多少?个月的兔子总数为多少?解题思绪:这是一个有趣的古典数学问题解题思绪:这是一个有趣的古典数学问题。可以从下表看出兔子繁衍的规律。可以从下表看出兔子繁衍的规律。第几个第几个月月小兔子小兔子对数对数中兔子中兔子对数对数老兔子老兔子对数对数兔

24、子总兔子总数数1 11 10 00 01 12 20 01 10 01 13 31 10 01 12 24 41 11 11 13 35 52 21 12 25 56 63 32 23 38 87 75 53 35 51313每个月的兔子总数依次为每个月的兔子总数依次为1,1,2,3,5,8,13是费波那西是费波那西(Fibonacci)数列数列特点:第特点:第1、2两个数为两个数为1、1 从第从第3个数开场,该数是其前面两个数之和个数开场,该数是其前面两个数之和解题思绪:这是一个有趣的古典数学问题解题思绪:这是一个有趣的古典数学问题。可以从下表看出兔子繁衍的规律。可以从下表看出兔子繁衍的规律

25、。每个月的兔子总数依次为每个月的兔子总数依次为1,1,2,3,5,8,13是费波那西是费波那西(Fibonacci)数列数列特点:第特点:第1、2两个数为两个数为1、1 从第从第3个数开场,该数是其前面两个数之和个数开场,该数是其前面两个数之和) 3()2(1) 1(12121nFFFnFnFnnnf1=f1+f2f2=f2+f1for i=1 to 20f1=1,f2=1输出输出f1,f2#include void main() long int f1,f2; int i; f1=1;f2=1; for(i=1; i输出是素数输出是素数真真输出不是素数输出不是素数假假mm#include #

26、include void main()int m,i,k; printf(“number:); scanf(“%d,&m); k=(int)sqrt(m); for (i=2;ik) printf(%d primen,m); else printf(%d not primen,m);number: 17 17 prime 例例5.10 译密码。为使电文严密,往往按译密码。为使电文严密,往往按一定规律将其转换成密码,收报人再按商一定规律将其转换成密码,收报人再按商定的规律将其译回原文。定的规律将其译回原文。A B C D E F G W X Y Z非字母字符坚持原状不变非字母字符坚持原状

27、不变输入一行字符,要求输出其相应的密码输入一行字符,要求输出其相应的密码解题思绪:解题思绪:(1) 从字母从字母A到到V,只需将字母加上,只需将字母加上4就行就行 例如,例如,A+4就是就是E(2) 从字母从字母W到到Z,将字母加,将字母加4,再减去,再减去26 W+4-26就是就是A解题思绪:解题思绪:输入一个字符给字符变量输入一个字符给字符变量c断定它能否字母断定它能否字母(包括大小写包括大小写),假设不是字,假设不是字母,不改动母,不改动c的值;假设是字母,那么使变量的值;假设是字母,那么使变量c的值改动为其后第的值改动为其后第4个字母个字母假设新的假设新的c值范围不在字母范围内,应减去

28、值范围不在字母范围内,应减去26#include void main() char c; while(c=getchar()!=n) if(c=a & c=A & cZ & cz) c=c-26; printf(%c,c); China! Glmre!5.8 提高部分提高部分5.8.1 while和dowhile循环的比较5.8.2 for语句的各种方式P132凡是能用while循环处置的情况,都能用dowhile循环处置dowhile循环构造可以转换成while循环构造P132P132表达式表达式非非0(真真)0(假假)循环体语句循环体语句表达式表达式非非0(真真)0

29、(假假)语句语句语句语句do while语句语句while语句语句例5.11 while和dowhile循环的比较以下两个程序,循环体是一样的程序(1)用while循环程序(2)用do-while循环运转时,在有的情况下结果一样,而另一些情况下结果不同,请仔细分析。P132程序程序(1)#include void main ( )int s=0,i; scanf(“%d,&i); while (i=10) s=s+i; i+; printf(“s=%d,s);程序程序(2)#include void main( )int s=0,i; scanf(“%d,&i); do s=s+i; i+; while (i=10); printf(“s=%d,s);1 s=55 再运转一次:再运转一次: 11 s=01 s=55 再运转一次:再运转一次: 11 s=11当当while后面的表达式的第一次的值为后面的表达式的第一次的值为“真时,两种循环得到的结果一样;真时,两种循环得到的结果一样;否那么,二者结果不一样否那么,二者结果不一样(一样循环体一样循环体时时)5.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论