循环结构程序设计课件_第1页
循环结构程序设计课件_第2页
循环结构程序设计课件_第3页
循环结构程序设计课件_第4页
循环结构程序设计课件_第5页
已阅读5页,还剩131页未读 继续免费阅读

下载本文档

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

文档简介

第5章循环结构程序设计第5章循环结构程序设计15.1程序中需要用循环结构现实生活中许多问题是需要重复处理计算一个班50学生每人的平均成绩工厂各车间的生产日报表全国各省市的人口统计分析各大学招生情况统计全校教职工工资报表P1155.1程序中需要用循环结构现实生活中许多问题是需要重复处理2第5章循环结构程序设计课件3第5章循环结构程序设计课件45.2用while语句和do…while语句实现循环5.2.1用while语句实现循环5.2.2用do…while语句实现循环P1155.2用while语句和do…while语句实现循环5.255.2.1用while语句实现循环P115例5.1求1+2+3+…+100,即解题思路:这是累加问题,需要先后将100个数相加要重复100次加法运算,可用循环实现后一个数是前一个数加1而得加完上一个数i后,使i加1可得到下一个数5.2.1用while语句实现循环P115例5.1求1+265.2.1用while语句实现循环P115sum=sum+ii=i+1非0(真)i1000(假)i=15.2.1用while语句实现循环P115sum=sum+7#include<stdio.h>voidmain(){inti,sum=0;i=1;

while(i<=100){sum=sum+i;i++;}printf("%d\n",sum);}复合语句能否改为i<100?#include<stdio.h>复合语句能否改为i<108

while语句的一般形式如下:

while(表达式)语句循环体while语句的一般形式如下:循环体9

while语句的一般形式如下:

while(表达式)语句“真”时执行循环体语句“假”时不执行循环条件表达式while循环的特点是:先判断条件表达式后执行循环体语句语句非0(真)表达式0(假)while语句的一般形式如下:“真”时执行循环体语句循环条105.2.2用do…while语句实现循环P117do---while语句的特点:先无条件地执行循环体,然后判断循环条件是否成立一般形式为:do

循环体语句while(表达式);表达式非0(真)0(假)循环体语句当表达式的值为真循环体语句5.2.2用do…while语句实现循环P117do---115.2.2用do…while语句实现循环P117

例5.2用do…while循环求:1+2+3+…+100,即5.2.2用do…while语句实现循环P117例5.125.2.2用do…while语句实现循环P117解题思路:i≤100非0(真)0(假)sum=sum+ii=i+1sum=0i=1sum=0;i=1;

do{sum=sum+i;i++;}while(i<=100);

i≤100sum=sum+ii=i+1sum=0,i=15.2.2用do…while语句实现循环P117解题思路:13#include<stdio.h>voidmain(){inti,sum=0;i=1;

do{sum=sum+i;i++;}while(i<=100);printf(“%d\n”,sum);}5050#include<stdio.h>505014例5.3募集慈善基金10000元,有若干人捐款,每输入一个人的捐款数后,计算机就输出当时的捐款总和。当某一次输入捐款数后,总和达到或超过10000元时,即宣告结束,输出最后的累加值。解题思路:设计一个循环结构,在其中输入捐款数,求出累加值,然后检查此时的累加值是否达到或超过预定值,如果达到了,就结束循环操作例5.3募集慈善基金10000元,有若干人捐款,每输入一个15#include<stdio.h>voidmain(){floatamount,sum=0;do{scanf("%f",&amount); sum=sum+amount;}while(sum<10000);printf("sum=%9.2f\n",sum);}循环执行的条件1000↙

1850↙1500↙2600↙2500↙1200↙sum=10650.00#include<stdio.h>循环执行的条件1000↙165.3用for语句实现循环P1195.3.1for语句的一般形式和执行过程5.3.2for循环程序举例for语句不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况for语句完全可以代替while语句5.3用for语句实现循环P1195.3.1for语句的175.3.1for语句的一般形式和执行过程P120for语句的一般形式为

