第5章循环结构的语句及流程.ppt

上传人:sccc 文档编号:5951255 上传时间:2023-09-07 格式:PPT 页数:36 大小:752.54KB
返回 下载 相关 举报
第5章循环结构的语句及流程.ppt_第1页
第1页 / 共36页
第5章循环结构的语句及流程.ppt_第2页
第2页 / 共36页
第5章循环结构的语句及流程.ppt_第3页
第3页 / 共36页
第5章循环结构的语句及流程.ppt_第4页
第4页 / 共36页
第5章循环结构的语句及流程.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《第5章循环结构的语句及流程.ppt》由会员分享,可在线阅读,更多相关《第5章循环结构的语句及流程.ppt(36页珍藏版)》请在三一办公上搜索。

1、,布置作业,书面练习:P113P114习题 准备上机题目:实验报告上:实验五,实验六 要求画出程序流图。上机实验:实现实验五、实验六上交作业下机时班长收齐程序流图上交。,程序设计方法,第5章 循环结构的程序设计,问题1:假如全班41人,欲从键盘上输入每人的数学成绩,然后计算出平均成绩;问题2:编程计算n!.这些都是重复计算的问题,需要由循环结构来解决。C 提供了以下4种重复计算的结构:,goto 标号 while(表达式)语句 do 语句 while(表达式)for(表达式1;表达式2;表达式3)语句,goto语句及用goto构成循环,格式1:goto label;其中:label是语句标号,

2、它命名的规则同变量名;功能:使程序无条件地转向标号为label的语句去执行;可以用 if goto 语句构成循环.如:解上述问题 1:,#include#define N 41main()/*c501.c*/int i=1;float math,avg=0.;loop:printf(“输入数学成绩(%d):“,i);scanf(“%f”,程序实现,说明:1)标号不必进行类型说明;2)程序中的任何一个语句均可带上标号,但标号必须以冒号结束;3)不提倡使用goto语句。,循环体,循环结构的语句及流程控制,格式2:while(表达式)语句功能:当表达式的值非0时,执行语句,该语句一般是复合语句,被称

3、之为循环体.,例:解问题2,求 n!的值.需要定义的变量:mul-存放累乘积;i-计数;n-,程序:c502.c,#include main()int i=1,n;long mul=1;printf(“n Input n:”);scanf(“%d”,mul*=i+;,说明:,循环体可以是单个语句或复合语句while语句前应有为测试表达式中的循环控制变量赋初值的语句,以确保循环的正常开始;循环体内应有改变循环控制变量的语句,以确保循环进行有限次后正常结束;如:int i=1;while(i=100)sum=sum+1;(死循环)while 循环的特点是先判断后执行,故循环有可能一次都不被执行;如

4、:int i=3;while(i3)printf(“i=%dn”,i);,例2:求整数a和b的最小公倍数,算法流图如下:,程序如下:,C503.c c503_1.c,#include main()int a,b,i,m,n;scanf(“%d%d”,#include main()int a,b,i;scanf(“%d%d”,循环结构的语句及流程控制,格式3:do 语句 while(表达式);功能:先执行语句(单个语句或复合语句,被称之为循环体),当表达式的值非0时,重复执行该语句,直到表达式的值为0。例:sum=1+2+3+N.(c604.c),#include#define N 100mai

5、n()int i=1,sum=0;do sum=sum+i;i+;while(i=N);printf(n sum=%d,sum);,#include main()int i=1,sum=0,N;scanf(“%d”,例子,需要定义的变量:e-存放累加值;i-计数;n-存放计算阶 乘值.,计算:e1+1/1!+1/2!+.+1/100!,程序(c505.c),#include void main()int i=1;double e,n;e=n=1.0;do n=n*i;e=e+1./n;while(+i=100);printf(n e=%f,e);,#include main()int i=1;

6、double t,e=1.0;int n=1;do n=n*i+;t=1./n;e=e+t;while(t=1e-7);printf(n e=%f,e);,循环结构,for 循环比较灵活,既可用于确定次数的循环,也可用于不确定次数的循环其执行流程描述如下:,格式4:for(表达式1;表达式2;表达式3)语句常用形式:for(循环变量初值;循环条件;循环变量增值)语句,程序示例,例:计算 sum=1+2+3+100(c506.c),void main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(n sum=%d,sum);,例:计算:e1+1/1!+1

7、/2!+.+1/100!(c507.c),void main()int i;double e=1.0,n=1.0;for(i=1;i=100;i+)n=n*i;e=e+1.0/n;printf(n e=%f,e);,程序设计的三种方法,枚举法 就是逐一列举出可能解的各个元素,并加以判断,直到求得所需要的解。常用在排列、组合、数据分类、信息检索、多解方程的求解上;归纳法 是从大量的特殊性中总结出规律性或一般性的结论。在程序设计上主要表现为递归和迭代、数列和级数求和。抽象法 自顶向下,逐步求精。,枚举问题,求1000 2000之间的素数打印出水仙花数,所谓水仙花数是指一个3位数,其各位数的立方之和

8、等于该数本身。如:153=1*1*1+5*5*5+3*3*3.百钱买百鸡问题.大公鸡5钱一只,母鸡3钱一只,雏鸡一钱买3只,有几种买法,求出所有解。两个乒乓球队进行比赛,各出三人甲队为A、B、C.乙队为X、Y、Z。已经抽签决定了比赛名单。有人向队员打听比赛对阵情况,A说他不和X比,C说他不和X、Z比。编程序找出三对赛手的名单.,例1求1000 2000之间的素数,需要的变量说明:i:10002000;j:2 i k:0,1 0-是素数 1-不是素数,参考程序 c510.c,#include main()int i,j,k,m;printf(“10002000之间的素数:n”);for(i=10

