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

上传人:本田雅阁 文档编号:3430962 上传时间:2019-08-24 格式: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 labe

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

3、 while (表达式) 语句 功能: 当表达式的值非0时,执行语句,该语句一般是复合语句,被称之为循环体.,例: 解问题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语句前应有为测试表达式中的循环控制变量赋初值的语句,以确保循环的正常开始; 循环体内应有改变循环控制变量的语句,以确保循环进行有限次后正常结束;

4、 如: int i=1; while (i=100) sum=sum+1; (死循环) while 循环的特点是先判断后执行,故循环有可能一次都不被执行; 如: 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 (表达式); 功能:

5、先执行语句(单个语句或复合语句,被称之为循环体),当表达式的值非0时, 重复执行该语句,直到表达式的值为0。 例: sum=1+2+3+N.(c604.c),#include #define N 100 main() 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!,程序

6、(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; 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;表达

7、式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/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); ,程序设

8、计的三种方法,枚举法 就是逐一列举出可能解的各个元素,并加以判断,直到求得所需要的解。常用在排列、组合、数据分类、信息检索、多解方程的求解上; 归纳法 是从大量的特殊性中总结出规律性或一般性的结论。在程序设计上主要表现为递归和迭代、数列和级数求和。 抽象法 自顶向下,逐步求精。,枚举问题,求1000 2000之间的素数 打印出水仙花数,所谓水仙花数是指一个3位数,其各位数的立方之和等于该数本身。如:153=1*1*1+5*5*5+3*3*3. 百钱买百鸡问题.大公鸡5钱一只,母鸡3钱一只,雏鸡一钱买3只,有几种买法,求出所有解。 两个乒乓球队进行比赛,各出三人甲队为A、B、C.乙队为X、Y、Z

9、。已经抽签决定了比赛名单。有人向队员打听比赛对阵情况,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=1000; i2000; i+) k=0; /*用于标识是否素数*/ m= sqrt(i); for (j=2; j= m; j+) if (i%j=0) k=1; break; if

10、(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) printf(“%4d”, m); ,#include void main() int i,j,k for (i=1;

11、 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=0;y34;y+) z=100-x-y; if (z%3!

12、=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 -YZ B - 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/

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

14、,例子:,例1. 用/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个数,这是一个古典数

15、学问题:一对兔子从它出生后第3个月起,每个月都生一对小兔子,小兔子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

16、; f2=f2+f1; ,示例3,f(x)=ax3+bx2+cx+d f1(x)=3ax2+2bx+c 需要定义的量: 系数a,b,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: “); s

17、canf(“%f,%f,%f,%f“, ,示例4,猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。到第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); ,输出格式处理,

18、输出以下图案 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备18001539号-1