for(表达式1;表达式2;表达式3)

语句设置初始条件,只执行一次。可以为零个、一个或多个变量设置初值执行5.3.1for语句的一般形式和执行过程P120for语句185.3.1for语句的一般形式和执行过程P120for语句的一般形式为

for(表达式1;表达式2;表达式3)

语句循环条件表达式,用来判定是否继续循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环5.3.1for语句的一般形式和执行过程P120for语句195.3.1for语句的一般形式和执行过程P120for语句的一般形式为

for(表达式1;表达式2;表达式3)

语句作为循环的调整器,例如使循环变量增值,它是在执行完循环体后才进行的5.3.1for语句的一般形式和执行过程P120for语句20for语句的执行过程:(1)先求解表达式1(2)求解表达式2,若其值为真,执行循环体,然后执行下面第(3)步。若为假,则结束循环,转到第(5)步(3)求解表达式3(4)转回上面步骤(2)继续执行(5)循环结束,执行for语句下面的一个语句表达式2非0(真)0(假)求解表达式3求解表达式1语句for语句的执行过程:表达式2非0(真)0(假)求解表达式321for(i=1;i<=100;i++)sum=sum+i;等价于i=1;while(i<=100){sum=sum+i;i++; }用for语句更简单、方便for(i=1;i<=100;i++)用for语句更简单、225.3.2for循环程序举例例5.4在象棋的棋盘第1个格子中放1粒麦子,第2个格子中放2粒麦子,第3个格子中放4粒麦子,以后按此比例每一格加一倍,一直放到第64格(象棋的棋盘是8×8=64格),共放多少?P120麦子总粒数=1+2+22+23+…+2631m3=1.42×108粒5.3.2for循环程序举例例5.4在象棋的棋盘第1个格23#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}p是当前一个格子中麦子粒数t是当前麦子总粒数v是总体积total=1.844674e+019volnme=1.299066e+011#include<stdio.h>p是当前一个格子中麦子粒24#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}改为i=1;i<=64;i++会怎样?#include<stdio.h>改为i=1;i<=64;25#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}改为i=0;i<64;i++会怎样?#include<stdio.h>改为i=0;i<64;i26

例5.5人口增长预测。据2005年末统计,我国人口为130756万人,如果人口的年增长率为1%,请计算到哪一年中国总人口超过15亿。解题思路:假设原来人口为p0

,则一年后的人口为:p=p0*(1+r),r是年增长率每算出一年的人口后就检查是否达到或超过15亿。如果未达到或超过,再计算下一年的人口,直到某一年的人口达到或超过15亿为止例5.5人口增长预测。据2005年末统计,我国人口为27#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}原来的值1年后的值year=2019,p=1.503007e+009注意不是y2019年达到15.03007亿人口#include<stdio.h>原来的值1年后的值yea28#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}计算1000年后的人口y<=3006y=3006,p=2.767941e+0133006年达到276794亿人口#include<stdio.h>计算1000年后的人口y29#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}迭代公式#include<stdio.h>迭代公式305.4循环的嵌套P124一个循环体内又包含另一个完整的循环结构,称为循环的嵌套内嵌的循环中还可以嵌套循环,这就是多层循环3种循环(while循环、do…while循环和for循环)可以互相嵌套5.4循环的嵌套P124一个循环体内又包含另一个完整的循环315.5提前结束循环5.5.1用break语句提前退出循环5.5.2用continue语句提前结束本次循环P1245.5提前结束循环5.5.1用break语句提前退出循环325.5.1用break语句提前退出循环在执行循环语句时,在正常情况下只要满足给定的循环条件,就应当一次一次地执行循环体,直到不满足给定的循环条件为止。但是有些情况下,需要提前结束循环。P1245.5.1用break语句提前退出循环在执行循环语句时,在33

