您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第四章(综合举例)C语言PPT
1综合举例第四章循环结构程序设计目的:结合前面所学内容,掌握用顺序结构、选择结构、循环结构编写程序,解决实际问题。难点:循环的嵌套。4.3循环结构程序设计2【例4-12】百钱买百鸡。我国古代的《张丘建算经》中有这样一道著名的百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡瓮、母、雏个几何?其意为:公鸡5元/只,母鸡3元/只,小鸡1元/3只。用100元钱买100只鸡,问公鸡、母鸡、小鸡各能买多少只?运行结果:x=4,y=18,z=78x=8,y=11,z=81x=12,y=4,z=843【例4-13】棋盘放麦子(市场倍增原理)这是印度的一个古老传说,舍罕王打算重赏象棋发明人、宰相西萨·班·达依尔。这位聪明的大臣的胃口看来并不大,他跪在国王面前说:‘陛下,请您在这张棋盘的第一个小格内,赏给我一粒麦子,在第二个小格内给两粒,第三格内给四粒,照这样下去,每一小格内都比前一小格加一倍。陛下,把这样摆满棋盘上所有64格的麦粒,都赏给您的仆人吧!’‘爱卿,你所求的并不多啊。”国王说道,心里为自己对这样一件奇妙的发明赏赐的许诺不致破费太多而暗喜。“你当然会如愿以偿的,”国王命令如数付给达依尔。计数麦粒的工作开始了,第一格内放1粒,第二格内放2粒,第三格内放4粒,……还没有到第二十格,一袋麦子已经空了。一袋又一袋的麦子被扛到国王面前来。但是,麦粒数一格接一格飞快增长着,国王很快就看出,即便拿全印度的粮食,也兑现不了他对达依尔的诺言。4#includestdio.hmain(){doublex=1,sum=0;inti;for(i=1;i=64;i++){sum=sum+x;x=x*2;}printf(“sum=%e\n”,sum);}运行结果:1.84467e+19(粒)5后记:这些麦子究竟有多少?打个比方,如果造一个仓库来放这些麦子,仓库高4公尺,宽10公尺,那么仓库的长度就等于地球到太阳的距离的两倍。而要生产这么多的麦子,全世界要两千年。尽管印度舍罕王非常富有,但要这样多的麦子他是怎么也拿不出来的。这么一来,舍罕王就欠了宰相好大一笔债。要么是忍受达依尔没完没了的讨债,要么是干脆砍掉他的脑袋。结果究竟如何,可惜史书上没有记载。6【例4-14】输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。#includestdio.hmain(){charc;intletter=0,space=0,digit=0,other=0;printf(“请输入一行字符:\n”);while((c=getchar())!=‘\n’){if(c=‘a’&&c=‘z’||c=‘A’&&c=‘Z’)letter++;elseif(c==‘’)space++;elseif(c=‘0’&&c=‘9’)digit++;elseother++;}printf(letter=%d,space=%d,digit=%d,other=%d\n,letter,space,digit,other);}关键:循环条件的设置7【例4-15】求Sn=a+aa+aaa+…+aa…a的值。main(){inta,n,i=1,sn=0,tn=0;printf(“a,n=:”);scanf(“%d,%d”,&a,&b);while(i=n){tn=tn+a;sn=sn+tn;a=a*10;++i;}printf(“a+aa+aaa+…+aa…a=%d\n”,sn);}关键:求tn项!8【例4-16】打印出所有的“水仙花数”。main(){inti,j,k,n;printf(“水仙花数是:”);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”);}关键:取3个数!取数方法自行确定个位、十位、百位的其它取法:b=x/100;s=x%100/10;g=x%10;运行结果:1533703714079【例4-17】一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程找出1000以内的所有“完数”,并按下面格式输出其因子:6itsfactorsare1,2,3,运行结果:10main(){intm,s,i;for(m=2;m1000;m++){s=0;for(i=1;im;i++)if((m%i)==0)s=s+i;if(s==m){printf(“%ditsfactorsare”,m);for(i=1;im;i++)if(m%i==0)printf(“%d,”,i);printf(“\n”);}}}找因子判断是否完数输出因子11【例4-18】一球从100m高度自由落下,每次落地后反跳回原高度的一半;再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?main(){floats=100,h=s/2;intn;for(n=2;n=10;n++){s=s+2*h;h=h/2;}printf(“第10次落地时,共经过%fm.\n”,s);printf(“第10次反弹%fm.\n”,h);}100M50M25M…12【例4-19】猴子吃桃。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想再吃时,就只剩一个桃子了。求第一天共摘多少桃子?思路:设最后一天剩余的桃子数为X2,前一天剩余的桃子数为X1,则:X1=(X2+1)*213main(){intday=9,x1,x2=1;while(day0){x1=(x2+1)*2;x2=x1;day--;}printf(“total=%d\n”,x1);}或:main(){inti,x=1;for(i=1;i10;i++)//i控制天数x=2*(x+1);printf(Peachnumbers=%d\n,x);}读入mk=mi=2当i=km被i整除真假用break结束循环i=i+1i=k+1真假输出:m是素数输出:m不是素数【例4-20】判断m是否素数(思路)素数是指除了1和它本身外没有其他因子的大于1的整数。数学上已经证明,要判断整数m是不是素数,只需判断m是否能被2、3、4……中的某一个数整除即可。在程序中如i=k+1为真,则说明不存在2~之间的因子,所以此整数是素数。mmt=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi规律:分子:1,-1,1,-1…分母:1,3,5,7,...【例4-21】运行结果:pi=3.14159471513114用上述公式求的近似值,直到最后一项的绝对值小于10-6为止。
本文标题:第四章(综合举例)C语言PPT
链接地址:https://www.777doc.com/doc-4348641 .html