《计算机软件及应用循环结构程序设计资料讲解.ppt》由会员分享,可在线阅读,更多相关《计算机软件及应用循环结构程序设计资料讲解.ppt(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机软件及应用循环结构程序设计5.15.1程序中需要用循环结构程序中需要用循环结构程序中需要用循环结构程序中需要用循环结构绝大多数的应用程序都包含重复处理绝大多数的应用程序都包含重复处理循环结构又称为重复结构循环结构又称为重复结构循环结构和顺序结构、选择结构是结构循环结构和顺序结构、选择结构是结构化程序设计的化程序设计的三种基本结构三种基本结构,它们是,它们是各种复杂程序的基本构造单元各种复杂程序的基本构造单元P1155.15.1程序中需要用循环结构程序中需要用循环结构程序中需要用循环结构程序中需要用循环结构要构成一个有效的循环,应当指定两个要构成一个有效的循环,应当指定两个条件:条件:(1
2、)需要重复执行的操作,这称为循环体需要重复执行的操作,这称为循环体(2)循环结束的条件,即在什么情况下停止循环结束的条件,即在什么情况下停止重复的操作重复的操作P1155.25.2用用用用whilewhile语句和语句和语句和语句和dodowhilewhile语句实现循环语句实现循环语句实现循环语句实现循环5.2.1用用while语句实现循环语句实现循环5.2.2用用dowhile语句实现循环语句实现循环P1155.2.15.2.1用用用用whilewhile语句实现循环语句实现循环语句实现循环语句实现循环P115例例5.1求求1+2+3+100,即,即解题思路:解题思路:u这是累加问题,需要
3、先后将这是累加问题,需要先后将100个数相加个数相加u要重复要重复100次加法运算,可用循环实现次加法运算,可用循环实现u后一个数是前一个数加后一个数是前一个数加1而得而得u加完上一个数加完上一个数i后,使后,使i加加1可得到下一个数可得到下一个数5.2.15.2.1用用用用whilewhile语句实现循环语句实现循环语句实现循环语句实现循环P115sum=sum+ii=i+1非非0(真)(真)i 1000(假)(假)i=1#includevoidmain()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%dn,sum);复合语句复合语句能改为能
4、改为i100?while语句的一般形式如下:语句的一般形式如下:while(表达式表达式)语句语句循环体循环体while语句的一般形式如下:语句的一般形式如下:while(表达式表达式)语句语句“真真”时时执行循环体语句执行循环体语句“假假”时不执行时不执行循环条件表达式循环条件表达式while循环的特点是:循环的特点是:先判断条件表达式先判断条件表达式后执行循环体语句后执行循环体语句语句语句非非0(真真)表达式表达式0(假假)5.2.25.2.2用用用用dodowhilewhile语句实现循环语句实现循环语句实现循环语句实现循环P117do-while语句的特点:先无条件地执行语句的特点:先
5、无条件地执行循环体,然后判断循环条件是否成立循环体,然后判断循环条件是否成立一般形式为:一般形式为:do循环体循环体语句语句while(表达式表达式);表达式表达式非非0(真真)0(假假)循环体语句循环体语句当表达式的值为真当表达式的值为真循环体语句循环体语句5.2.25.2.2用用用用dodowhilewhile语句实现循环语句实现循环语句实现循环语句实现循环P117例例5.2用用dowhile循环循环求求:1+2+3+100,即,即5.2.25.2.2用用用用dodowhilewhile语句实现循环语句实现循环语句实现循环语句实现循环P117解题思路:解题思路:i100非非0(真真)0(假
6、假)sum=sum+ii=i+1sum=0i=1sum=0;i=1;dosum=sum+i;i+;while(i=100);i100sum=sum+ii=i+1sum=0,i=1#includevoidmain()inti,sum=0;i=1;dosum=sum+i;i+;while(i=100);printf(“%dn”,sum);5050例例5.3募集慈善基金募集慈善基金10000元,有若干元,有若干人捐款,每输入一个人的捐款数后,计算人捐款,每输入一个人的捐款数后,计算机就输出当时的捐款总和。当某一次输入机就输出当时的捐款总和。当某一次输入捐款数后,总和达到或超过捐款数后,总和达到或超过
7、10000元时,元时,即宣告结束,输出最后的累加值。即宣告结束,输出最后的累加值。解题思路:解题思路:u设计一个循环结构,在其中输入捐款数,设计一个循环结构,在其中输入捐款数,求出累加值,然后检查此时的累加值是否求出累加值,然后检查此时的累加值是否达到或超过预定值,如果达到了,就结束达到或超过预定值,如果达到了,就结束循环操作循环操作#includevoidmain()floatamount,sum=0;doscanf(%f,&amount);sum=sum+amount;while(sum10000);printf(sum=%9.2fn,sum);循环循环执行的条件执行的条件1000 185
8、0 1500 2600 2500 1200 sum=10650.005.35.3用用用用forfor语句实现循环语句实现循环语句实现循环语句实现循环P1195.3.1for语句的一般形式和执行过程语句的一般形式和执行过程5.3.2for循环程序举例循环程序举例for语句不仅可以用于循环次数已经确语句不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况而只给出循环结束条件的情况for语句完全可以代替语句完全可以代替while语句语句5.3.1for5.3.1for语句的一般形式和语句的一般形式和语句的一般形式和语句的一般形式和执
9、行过程执行过程执行过程执行过程P120for语句的一般形式为语句的一般形式为for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句设置初始条件,只执行一设置初始条件,只执行一次。可以为零个、一个或次。可以为零个、一个或多个变量设置初值多个变量设置初值执行执行5.3.1for5.3.1for语句的一般形式和语句的一般形式和语句的一般形式和语句的一般形式和执行过程执行过程执行过程执行过程P120for语句的一般形式为语句的一般形式为for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句循环条件表达式,用来判定是否继续循环条件表达式,用来判定是否继续循环。在每次执行循环体
10、前先执行此循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环表达式,决定是否继续执行循环5.3.1for5.3.1for语句的一般形式和语句的一般形式和语句的一般形式和语句的一般形式和执行过程执行过程执行过程执行过程P120for语句的一般形式为语句的一般形式为for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句作为循环的调整器,例如作为循环的调整器,例如使循环变量增值,它是在使循环变量增值,它是在执行完循环体后才进行的执行完循环体后才进行的for语句的执行过程语句的执行过程:(1)先求解表达式先求解表达式1(2)求解表达式求解表达式2,若,若其其值为真,执行循环体,
11、值为真,执行循环体,然后执行下面第然后执行下面第(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语句语句更更简单、方便简单、方便5.3.2for5.3.2for循环程序举例循环程序举例循环程序
12、举例循环程序举例例例5.4在象棋的棋盘第在象棋的棋盘第1个格子中放个格子中放1粒粒麦子,第麦子,第2个格子中放个格子中放2粒麦子,第粒麦子,第3个个格子中放格子中放4粒麦子,以后按此比例每一粒麦子,以后按此比例每一格加一倍,一直放到第格加一倍,一直放到第64格格(象棋的棋象棋的棋盘是盘是88=64格格),共放多少?共放多少?P120麦子总粒数麦子总粒数=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”,
13、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;
14、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亿。亿。解题思路:解题思路:u假设原来人口为假设原来人口为p0,则一年后的人口,则一年后的人口为为:p=p0*(1+r),r是年增长率是年增长率u每算出一年的人口后就检
15、查是否每算出一年的人口后就检查是否达到或超过达到或超过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注意不是注意不是y2019年达到年达到15.03007亿人口亿人口#includevoidma
16、in()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=3006y=3006,p=2.767941e+0133006年达到年达到276794亿人口亿人口#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);迭代公式迭代公式5.45.4循环的嵌套循环的嵌套循环的嵌套循环的
17、嵌套P124一个循环体内又包含另一个完整的循环一个循环体内又包含另一个完整的循环结构,称为结构,称为循环的嵌套循环的嵌套内嵌的循环中还可以嵌套循环,这就是内嵌的循环中还可以嵌套循环,这就是多层循环多层循环3种循环种循环(while循环、循环、dowhile循环和循环和for循环循环)可以互相嵌套可以互相嵌套5.55.5提前结束循环提前结束循环提前结束循环提前结束循环5.5.1用用break语句提前退出循环语句提前退出循环5.5.2用用continue语句提前结束本次循环语句提前结束本次循环P1245.5.15.5.1用用用用breakbreak语句提前退出循环语句提前退出循环语句提前退出循环语
18、句提前退出循环在执行循环语句时,在正常情况下只要在执行循环语句时,在正常情况下只要满足给定的循环条件,就应当一次一次满足给定的循环条件,就应当一次一次地执行循环体,直到不满足给定的循环地执行循环体,直到不满足给定的循环条件为止。但是有些情况下,需要提前条件为止。但是有些情况下,需要提前结束循环。结束循环。P124例例5.6统计各班级学生的平均成绩。已统计各班级学生的平均成绩。已知各班人数不等,但都不超过知各班人数不等,但都不超过30人。编人。编一个程序能处理人数不等的各班学生的一个程序能处理人数不等的各班学生的平均成绩。平均成绩。解题思路:解题思路:u输入的成绩是负数时,表示本班数据已结束输入
19、的成绩是负数时,表示本班数据已结束u接收到一个负的分数时就提前结束循环接收到一个负的分数时就提前结束循环u用用break语句实现提前结束循环语句实现提前结束循环#includevoidmain()floatscore,sum=0,ave;inti,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语句的一般形式为
20、语句的一般形式为:break;只能用于循环语句和只能用于循环语句和switch语句之中,而不能语句之中,而不能单独单独使用使用5.5.25.5.2用用用用continuecontinue语句提前结束语句提前结束语句提前结束语句提前结束本次循环本次循环本次循环本次循环continue语句的一般形式为语句的一般形式为:continue;其作用为结束其作用为结束本次本次循环,即跳过循环体循环,即跳过循环体中下面尚未执行的语句,接着进行下一中下面尚未执行的语句,接着进行下一次是否执行循环的判断。次是否执行循环的判断。P1265.5.25.5.2用用用用continuecontinue语句提前结束语句提
21、前结束语句提前结束语句提前结束本次循环本次循环本次循环本次循环continue语句和语句和break语句的区别:语句的区别:ucontinue语句只结束语句只结束本次本次循环,而不是终循环,而不是终止整个循环的执行止整个循环的执行ubreak语句结束语句结束整个整个循环过程,不再判断执循环过程,不再判断执行循环的条件是否成立行循环的条件是否成立 P126假假表达式表达式1真真表达式表达式2假假真真break语句语句强行退出循环强行退出循环while(表达式表达式1)if(表达式表达式2)break;假假表达式表达式1真真表达式表达式2假假真真continue语句语句只结束本次循环只结束本次循环
22、while(表达式表达式1)if(表达式表达式2)continue;假假表达式表达式1真真表达式表达式2假假真真continue语句语句只结束本次循环只结束本次循环假假表达式表达式1真真表达式表达式2假假真真break语句语句强行退出循环强行退出循环例例5.7输入一个班全体学生的成绩,把不输入一个班全体学生的成绩,把不及格的学生成绩输出,并求及格学生的平及格的学生成绩输出,并求及格学生的平均成绩。均成绩。解题思路:解题思路:u在进行循环中,检查学生的成绩,把其在进行循环中,检查学生的成绩,把其中不及格的成绩输出,然后跳过后面总成中不及格的成绩输出,然后跳过后面总成绩的累加和求平均成绩的语句绩的
23、累加和求平均成绩的语句u用用continu语句处理语句处理#includevoidmain()floatscore,sum=0,ave;inti,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);不及格不及格输出成绩输出成绩跳过下面语句跳过下面语句score:89 score:56 Fail:56score:76 scor
24、e:58 Fail:58score:98 n=3ave=87.675.65.6几种循环的比较几种循环的比较几种循环的比较几种循环的比较P128(1)一般情况下一般情况下,3种循环可以互相代替种循环可以互相代替(2)在在while和和do-while循环中,循环体循环中,循环体应应包含使循环趋于结束的语句。包含使循环趋于结束的语句。(3)用用while和和do-while循环时,循环变循环时,循环变量初始化的操作应在量初始化的操作应在while和和do-while语句之前完成。而语句之前完成。而for语句可以在表达式语句可以在表达式1中实现循环变量的初始化。中实现循环变量的初始化。5.75.7程
25、序举例程序举例程序举例程序举例P128例例5.8有一对兔子,出生后第有一对兔子,出生后第3个月起每个个月起每个月都生一对兔子。小兔子长到第月都生一对兔子。小兔子长到第3个月后每个月后每个月又生一对兔子。假设所有兔子都不死,个月又生一对兔子。假设所有兔子都不死,问问40个月的兔子总数为多少?个月的兔子总数为多少?解题思路:这是一个有趣的古典数学问题。解题思路:这是一个有趣的古典数学问题。可以从下表看出兔子繁殖的规律。可以从下表看出兔子繁殖的规律。第几个第几个月月小兔子小兔子对对数数中兔子中兔子对对数数老兔子老兔子对对数数兔子兔子总总数数1 11 10 00 01 12 20 01 10 01 1
26、3 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个数开始,该数是其前面两个数之和个数开始,该数是其前面两个数之和解题思路:这是一个有趣的古典数学问题。解题思路:这是一个有趣的古典数学问题。可以从下表看出兔子繁殖的规律。可以从下表看出兔子繁殖的规律。每个月的兔子总数依次为每个月的兔子总数依次为1,1,2,3,5,8,13
27、是是费波那西费波那西(Fibonacci)数列数列特点:第特点:第1、2两个数为两个数为1、1从第从第3个数开始,该数是其前面两个数之和个数开始,该数是其前面两个数之和f1=f1+f2f2=f2+f1fori=1to20f1=1,f2=1输出输出f1,f2#includevoidmain()longintf1,f2;inti;f1=1;f2=1;for(i=1;i输出是素数输出是素数真真输出不是素数输出不是素数假假#include#includevoidmain()intm,i,k;printf(“number:);scanf(“%d”,&m);k=(int)sqrt(m);for(i=2;i
28、k)printf(%dprimen,m);elseprintf(%dnotprimen,m);number:17 17prime例例5.10译密码。为使电文保密,往往按译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约一定规律将其转换成密码,收报人再按约定的规律将其译回原文。定的规律将其译回原文。ABCDEFGWXYZ非字母字符保持原状不变非字母字符保持原状不变输入一行字符,要求输出其相应的密码输入一行字符,要求输出其相应的密码解题思路:解题思路:(1)从字母从字母A到到V,只需将字,只需将字母母加上加上4就行就行例如,例如,A+4就是就是E(2)从字母从字母W到到Z,将字,将字
29、母母加加4,再减去,再减去26W+4-26就是就是A解题思路:解题思路:u输入一个字符给字符变量输入一个字符给字符变量cu判定它是否字母判定它是否字母(包括大小写包括大小写),若不是字母,若不是字母,不改变不改变c的值;若是字母,则使变量的值;若是字母,则使变量c的值改变的值改变为其后第为其后第4个字母个字母u如果新的如果新的c值值范围范围不在字母范围内,应减去不在字母范围内,应减去26#includevoidmain()charc;while(c=getchar()!=n)if(c=a&c=A&cZ&cz)c=c-26;printf(%c,c);China!Glmre!5.85.8提高部分提
30、高部分提高部分提高部分5.8.1while和和dowhile循环的比较循环的比较5.8.2for语句的各种形式语句的各种形式P1325.8.1while5.8.1while和和和和dodowhilewhile循环的比较循环的比较循环的比较循环的比较凡是能用凡是能用while循环处理循环处理的情况的情况,都能,都能用用dowhile循环处理循环处理dowhile循环结构可以转换成循环结构可以转换成while循环结构循环结构 P1325.8.1while5.8.1while和和和和dodowhilewhile循环的比较循环的比较循环的比较循环的比较P132表达式表达式非非0(真真)0(假假)循环体
31、语句循环体语句表达式表达式非非0(真真)0(假假)语句语句语句语句dowhile语句语句while语句语句5.8.1while5.8.1while和和和和dodowhilewhile循环的比较循环的比较循环的比较循环的比较例例5.11while和和dowhile循环的比较循环的比较u以下两个程序,循环体是相同的以下两个程序,循环体是相同的u程序程序(1)用用while循环循环u程序程序(2)用用do-while循环循环u运行时,在有的情况下结果相同,而另一些运行时,在有的情况下结果相同,而另一些情况下结果不同,请仔细分析。情况下结果不同,请仔细分析。P132程序程序(1)#includevoi
32、dmain()ints=0,i;scanf(“%d”,&i);while(i=10)s=s+i;i+;printf(“s=%d”,s);程序程序(2)#includevoidmain()ints=0,i;scanf(“%d”,&i);dos=s+i;i+;while(i=10);printf(“s=%d”,s);1 s=55再运行一次:再运行一次:11 s=01 s=55再运行一次:再运行一次:11 s=11当当while后面的表达式的第一次的值为后面的表达式的第一次的值为“真真”时,两种循环得到的结果相同;时,两种循环得到的结果相同;否则,二者结果不相同否则,二者结果不相同(相同循环体相同循
33、环体时时)5.8.2for5.8.2for语句的各种形式语句的各种形式语句的各种形式语句的各种形式在实际编程中,在实际编程中,for语句相当灵活,形式语句相当灵活,形式变化多样。变化多样。前面介绍过前面介绍过for语句的一般形式为语句的一般形式为for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句 P134for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句表达式表达式1;for(;表达式表达式2;表达式表达式3)语句语句 for(表达式表达式1;表达式表达式3)if(表达式表达式2)语句语句for(表达式表达式1;表达式表达式2;)语句语句表达式表达式3;for(表达
34、式表达式1;表达式表达式2;表达式表达式3)语句语句表达式表达式1;for(;表达式表达式2;)语句语句表达式表达式3;表达式表达式1;for(;)if(表达式表达式2)语句语句表达式表达式3;for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句可以是设置循环变量初值的赋值表达式可以是设置循环变量初值的赋值表达式也可以是与循环变量无关的其他表达式也可以是与循环变量无关的其他表达式for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句可以是与循环控制无关的任意表达式可以是与循环控制无关的任意表达式for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句可以是一个简单
35、的表达式可以是一个简单的表达式也可以是逗号表达式也可以是逗号表达式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);作用作用:每读入一个字符后立即输出该字每读入一个字符后立即输出该字符,直到输入一个符,直到输入一个“换行换行”为止为止此课件下载可自行编辑修改,仅供参考!此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢感谢您的支持,我们努力做得更好!谢谢
限制150内