例5.6统计各班级学生的平均成绩。已知各班人数不等,但都不超过30人。编一个程序能处理人数不等的各班学生的平均成绩。解题思路:输入的成绩是负数时,表示本班数据已结束接收到一个负的分数时就提前结束循环用break语句实现提前结束循环例5.6统计各班级学生的平均成绩。已知各班人数不等,但34#include<stdio.h>voidmain(){floatscore,sum=0,ave;inti,n;for(i=1;i<31;i++){ scanf(“%f”,&score);if(score<0)break;sum=sum+score; }n=i-1;ave=sum/n;printf(“n=%d,ave=%7.2f\n”,n,ave);}负值,跳出循环非负,累加100↙80↙70↙-1↙

n=3,ave=90.00#include<stdio.h>负值,跳出循环非负,累加35break语句的一般形式为:break;只能用于循环语句和switch语句之中,而不能单独使用break语句的一般形式为:只能用于循环语句和switch语365.5.2用continue语句提前结束本次循环

continue语句的一般形式为:

continue;

其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判断。P1265.5.2用continue语句提前结束本次循环cont375.5.2用continue语句提前结束本次循环continue语句和break语句的区别:continue语句只结束本次循环,而不是终止整个循环的执行break语句结束整个循环过程,不再判断执行循环的条件是否成立P1265.5.2用continue语句提前结束本次循环conti38假表达式1真表达式2假真…………break语句强行退出循环while(表达式1){

┇if(表达式2)

break;

┇}假表达式1真表达式2假真…………break语句强行退出循环w39假表达式1真表达式2假……真…………continue语句只结束本次循环while(表达式1){

┇if(表达式2)

continue;

┇}假表达式1真表达式2假……真…………continue语句只结40假表达式1真表达式2假……真…………continue语句只结束本次循环假表达式1真表达式2假真…………break语句强行退出循环假表达式1真表达式2假……真…………continue语句只结41

例5.7输入一个班全体学生的成绩,把不及格的学生成绩输出,并求及格学生的平均成绩。解题思路:在进行循环中,检查学生的成绩,把其中不及格的成绩输出,然后跳过后面总成绩的累加和求平均成绩的语句用continu语句处理例5.7输入一个班全体学生的成绩,把不及格的学生成绩42#include<stdio.h>voidmain(){floatscore,sum=0,ave;inti,n=0;for(i=1;i<6;i++){printf(“score:");scanf(“%f”,&score); if(score<60){printf(“Fail:%7.2f\n”,score);

continue;}sum=sum+score;n=n+1; }ave=sum/n;printf(“n=%d,ave=%7.2f\n”,n,ave);}不及格输出成绩跳过下面语句score:89↙score:56↙Fail:56score:76↙score:58↙Fail:58score:98↙

n=3ave=87.67#include<stdio.h>不及格输出成绩跳过下面语435.6几种循环的比较P128(1)一般情况下,3种循环可以互相代替(2)在while和do---while循环中,循环体应包含使循环趋于结束的语句。(3)用while和do---while循环时,循环变量初始化的操作应在while和do---while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。5.6几种循环的比较P128(1)一般情况下,3种循环可以445.7程序举例P128

例5.8有一对兔子,出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问40个月的兔子总数为多少?5.7程序举例P128例5.8有一对兔子,出生后第345解题思路:这是一个有趣的古典数学问题。可以从下表看出兔子繁殖的规律。第几个月小兔子对数中兔子对数老兔子对数兔子总数110012010131012411135212563238753513┆┆┆┆┆每个月的兔子总数依次为1,1,2,3,5,8,13…是费波那西(Fibonacci)数列特点:第1、2两个数为1、1

从第3个数开始,该数是其前面两个数之和解题思路:这是一个有趣的古典数学问题。可以从下表看出兔子繁殖46解题思路:这是一个有趣的古典数学问题。可以从下表看出兔子繁殖的规律。每个月的兔子总数依次为1,1,2,3,5,8,13…是费波那西(Fibonacci)数列特点:第1、2两个数为1、1