9、00;i2000;i+)k=0;/*用于标识是否素数*/m=sqrt(i);for(j=2;j=m;j+)if(i%j=0)k=1;break;if(k=0)printf(%8d,i);,例2.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。例如,153是一个“水仙花数”,因为153=13+53+33,参考程序 c514.c,#include void main()int i,j,k,m;for(m=100;m1000;m+)i=m/100;j=m/10-i*10;/*m%100/10*/k=m%10;if(m=i*i*i+j*j*j+k*k*k)pr

10、intf(“%4d”,m);,#include void main()int i,j,k for(i=1;i=9;i+)for(j=0;j=9;j+)for(k=0;k=9;k+)m=i*i*i+j*j*j+k*k*k;n=i*100+j*10+k if(m=n)printf(“%4d”,n);,例3百钱买百鸡问题,大公鸡5钱一只,母鸡3钱一只,雏鸡一钱买3只,有几种买法,求出所有解。设:x 为大公鸡数;y为母鸡数;z为雏鸡数。,参考程序 c511.c,#include void main()int x,y,z;printf(“n 大公鸡 母鸡 雏鸡);for(x=0;x20;x+)for(y

11、=0;y34;y+)z=100-x-y;if(z%3!=0)continue;if(5*x+3*y+z/3=100)printf(n%8d%8d%8d,x,y,z);,示例4,两个乒乓球队进行比赛,各出三人甲队为A、B、C.乙队为X、Y、Z三人.已经抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比.编程序找出三对赛手的名单.,A-YZB-XZ C-Y,参考程序 c615.c,#include void main()char A,B,C=Y;for(A=Y;A=Z;A+)for(B=X;B=Z;B+)if(A!=B)if(A!=C,归纳问题,用/41-1/3+1/5

12、-1/7+近似公式计算的值直到最后一项1/n10-6Fibonacci数列这是一个古典数学问题:一对兔子从它出生后第3个月起,每个月都生一对小兔子,小兔子3个月后又生一对小兔子,假设兔子都不死,求每个月的兔子对数。该数列为:1 1 2 3 5 8 13 21 即从第3项开始,其该项是前两项之和。用牛顿迭代法求ax3+bx2+cx+d=0 x在1附近的实根。猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,发现只剩下一个桃子了。求第一天共摘多少个桃子。,例子:,例1.用

13、/41-1/3+1/5-1/7+近似公式计算的值直到最后一项10-6,需要定义如下变量:n-项计数;s-确定各项的符号;pi-存放求和的值.,/41-1/3+1/5-1/7+,#include void main()int s=1;/*确定各项的符号*/float n,pi=0.;/*n:项计数 pi:和值.*/for(n=0;1./(2*n+1)1e-6;n+)pi=pi+s*1./(2*n+1);s=-s;pi=pi*4;printf(n pi=%10.6f,pi);,例2求Fibonacci数列的前40个数,这是一个古典数学问题:一对兔子从它出生后第3个月起,每个月都生一对小兔子,小兔子

14、3个月后又生一对小兔子,假设兔子都不死,求每个月的兔子对数。该数列为:1 1 2 3 5 8 13 21 即从第3项开始,其该项是前两项之和。,需要定义的变量:i-计数;f1-计算前项值;f2-计算下项值.,参考程序(c509.c),#include void main()int i;long 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;,示例3,f(x)=ax3+bx2+cx+df1(x)=3ax2+2bx+c需要定义的量:系数a,b,

15、c,d;存放函数值 f,f1;近似根 xk,xk1;关键3要素:初值、迭代公式、精度要求,例3 用牛顿迭代法求ax3+bx2+cx+d=0 x在1附近的实根。迭代公式:xk+1=xk-f(xk)/f(xk)迭代到:|xk+1-xk|=10-5,参考程序(c512.c),#include#include void main()float a,b,c,d,xk=1,xk1,f,f1;printf(n input a,b,c,d:);scanf(%f,%f,%f,%f,示例4,猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个,以后每天早上

16、都吃了前一天剩下的一半零一个。到第10天早上再想吃时,发现只剩下一个桃子了。求第一天共摘多少个桃子。分析:假设s为剩下的,则s+1为前一天的一半,而2(s+1)为前一天的总个数。依次类推,10天前的桃子数即可算出.,#include void main()/*c513.c*/int s=1,i=9;for(;i=1;i-)s=(s+1)*2;printf(“s=%dn”,s);,输出格式处理,输出以下图案 c616.c,*,参考程序,#include void main()int i,j;for(i=1;i0;i-)for(j=1;j=40-i;j+)printf(“”);for(j=1;j=2*i-1;j+)printf(“*”);printf(“n”);,*,本章小结,本章主要介绍了几种循环结构的形式及其一般应用、程序设计的基本方法。应该注意:while(表达式)语句do 语句 while(表达式);for(表达式1;表达式2;表达式3)语句语句即是循环体,可以是单个语句或多个语句组成的复合语句(以 括住);也可以自身嵌套的循环语句或另一结构的循环语句,称之为多重循环。各表达式的作用。break、continue语句在循环结构中的作用及应用程序设计的三种基本方法及应用,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号