C语言课件第5章PPT.ppt

上传人:sccc 文档编号:5385206 上传时间:2023-07-02 格式:PPT 页数:44 大小:377.01KB
返回 下载 相关 举报
C语言课件第5章PPT.ppt_第1页
第1页 / 共44页
C语言课件第5章PPT.ppt_第2页
第2页 / 共44页
C语言课件第5章PPT.ppt_第3页
第3页 / 共44页
C语言课件第5章PPT.ppt_第4页
第4页 / 共44页
C语言课件第5章PPT.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《C语言课件第5章PPT.ppt》由会员分享,可在线阅读,更多相关《C语言课件第5章PPT.ppt(44页珍藏版)》请在三一办公上搜索。

1、第5章 循环结构的语句及流程控制,问题1:假如全班41人,欲从键盘上输入每人的数学成绩,然后计算出平均成绩;问题2:编程计算n!.这些都是重复计算的问题,需要由循环结构来解决。C 提供了以下3种重复计算的结构:,n while(表达式)语句n do 语句 while(表达式)n for(表达式1;表达式2;表达式3)语句,循环结构的语句及流程控制,格式1:while(表达式)语句功能:当表达式的值非0时,执行语句,该语句一般是复合语句,被称之为循环体.,例1:解问题2,求 n!的值.需要定义的变量:mul-存放累乘积;i-计数;n-,程序:,#include void main()int i=