从第3个数开始,该数是其前面两个数之和f1=f1+f2f2=f2+f1fori=1to20f1=1,f2=1输出f1,f2解题思路:这是一个有趣的古典数学问题。可以从下表看出兔子繁殖47#include<stdio.h>voidmain(){longintf1,f2;inti;f1=1;f2=1;for(i=1;i<=20;i++){printf("%12ld%12ld",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}}控制一行输出的数据个数在VC++中可用int型#include<stdio.h>控制一行输出的数据个数在48例5.9有一个整数m,判断它是否素数。解题思路:所谓素数(或称质数)是指除了1和它本身以外,不能被任何整数整除的数例如17是素数,因为它不能被2到16间任一整数整除因此判断一个整数m是否素数,只需把m被2到m-1之间的每一个整数去除,如果都不能被整除,那末m就是一个素数

例5.9有一个整数m,判断它是否素数。49假假真i=i+1输入mi=2i≤真m被i整除i>输出是素数真输出不是素数假假假真i=i+1输入mi=2i≤真m被i整除i>输出是50#include<stdio.h>#include<math.h>voidmain(){intm,i,k;printf(“number:");scanf(“%d”,&m);

k=(int)sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k)printf("%dprime\n",m);elseprintf("%dnotprime\n",m);}number:17↙17prime#include<stdio.h>number:17↙51

例5.10译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。ABCDEFG……WXYZ非字母字符保持原状不变输入一行字符,要求输出其相应的密码例5.10译密码。为使电文保密,往往按一定规律将其转52解题思路:(1)从字母A到V,只需将字母加上4就行

例如,’A’+4就是’E’(2)从字母W到Z,将字母加4,再减去26’W’+4-26就是’A’解题思路:53解题思路:输入一个字符给字符变量c判定它是否字母(包括大小写),若不是字母,不改变c的值;若是字母,则使变量c的值改变为其后第4个字母如果新的c值范围不在字母范围内,应减去26解题思路:54#include<stdio.h>voidmain(){charc;while((c=getchar())!=‘\n’){if((c>=‘a’&&c<=‘z’)||(c>=‘A’&&c<=‘Z’)){c=c+4;if(c>‘Z’&&c<=‘Z’+4||c>‘z’)c=c-26;}printf("%c",c);}}China!↙

Glmre!#include<stdio.h>China!↙555.8提高部分5.8.1while和do…while循环的比较5.8.2for语句的各种形式P1325.8提高部分5.8.1while和do…while循环565.8.1while和do…while循环的比较凡是能用while循环处理的情况,都能用do…while循环处理do…while循环结构可以转换成while循环结构P1325.8.1while和do…while循环的比较凡是能用w575.8.1while和do…while循环的比较P132表达式非0(真)0(假)循环体语句表达式非0(真)0(假)语句语句do…while语句while语句5.8.1while和do…while循环的比较P132表585.8.1while和do…while循环的比较例5.11while和do…while循环的比较以下两个程序,循环体是相同的程序(1)用while循环程序(2)用do-while循环运行时,在有的情况下结果相同,而另一些情况下结果不同,请仔细分析。P1325.8.1while和do…while循环的比较例5.1159程序(1)#include<stdio.h>voidmain(){ints=0,i;scanf(“%d”,&i);while(i<=10){s=s+i;i++;}printf(“s=%d”,s);}程序(2)#include<stdio.h>voidmain(){ints=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后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则,二者结果不相同(相同循环体时)程序(1)程序(2)1↙1↙当while后面的表达式的第一次605.8.2for语句的各种形式在实际编程中,for语句相当灵活,形式变化多样。前面介绍过for语句的一般形式为for(表达式1;表达式2;表达式3)语句P1345.8.2for语句的各种形式在实际编程中,for语句相当61for(表达式1;表达式2;表达式3)语句表达式1;for(;表达式2;表达式3)语句for(表达式1;;表达式3)if(表达式2)语句for(表达式1;表达式2;){语句

