C语言课件第5章 循环结构程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

本章要点while、do…while、for三种循环语句continue和break语句循环的嵌套循环结构程序的应用举例学习方法建议:学习本章内容时,应重点掌握三种循环语句的基本流程,并在此基础上理解循环嵌套的应用。要求多读程序,理解编程的算法、编程的思路,并仿照例题多编程序、上机练习,真正掌握循环结构程序的设计。第5章循环结构程序设计1.问题描述——统计学生某门课程的平均成绩每学期期末,通常需要对各门课程的教学情况进行总结。其中,统计课程的平均成绩是考察教学效果的重要评定参数。假设某班40名同学选修了C语言程序设计,要求统计该门课程的平均成绩。2.引例分析要想统计课程的平均成绩,应先求出所有学生的成绩总和,然后用人数去除总成绩可得结果。首先设定变量sum表示总成绩,令其初值为零,即sum=0;定义变量score用来表示某位同学的成绩。5.1引例i=1,sum=0i=40输入成绩存放在score中sum=sum+scorei=i+1avg=sum/40YN开始结束3.程序代码#defineN40#includestdio.hmain(){inti=1,sum=0;/*初始化循环控制变量i和累加器sum*/intscore;/*定义存放成绩的变量score*/floatavg;/*定义存放平均成绩的变量avg*/while(i=N){scanf(%d,&score);/*输入第i位同学的成绩*/sum+=score;/*实现累加*/i++;/*循环控制变量i增1*/}avg=(float)sum/N;/*计算平均值*/printf(avg=%.2f\n,avg);}5.2while语句while语句用来实现“当型”循环结构。其一般格式为while(表达式)语句;当表达式为非值时,执行while语句中内嵌语句,其执行过程如图所示。其特点是:先判断表达式,后执行语句。main(){inti=1,sum=0;while(i=100){sum+=i;i++;}printf(sum=%d\n,sum);}【例5.1】用while语句求1~100的累加和。运行结果为:sum=5050sum=0while(i=100)sum+=i;i++;printf(“sum=%d\n”,sum);N-S图【例5.2】求n!,即求n的阶乘,n由键盘输入。#includestdio.hmain(){inti=1,n,s=1;printf(Inputn:);scanf(%d,&n);while(i=n){s*=i;i++;}printf(%d!=%d\n,n,s);}5.3dowhile语句do…while语句的特点是先执行循环体,然后判断循环条件是否成立。其一般格式为:do{循环体语句;}while(表达式);/*本行的分号不能缺省*/其特点是:先执行循环体语句,然后再判断表达式。【例5.3】用do…while语句实现引例。#includestdio.hmain(){inti=1,sum=0;/*定义并初始化循环控制变量i及累计器sum*/intscore;/*定义存放成绩的变量score*/floatavg;/*定义存放平均成绩的变量avg*/do{scanf(%d,&score);/*输入第i位同学的成绩*/sum+=score;/*实现累加*/i++;}/*循环控制变量i增1*/while(i=40);/*循环继续条件:i=40*/avg=(float)sum/40;/*计算平均值*/printf(avg=%.2f\n,avg);}【例5.4】用do…while语句求解1~100的累加和。#includestdio.hmain(){inti=1,sum=0;do{sum+=i;i++;}while(i=100);printf(sum=%d\n,sum);}i=1,sum=0;sum+=i;i++;直到i>100时printf(“sum=%d\n”,sum);N-S图【例5.5】while和do…while循环的比较。(1)main(){ints=0,i;scanf(%d,&i);while(i=10){s=s+i;i++;}printf(s=%d\n,s)}运行结果为:输入1↙s=55再运行一次11↙s=0(2)main(){ints=0,i;scanf(%d,&ido{s=s+i;i++;}while(i=10);printf(s=%d\n,}运行结果为输入1↙s=55再运行一次11↙s=11可以看到:当输入i的值小于或等于10时,二者得到结果相同。而当i10时,二者结果就不同了。这是因为此时对while循环来说,一次也不执行循环体,而对do…while循环语句来说则要执行一次循环体。while循环是先判断,而do…while循环是后判断。5.4for语句在3种循环语句中,for语句最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定、但给出了循环继续条件的情况。for语句的一般格式:for(表达式1;表达式2;表达式3)语句;执行过程:①求解表达式1。②判断表达式2。如果其值非0,则执行for语句中指定的内嵌语句,然后执行③;否则,转至⑤。③求解表达式3。④转向②继续执行。⑤循环结束,执行for语句的下一条语句。例如:for(i=1;i=100;i++)s=s+i;的执行过程相当于以下语句:i=1;while(i=100){s=s+i;i++;}可以改写成while循环的形式:表达式1;while(表达式2){语句;表达式3;}【例5.6】用for语句语句实现引例。#includestdio.hmain(){inti,sum=0,score;floatavg;for(i=1;i=40;i++){scanf(%d,&score);/*输入第i位同学的成绩*/sum+=score;/*实现累加*/}printf(Thesumis%d\n,sum);avg=(float)sum/40;/*计算平均值*/printf(avg=%.2f\n,avg);}【例5.7】求1~100的累加和。#includestdio.hmain(){inti,sum=0;for(i=1;i=100;i++)sum+=i;printf(sum=%d\n,sum);}#includestdio.hmain(){intn,i;floatt=1.0;printf(inputn:);scanf(%d,&n);for(i=1;i=n;i++)t=t*i;printf(t=%10.0f\n,t);}【例5.8】求t=1*2*3*4*5……*n。#includestdio.hmain(){inti,n;floats=1;printf(inputn:);scanf(%d,&n);for(i=2;i=n;i++)s=s+1.0/i;printf(s=%f\n,s);}运行结果为:inputn:4↙s=2.083333【例5.9】求s=1+1/2+1/3+……1/n。5.5循环的嵌套一个循环体内又包含另一个完整的循环结构,称为循环嵌套。3种循环(while、do…while、for)可以互相嵌套。例如:下面几种形式都是合法的循环嵌套形式。(1)while(){…while(){…}}(2)while(){…do{…}while();…}(3)do{…do{…}While()}while();(4)for(;;){…while(){…}…}(5)for(;;){for(;;{…}}(6)do{…for(;;){…}}while();【例5.10】用一元纸币换一分、两分及五分的硬币,要求换到的硬币总数为50枚,问有多少种换法?每种换法中各种硬币分别是多少?#includestdio.hmain(){intx,y,z;printf(FIVE\tTWO\tONE\n);for(x=0;x=20;x++)for(y=0;y=50;y++){z=100-5*x-2*y;if(x+y+z==50)printf(%3d\t%3d\t%3d\n,x,y,z);}}【例5.11】编写程序,输出下列图形。#includestdio.hmain(){inti,j,k;for(i=1;i=5;i++){for(j=1;j=6-i;j++)printf();for(k=1;k=2*i-1;k++)printf(*);printf(\n);}}5.6break语句和continue语句5.6.1break语句break语句有两种用途,一是在switch中终止一个case对应的语句,二是在循环语句中越过常规循环条件的测试,立即强制终止循环。break语句一般格式为:break;功能:在循环中当满足特定条件时,使用break语句强行结束循环,转向执行循环语句的下一条语句。【例5.12】break语句应用。main(){intr;floatpi=3.14159,s;for(r=1;r=10;r++){s=pi*r*r;if(s100)break;printf(r=%d,s=%f\n,r,s);}}r=1,s=3.141590r=2,s=12.566360r=3,s=28.274311r=4,s=50.265442r=5,s=78.539749程序的作用是计算r=1到r=10时的圆的面积,直到面积大于100为止。从上面的循环可以看到:当s100时,执行break语句,提前结束循环,即不再继续执行其余的几次循环。运行结果为:2.continue语句一般格式为:continue;功能:结束本次循环,即跳过循环体中下面未执行的语句,继续进行下一次循环。【例5.13】将100~200之间的不能被3整除的数输出。#includestdio.hmain(){intn;for(n=100;n=200;n++){if(n%3==0)continue;printf(%d,n);}}5.7程序设计举例【例5.14】在屏幕上输出下三角九九乘法表。#includestdio.hmain(){inti,j;for(i=1;i=9;i++){for(j=1;j=i;j++)printf(%d*%d=%d,i,j,i*j);printf(\n);}}#includestdio.hmain(){inti,j,n=0;for(i=101;i=200;i+=2)/*外循环:为内循环提供一个整数i*/{for(j=2;j=i-1;j++)/*内循环:判断整数i是否是素数*/if(i%j==0)/*i不是素数*/break;/*强行结束内循环,执行下面的if语句*/if(j=i)/*整数i是素数:输出,计数器加1*/{printf(%4d,i);n++;}if(n%10==0)printf(\n);}}运行结果为:101103107109113127131137139149151157163167173179181191193197199【例5.15】输出100~200之间的全部素数。所谓素数i是指,除1和i之外,不能被2~(i-1)之间的任何整数整除。#includestdio.hmain(){longintf1=1,f2=1;/*定义并初始化数列的前2个数*/inti;/*定义并初始化循环控制变量i*/for(i=1;i=10;i++)/*1组2个,10组20个数*/{printf(%15ld%15ld,f1,f2);/*输出当前的2个数*/if(i%2==0)printf(\n);/*输出2次(4个数),换行*/f1+=f2;f2+=f1;/*计算下2个数*/}}【例5.16】求Fibonacci数列的前20个数。F1=1,F2=1,Fn=Fn-1+Fn-2(n=3),即从第3个数开始,每个数等于前2个数之和。15342331597185537725842138961041813211449876765运行结果为:#includemath.hmai

1 / 44
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功