2、1,n;double mul=1;printf(“n Input n:”);scanf(“%d”,说明:,循环体可以用复合语句while语句前应有为测试表达式中的循环控制变量赋初值的语句,以确保循环的正常开始;循环体内应有改变循环控制变量的语句,以确保循环进行有限次后正常结束;如:i=1;while(i=100)sum=sum+1;(死循环)while 循环的特点是先判断后执行,故循环有可能一次都不被执行;如:i=3;while(i3)printf(“i=%dn”,i);,例2:求整数a和b的最小公倍数,算法流图如下:,程序如下:,void main()int a,b,i;scanf(“%d%

3、d”,void main()int a,b,i,m,n;scanf(“%d%d”,#include#include,循环结构的语句及流程控制,格式2:do 语句 while(表达式);功能:先执行语句,该语句一般是复合语句,被称之为循环体.当表达式的值非0时,继续执行该语句,直到表达式的值为0.例3:sum=1+2+3+100.(c604.c),#include void main()int i=1,sum=0;do sum=sum+i;i+;while(i=100);printf(n sum=%d,sum);,#include void main()int i=1,sum=0;do sum+

4、=i+;while(i=100);printf(n sum=%d,sum);,例子4,需要定义的变量:e-存放累加值;i-计数;n-存放计算阶 乘值.,计算:e1+1/1!+1/2!+.+1/100!,通常该类问题会给出一个计算误差,例如,可设定当某项的值小于10-7时停止计算。,#include void main()int i=1;double e=1.;double n=1.;do n=n*i;e=e+1./n;i=i+1;while(i=100);printf(n e=%f,e);,#include void main()int i=1;double t,e=1.,n=1.;e=1.,

5、n=1.;do n=n*i;/计算i的阶乘 t=1./n;e=e+t;i=i+1;/为计算下一项作准备 while(t=1e-7);printf(n e=%f,e);,循环结构,格式3:for(表达式1;表达式2;表达式3)语句也可理解为:for(循环变量初值;循环条件;循环变量增值)语句,N,Y,该语句的执行过程是:(1)执行for后面的表达式1;(2)执行表达式2,若表达式2的值为真,则执行for语句的内嵌语句(即循环体语句),然后执行第(3)步,若为假,则循环结束,执行第(5)步;(3)执行表达式3;(4)返回继续执行第(2)步;(5)循环结束,执行for语句的循环体下面的语句。,程序示

6、例,例:计算 sum=1+2+3+100,#include 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!,#include void main()int i;double e=1.;double n=1.;for(i=1;i=100;i+)n=n*i;e=e+1./n;printf(n e=%f,e);,综合例子:,用/41-1/3+1/5-1/7+近似公式计算的值直到最后一项1/n10-6,需要定义如下变量:t-计算存放各分 项值;n-计算各项分母

7、 的值;s-确定各项的符号;pi-存放求和的值.,参考程序,#include void main()int s;/*确定各项的符号*/float n,t,pi;/*n:分母;t:分项值;pi:和值.*/t=1.;pi=0.;n=1.;s=1;do pi=pi+s*t;n=n+2;s=-s;t=1./n;while(t1e-7);pi=pi*4;printf(n pi=%10.6f,pi);,求Fibonacci数列的前40个数,这是一个古典数学问题:一对兔子从它出生后第3个月起,每个月都生一对小兔子,小兔子3个月后又生一对小兔子,假设兔子都不死,求每个月的兔子对数。该数列为:1 1 2 3 5

8、 8 13 21 即从第3项开始,其该项是前两项之和。,需要定义的变量:i-计数;f1-计算前项值;f2-计算下项值.,参考程序,#include void main()int i;long int f1,f2;f1=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;,计算下列公式的和,要求最后一项小于10-5,通项公式:,#include void main()int p=1;/*说明符号位*/long n;float t,sum;t=1.0/3.0;

9、sum=1-1/3.0;for(n=3;t=1.0e-5;n+)t=1.0/(n*n+1);sum=sum+p*t;p=-p;printf(“n sum=%f n”,sum);,输入30个字符,分别统计其中数字、字母及其它字符的个数。,main()char c;int k;int n1=0,a1=0,u1=0;/*分别存放数字、字母及其它字符个数*/printf(“n Input 30 chars:”);for(k=1;k=A,求 s=1+(1+2)+(1+2+3)+,并输出其结果,#include void main()long s=0,sn=0;int k,n;printf(“n Inpu

10、t n=“);scanf(“%d”,百钱买百鸡问题,大公鸡5钱一只,母鸡3钱一只,雏鸡一钱买3只,有几种买法,求出所有解。,参考程序,#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!=0)continue;if(5*x+3*y+z/3=100)printf(n%8d%8d%8d,x,y,z);循环次数为20*34次,0 25 754 18 788 11 8112 4 84,输出以下图案,*,#include void main()int i,j;f

11、or(i=1;i0;i-)for(j=1;j=40-i;j+)printf(“”);for(j=1;j=2*i-1;j+)printf(“*”);printf(“n”);,输出九九乘法表,#include void main()int k,m;for(k=1;k=9;k+)for(m=1;m=k;k+)printf(“%d*%d=%-2d“,m,k,m*k);printf(“n”);,求1000 2000之间的素数,参考程序,#include#include void main()int i,j,k,m;printf(“10002000之间的素数:n”);for(i=1000;i2000;i+

12、)k=0;/*用于标识是否素数*/m=sqrt(i);for(j=2;j=m;j+)if(i%j=0)k=1;break;if(k=0)printf(%8d,i);,输入两个正整数,求它们的最大公约数。分析:求最大公约数可以用“辗转相除法”,方法如下:(1)比较两数,并使m大于n。(2)将m作被除数,n作除数,相除后余数为r。(3)将mn,nr;(4)若r=0,则m为最大公约数,结束循环。若r0,执行步骤步骤(2)和(3)根据此分析画出流程图,如图所示。,说明:求两个数的最小公倍数,只需将两数相乘除以最大公约数,即m1*n1/m。由于在求解过程中,m和n已经发生了变化,故可以将其保存在另外两个

13、变量m1和n1中,#include void main()int m,n,r,t;int m1,n1;printf(“请输入两个正整数:n”);scanf(“%d,%d”,求sn=a+aa+aaa+aaaaa+aaaaa,其中a是一个数字。例如:2+22+222+2222+22222(此时有5项),数字a和项数n由键盘输入。分析:需要定义如下变量:数字 a;项数 n;计数 count(1n);分项,#include void main()int n,count=1;long sn=0,tn=0,a;printf(n请输入a,n:);scanf(%ld,%d,#include void main

14、()int k;float s=0;for(k=1;k=100;k+)s=s+k;for(k=1;k=50;k+)s=s+k*k;for(k=1;k=10;k+)s=s+1.0/k;printf(“n sum=%fn”,s);,#include void main()int k;float s=0;for(k=1;k=100;k+)s=s+k;if(k=50)s=s+k*k;if(k=10)s=s+1.0/k;printf(“n sum=%fn”,s);,打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。例如,153是一个“水仙花数”,因为153=13+

15、53+33,参考程序,#include void main()int i,j,k,n;for(n=100;n1000;n+)i=n/100;j=n/10-i*10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(“%4d”,n);printf(“n”);,找出1000之内的完数.所谓完数即是它的因子之和等于该数。如:6=1+2+3。并按下列格式输出其因子:its factors are 1,2,3,#include void main()int m,n,s;for(m=2;m1000;m+)s=0;for(n=1;nm;n+)if(m%n=0)s=s+n;if(s=m

16、)printf(“n its factors are 1”);for(n=2;nm;n+)if(m%n=0)printf(“,%d”,n);,有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20项之和。分析:注意分子与分母的变化规律,可知后项分母为前项分子,后项分子为前项分子分母之和。,main()int n,t,number=20;float a=2.0,b=1.0,s=0;for(n=1;n=number;n+)s=s+a/b;t=a;a=a+b;b=t;printf(“总和=%9.6fn”,s);,一球从100米高度自由落下,每次落地后反弹回原高度的一

17、半,再落下。求在第10次落地时,共经过多少米?第10次反弹多高?#include void main()int i;float n=50,s=100;for(i=2;i=10;i+)s+=2*n;n/=2.0;printf(“n 共经过s=%f,第10次反弹高度 n=%fn”,s,n);,猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,发现只剩下一个桃子了。求第一天共摘多少个桃子。采取逆向思维的方法,从后往前推。分析:假设s为剩下的,则s+1为前一天的一半,而2(s

18、+1)为前一天的总个数。依次类推,10天前的桃子数即可算出.,#include void main()int s=1,i=9;for(;i=1;i-)s=(s+1)*2;printf(“s=%dn”,s);,用迭代法求,迭代公式:,精度要求:,#include void main()float a,x,x0;printf(“n Input a=”);scanf(“%f”,f(x)=2x3-4x2+3x-6f1(x)=6x2-8x+3需要定义的量:存放函数值 f,f1;近似根 x0,x1;关键3要素:初值、迭代公式、精度要求,用牛顿迭代法求方程 在1.5附近的实根。迭代公式:xk+1=xk-f(

19、xk)/f(xk)迭代到:|xk+1-xk|=10-5,说明:在计算过程中,要用x的新值x1替换其原值x0,再使用牛顿迭代公式由新的x0产生下一轮的x1。由于在进入循环后的第1条语句为x0=x1,故应将迭代初值赋给x1而非x0。,#include void main()float x0,x1=1.5,f,f1;do x0=x1;f=2*x0*x0*x0-4*x0*x0+3*x0-6;f1=6*x0*x0-8*x0+3;x1=x0-f/f1;while(fabs(x1-x0)=1.e-5);printf(n x=%10.7f,x1);,用二分法求,方程在(-10,10)之间的实根。,#include“math.h”void main()float a,b,c,f,f1;printf(“n 请输入两端点值a,b:”);scanf(“%f,%f”,printf(“n 在(a,b)中的实根=%fn”,c);,两个乒乓球队进行比赛,各出三人甲队为A、B、C.乙队为X、Y、Z三人.已经抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比.编程序找出三对赛手的名单.,#include void main()char i,j,k;for(i=X;i=Z;i+)for(j=X;j=Z;j+)if(i!=j)for(k=X;k=Z;k+)if(i!=k,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号