表达式3;}for(表达式1;表达式2;表达式3)语句表达式162for(表达式1;表达式2;表达式3)语句表达式1;for(;表达式2;){语句

表达式3;}表达式1;for(;;){if(表达式2)语句

表达式3;}for(表达式1;表达式2;表达式3)语句表达式163for(表达式1;表达式2;表达式3)语句可以是设置循环变量初值的赋值表达式也可以是与循环变量无关的其他表达式for(表达式1;表达式2;表达式3)语句可以是设64for(表达式1;表达式2;表达式3)语句可以是与循环控制无关的任意表达式for(表达式1;表达式2;表达式3)语句可以是与65for(表达式1;表达式2;表达式3)语句可以是一个简单的表达式也可以是逗号表达式for(表达式1;表达式2;表达式3)语句可以是一66for(表达式1;表达式2;表达式3)语句

一般是关系表达式或逻辑表达式也可以是数值表达式或字符表达式只要其值为非0,就执行循环体for(i=0;(c=getchar())!=′\n′;i+=c);作用:不断输入字符,将它们的ASCII码相加,直到输入一个“换行”符为止for(表达式1;表达式2;表达式3)语句一般是67for(表达式1;表达式2;表达式3)语句

一般是关系表达式或逻辑表达式也可以是数值表达式或字符表达式只要其值为非0,就执行循环体for(;(c=getchar())!=′\n′;)printf(″%c″,c);作用:每读入一个字符后立即输出该字符,直到输入一个“换行”为止for(表达式1;表达式2;表达式3)语句一般是68第5章循环结构程序设计第5章循环结构程序设计695.1程序中需要用循环结构现实生活中许多问题是需要重复处理计算一个班50学生每人的平均成绩工厂各车间的生产日报表全国各省市的人口统计分析各大学招生情况统计全校教职工工资报表P1155.1程序中需要用循环结构现实生活中许多问题是需要重复处理70第5章循环结构程序设计课件71第5章循环结构程序设计课件725.2用while语句和do…while语句实现循环5.2.1用while语句实现循环5.2.2用do…while语句实现循环P1155.2用while语句和do…while语句实现循环5.2735.2.1用while语句实现循环P115例5.1求1+2+3+…+100,即解题思路:这是累加问题,需要先后将100个数相加要重复100次加法运算,可用循环实现后一个数是前一个数加1而得加完上一个数i后,使i加1可得到下一个数5.2.1用while语句实现循环P115例5.1求1+2745.2.1用while语句实现循环P115sum=sum+ii=i+1非0(真)i1000(假)i=15.2.1用while语句实现循环P115sum=sum+75#include<stdio.h>voidmain(){inti,sum=0;i=1;

while(i<=100){sum=sum+i;i++;}printf("%d\n",sum);}复合语句能否改为i<100?#include<stdio.h>复合语句能否改为i<1076

while语句的一般形式如下:

while(表达式)语句循环体while语句的一般形式如下:循环体77

while语句的一般形式如下:

while(表达式)语句“真”时执行循环体语句“假”时不执行循环条件表达式while循环的特点是:先判断条件表达式后执行循环体语句语句非0(真)表达式0(假)while语句的一般形式如下:“真”时执行循环体语句循环条785.2.2用do…while语句实现循环P117do---while语句的特点:先无条件地执行循环体,然后判断循环条件是否成立一般形式为:do

循环体语句while(表达式);表达式非0(真)0(假)循环体语句当表达式的值为真循环体语句5.2.2用do…while语句实现循环P117do---795.2.2用do…while语句实现循环P117

例5.2用do…while循环求:1+2+3+…+100,即5.2.2用do…while语句实现循环P117例5.805.2.2用do…while语句实现循环P117解题思路:i≤100非0(真)0(假)sum=sum+ii=i+1sum=0i=1sum=0;i=1;

do{sum=sum+i;i++;}while(i<=100);

i≤100sum=sum+ii=i+1sum=0,i=15.2.2用do…while语句实现循环P117解题思路:81#include<stdio.h>voidmain(){inti,sum=0;i=1;

do{sum=sum+i;i++;}while(i<=100);printf(“%d\n”,sum);}5050#include<stdio.h>505082例5.3募集慈善基金10000元,有若干人捐款,每输入一个人的捐款数后,计算机就输出当时的捐款总和。当某一次输入捐款数后,总和达到或超过10000元时,即宣告结束,输出最后的累加值。解题思路:设计一个循环结构,在其中输入捐款数,求出累加值,然后检查此时的累加值是否达到或超过预定值,如果达到了,就结束循环操作例5.3募集慈善基金10000元,有若干人捐款,每输入一个83#include<stdio.h>voidmain(){floatamount,sum=0;do{scanf("%f",&amount); sum=sum+amount;}while(sum<10000);printf("sum=%9.2f\n",sum);}循环执行的条件1000↙

1850↙1500↙2600↙2500↙1200↙sum=10650.00#include<stdio.h>循环执行的条件1000↙845.3用for语句实现循环P1195.3.1for语句的一般形式和执行过程5.3.2for循环程序举例for语句不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况for语句完全可以代替while语句5.3用for语句实现循环P1195.3.1for语句的855.3.1for语句的一般形式和执行过程P120for语句的一般形式为

for(表达式1;表达式2;表达式3)

语句设置初始条件,只执行一次。可以为零个、一个或多个变量设置初值执行5.3.1for语句的一般形式和执行过程P120for语句865.3.1for语句的一般形式和执行过程P120for语句的一般形式为

for(表达式1;表达式2;表达式3)

语句循环条件表达式,用来判定是否继续循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环5.3.1for语句的一般形式和执行过程P120for语句875.3.1for语句的一般形式和执行过程P120for语句的一般形式为

for(表达式1;表达式2;表达式3)

语句作为循环的调整器,例如使循环变量增值,它是在执行完循环体后才进行的5.3.1for语句的一般形式和执行过程P120for语句88for语句的执行过程:(1)先求解表达式1(2)求解表达式2,若其值为真,执行循环体,然后执行下面第(3)步。若为假,则结束循环,转到第(5)步(3)求解表达式3(4)转回上面步骤(2)继续执行(5)循环结束,执行for语句下面的一个语句表达式2非0(真)0(假)求解表达式3求解表达式1语句for语句的执行过程:表达式2非0(真)0(假)求解表达式389for(i=1;i<=100;i++)sum=sum+i;等价于i=1;while(i<=100){sum=sum+i;i++; }用for语句更简单、方便for(i=1;i<=100;i++)用for语句更简单、905.3.2for循环程序举例例5.4在象棋的棋盘第1个格子中放1粒麦子,第2个格子中放2粒麦子,第3个格子中放4粒麦子,以后按此比例每一格加一倍,一直放到第64格(象棋的棋盘是8×8=64格),共放多少?P120麦子总粒数=1+2+22+23+…+2631m3=1.42×108粒5.3.2for循环程序举例例5.4在象棋的棋盘第1个格91#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}p是当前一个格子中麦子粒数t是当前麦子总粒数v是总体积total=1.844674e+019volnme=1.299066e+011#include<stdio.h>p是当前一个格子中麦子粒92#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}改为i=1;i<=64;i++会怎样?#include<stdio.h>改为i=1;i<=64;93#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}改为i=0;i<64;i++会怎样?#include<stdio.h>改为i=0;i<64;i94

例5.5人口增长预测。据2005年末统计,我国人口为130756万人,如果人口的年增长率为1%,请计算到哪一年中国总人口超过15亿。解题思路:假设原来人口为p0

,则一年后的人口为:p=p0*(1+r),r是年增长率每算出一年的人口后就检查是否达到或超过15亿。如果未达到或超过,再计算下一年的人口,直到某一年的人口达到或超过15亿为止例5.5人口增长预测。据2005年末统计,我国人口为95#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}原来的值1年后的值year=2019,p=1.503007e+009注意不是y2019年达到15.03007亿人口#include<stdio.h>原来的值1年后的值yea96#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}计算1000年后的人口y<=3006y=3006,p=2.767941e+0133006年达到276794亿人口#include<stdio.h>计算1000年后的人口y97#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}迭代公式#include<stdio.h>迭代公式985.4循环的嵌套P124一个循环体内又包含另一个完整的循环结构,称为循环的嵌套内嵌的循环中还可以嵌套循环,这就是多层循环3种循环(while循环、do…while循环和for循环)可以互相嵌套5.4循环的嵌套P124一个循环体内又包含另一个完整的循环995.5提前结束循环5.5.1用break语句提前退出循环5.5.2用continue语句提前结束本次循环P1245.5提前结束循环5.5.1用break语句提前退出循环1005.5.1用break语句提前退出循环在执行循环语句时,在正常情况下只要满足给定的循环条件,就应当一次一次地执行循环体,直到不满足给定的循环条件为止。但是有些情况下,需要提前结束循环。P1245.5.1用break语句提前退出循环在执行循环语句时,在101

例5.6统计各班级学生的平均成绩。已知各班人数不等,但都不超过30人。编一个程序能处理人数不等的各班学生的平均成绩。解题思路:输入的成绩是负数时,表示本班数据已结束接收到一个负的分数时就提前结束循环用break语句实现提前结束循环例5.6统计各班级学生的平均成绩。已知各班人数不等,但102#include<stdio.h>voidmain(){floatscore,sum=0,ave;inti,n;for(i=1;i<31;i++){ scanf(“%f”,&score);if(score<0)break;sum=sum+score; }n=i-1;ave=sum/n;printf(“n=%d,ave=%7.2f\n”,n,ave);}负值,跳出循环非负,累加100↙80↙70↙-1↙

n=3,ave=90.00#include<stdio.h>负值,跳出循环非负,累加103break语句的一般形式为:break;只能用于循环语句和switch语句之中,而不能单独使用break语句的一般形式为:只能用于循环语句和switch语1045.5.2用continue语句提前结束本次循环

continue语句的一般形式为:

continue;

其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判断。P1265.5.2用continue语句提前结束本次循环cont1055.5.2用continue语句提前结束本次循环continue语句和break语句的区别:continue语句只结束本次循环,而不是终止整个循环的执行break语句结束整个循环过程,不再判断执行循环的条件是否成立P1265.5.2用continue语句提前结束本次循环conti106假表达式1真表达式2假真…………break语句强行退出循环while(表达式1){

┇if(表达式2)

break;

┇}假表达式1真表达式2假真…………break语句强行退出循环w107假表达式1真表达式2假……真…………continue语句只结束本次循环while(表达式1){

┇if(表达式2)

continue;

┇}假表达式1真表达式2假……真…………continue语句只结108假表达式1真表达式2假……真…………continue语句只结束本次循环假表达式1真表达式2假真…………break语句强行退出循环假表达式1真表达式2假……真…………continue语句只结109

例5.7输入一个班全体学生的成绩,把不及格的学生成绩输出,并求及格学生的平均成绩。解题思路:在进行循环中,检查学生的成绩,把其中不及格的成绩输出,然后跳过后面总成绩的累加和求平均成绩的语句用continu语句处理例5.7输入一个班全体学生的成绩,把不及格的学生成绩110#include<stdio.h>voidmain(){floatscore,sum=0,ave;inti,n=0;for(i=1;i<6;i++){printf(“score:");scanf(“%f”,&score); if(score<60){printf(“Fail:%7.2f\n”,score);

continue;}sum=sum+score;n=n+1; }ave=sum/n;printf(“n=%d,ave=%7.2f\n”,n,ave);}不及格输出成绩跳过下面语句score:89↙score:56↙Fail:56score:76↙score:58↙Fail:58score:98↙

n=3ave=87.67#include<stdio.h>不及格输出成绩跳过下面语1115.6几种循环的比较P128(1)一般情况下,3种循环可以互相代替(2)在while和do---while循环中,循环体应包含使循环趋于结束的语句。(3)用while和do---while循环时,循环变量初始化的操作应在while和do---while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。5.6几种循环的比较P128(1)一般情况下,3种循环可以1125.7程序举例P128

例5.8有一对兔子,出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问40个月的兔子总数为多少?5.7程序举例P128例5.8有一对兔子,出生后第3113解题思路:这是一个有趣的古典数学问题。可以从下表看出兔子繁殖的规律。第几个月小兔子对数中兔子对数老兔子对数兔子总数110012010131012411135212563238753513┆┆┆┆┆每个月的兔子总数依次为1,1,2,3,5,8,13…是费波那西(Fibonacci)数列特点:第1、2两个数为1、1

从第3个数开始,该数是其前面两个数之和解题思路:这是一个有趣的古典数学问题。可以从下表看出兔子繁殖114解题思路:这是一个有趣的古典数学问题。可以从下表看出兔子繁殖的规律。每个月的兔子总数依次为1,1,2,3,5,8,13…是费波那西(Fibonacci)数列特点:第1、2两个数为1、1

从第3个数开始,该数是其前面两个数之和f1=f1+f2f2=f2+f1fori=1to20f1=1,f2=1输出f1,f2解题思路:这是一个有趣的古典数学问题。可以从下表看出兔子繁殖115#include<stdio.h>voidmain(){longintf1,f2;inti;f1=1;f2=1;for(i=1;i<=20;i++){printf("%12ld%12ld",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}}控制一行输出的数据个数在VC++中可用int型#include<stdio.h>控制一行输出的数据个数在116例5.9有一个整数m,判断它是否素数。解题思路:所谓素数(或称质数)是指除了1和它本身以外,不能被任何整数整除的数例如17是素数,因为它不能被2到16间任一整数整除因此判断一个整数m是否素数,只需把m被2到m-1之间的每一个整数去除,如果都不能被整除,那末m就是一个素数

例5.9有一个整数m,判断它是否素数。117假假真i=i+1输入mi=2i≤真m被i整除i>输出是素数真输出不是素数假假假真i=i+1输入mi=2i≤真m被i整除i>输出是118#include<stdio.h>#include<math.h>voidmain(){intm,i,k;printf(“number:");scanf(“%d”,&m);

k=(int)sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k)printf("%dprime\n",m);elseprintf("%dnotprime\n",m);}number:17↙17prime#include<stdio.h>number:17↙119

例5.10译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。ABCDEFG……WXYZ非字母字符保持原状不变输入一行字符,要求输出其相应的密码例5.10译密码。为使电文保密,往往按一定规律将其转120解题思路:(1)从字母A到V,只需将字母加上4就行

例如,’A’+4就是’E’(2)从字母W到Z,将字母加4,再减去26’W’+4-26就是’A’解题思路:121解题思路:输入一个字符给字符变量c判定它是否字母(包括大小写),若不是字母,不改变c的值;若是字母,则使变量c的值改变为其后第4个字母如果新的c值范围不在字母范围内,应减去26解题思路:122#include<stdio.h>voidmain(){charc;while((c=getchar())!=‘\n’){if((c>=‘a’&&c<=‘z’)||

温馨提示

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

评论

0/150

提交评论