C语言复习第四章.3_第1页
C语言复习第四章.3_第2页
C语言复习第四章.3_第3页
C语言复习第四章.3_第4页
C语言复习第四章.3_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计第4章循环结构程序设计,【例题】输入一个正整数n,把它分解成1及其质因子相乘的形式。如:19=11936=122331024=12222222222分析:本题即找出所有能整除n的数,可以尝试分别用2到n的整数去除n,如某时刻的值为i,能除尽n则取出此时的数i,再把n除以i的商作为新的n,但要注意下次尝试的时候还应该用此时的i去除n(因为如2是8的一个因子,同时也是8/2=4的一个因子)。如n不能被i整除则用i+1去除n看能否整除,如此反复直到i的值为n为止。,程序如下:,main()longi,n;printf(Inputn:);scanf(%ld,if(n%i=0)printf(*%ld,i);n/=i;i-;,【例】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总对数为多少?(40个月后)分析:兔子对数的规律为数列1,1,2,3,5,8,13,21,即从第三个数开始其值都为前两个数之和。main()longm1=1,m2=1;inti;for(i=0;i=b),令r为所得余数(0rb)若r=0,算法结束;b即为答案。2.互换:置ab,br,并返回第一步。,main()intm=0,n=0,r,t,a,b;scanf(“%d%d”,/*/*/*实现大数在前小数在后*/*/*/*实现辗转相除算法*/,if(a=2):);scanf(%d,/*/*/,k=sqrt(n);for(i=2;i1)printf(%disaprimenumber.,n);elseprintf(%disnotaprimenumber.,n);getch();,continue语句,【例】分析如下程序,给出程序执行结果。main()inti;for(i=0;i10;i+)if(i%2=0)continue;printf(%d,i);getch();,【例】随机输入多个字符,直到输入回车结束,统计键入空格字符的次数。#includemain()intcount=0;charch;printf(Inputchars:);do/*/*/while(/*/*/);printf(Thenumberofspacesis%d.n,count);getch();,ch=getchar();if(ch!=)continue;count+;,ch!=n,1、以下程序段运行后变量a的值为()。inti=1,a=0;for(;i3;i+)continue;a+=i;A.6B.3C.0D.5,课堂小测试,2、以下程序段运行后变量n的值为()。inti=1,n=1;for(;i3;i+)continue;n=n+i;A.4B.3C.2D.1,课堂小测试,3、以下程序的运行结果是()。voidmain()ints=0,i=0;while(i8)i+;if(i%2=0)continue;s+=i;printf(%dn,s);A.36B.7C.16D.12,课堂小测试,4、以下程序的运行结果是()。voidmain()intsum=0,item=0;while(item5)item+;if(item=2)continue;sum+=item;printf(%dn,sum);A.10B.13C.15D.1,课堂小测试,4.5循环结构的嵌套,一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。三种循环(while循环、do-while循环和for循环)可以互相嵌套。正常情况下:应先执行内层的循环体操作,然后是外层循环。例如:对于双重循环,内层循环被执行的次数应为:内层次数外层次数。,4.5循环结构的嵌套,4.5循环结构的嵌套,4.5循环结构的嵌套,4.5循环结构的嵌套,求该程序的运行结果s是多少?循环多少次?main()inti,j,s=0;for(i=1;i=3;i+)for(j=1;j=2;j+)s=s+i+j;printf(“%d”,s);,【例】编程实现在屏幕上输出九九乘法口诀。1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81,分析:分行与列考虑,可用i控制行,j控制列,共9行,且每行的等式的个数与所在行的序数相同,即第i行就有i列个等式。,【例】编程实现在屏幕上输出九九乘法口诀。main()inti,j;for(/*/*/)for(/*/*/)printf(%d*%d=%dt,j,i,i*j);printf(n);getch();,i=1;i=9;i+,j=1;j=i;j+,【例】输出1000内所有的素数,要求每行输出15个数main()inti,j,k,n=0;for(i=2;i=1000;i+)k=sqrt(i);for(j=2;j=k;j+)if(/*/*/)break;if(/*/*/)printf(%5d,i);n+;if(/*/*/)printf(n);getch();,n%15=0,j=k+1,i%j=0,【例4.16】打印出如下图案(菱形),main()inti,j;for(i=0;i=3;i+)for(/*/*/)printf();for(/*/*/)printf(*);printf(n);for(i=0;i=2;i+)for(/*/*/)printf();for(/*/*/)printf(*);printf(n);getch();,*,j=0;j3-i;j+,j=0;j2*i+1;j+,j=0;ji+1;j+,j=0;j5-2*i;j+,【例4.23】求解百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马数可分别为多少?有多少种解决方案?main()intlarge,middle,small;for(/*/*/)for(/*/*/)small=2*(100-3*large-2*middle);if(/*/*/)printf(large=%-2dmiddle=%-2dsmall=%-2dn,large,middle,small);getch();,large=0;large=33;large+,middle=0;middle=1;i-)for(j=i;j=3;j+)k+=i*j;printf(%dn,k);A.19B.29C.6D.25,课堂小测试,以下程序段运行后,循环体中的“count+=2;”语句运行的次数为()。inti,j,count=0;for(i=1;i=4;i+)for(j=1;j=i;j+)count+=2;printf(%d,count);A.8次B.10次C.16次D.20次,课堂小测试,下列程序段运行后m的值为()。inti,j,m=0;for(i=1;i=3;i+)for(j=2;j=4;j+)m=m+i+j;A.45B.30C.33D.27,课堂小测试,4.6goto语句,goto语句是一种跳转语句,可以用于程序的任何地方。goto语句的一般格式为:goto语句标号;其中语句标号就是一个合法的标识符。能用goto语句的前提是在同一个函数中某个语句前存在标号,语句标号的作用在于标识出其后语句的位置,语句标号的使用方法是在合法标识符后面加上一个冒号“:”。如:label:i=j+2;中的label1就是一个语句标号。这时可用goto语句来跳转到label处。方法如下:gotolabel;此时程序遇到goto语句之后会无条件的跳到label所标识的语句(i=j+2)处开始执行。,【例】用goto语句实现1+2+3+100结果的输出main()inti=0,s=0;label:i+;s+=i;if(i100)gotolabel;printf(1+2+3+100=%d,s);getch();,【例】分析如下程序总结goto语句的作用。main()inti=0,j;while(1)while(1)while(1)while(1)printf(test);gotolabel;label:printf(nexit);getch();,【例4.20】有一分数序列:求出这个数列的前20项之和。main()inti;floata=2.0,b=1.0,t,sum=0;for(/*/*/)/*/*/printf(sum=%f,sum);getch();,sum+=a/b;t=a;a=a+b;b=t;,i=0;i20;i+,【例4.21】求e的值。main()inti,j;doublee=1.0,k=1;for(/*/*/)/*/*/printf(e=%1.10f,e);getch();,k*=i;e+=1.0/k;,i=1;i=20;i+,【例4.22】输出所有三位数的“水仙花数”,所谓“水仙花数”是指其各个位上的数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=135333。main()inti,x,y,z;for(i=100;i=999;i+)z=i%10;y=i/10%10;x=i/100;if(x*x*x+y*y*y+z*z*z=i)printf(%d,i);getch();,(2)求出满足以下条件的最大的n。12+22+32+n2100。(结果:n=6)main()intn=0,s=0;while(/*/*/)/*/*/n-;printf(n=%d,n);getch();,s=100,n+;s+=n*n;,(3)中国古代数学家张丘建提出的“百鸡问题”:一只公鸡值五个钱,一只母鸡值三个钱,三个小鸡值一个钱。现在有100个钱,要买100只鸡,是否可以?若可以,给出一个解,要求三种鸡都有。请写出求解该问题的程序。main()intcock,hen,chicken;for(/*/*/)for(/*/*/)chicken=300-9*hen-15*cock;if(/*/*/)printf(cock=%d,hen=%d,chicken=%dn,cock,hen,chicken);getch();,cock=0;cock=20;cock+,hen=1;hen0,(5)整元换零钱问题。把1元兑换成1分,2分,5分的硬币,共有多少种不同换法,请编写求解此问题的程序main()intone,two,five;for(/*/*/)for(/*/*/)for(/*/*/)if(/*/*/)printf(one=%d,two=%d,five=%dn,one,two,five);getch();,one=0;one=100;one+,two=0;two=50;two+,five=0;five=20;five+,one+two*2+five*5=100,(7)求s=a+aa+aaa+aaaa+.+aa.a的值,其中a是一个数字,例如:2+22+222+2222+22222(此时n=5)。n和a的值由键盘输入,请编程实现以上求和。main()intn,a,i;longs=0,k=0;printf(Inputa:);scanf(%d,k=10*k+a;s+=k;,(8)编程据如下算求出M,N的值。MNNM3627,main()intm,n,k;for(/*/*/)for(/*/*/)if(/*/*/)printf(m=%d,n=%dn,m,n);getch();,m=1;m=9;m+,n=1;n=9;n+,(m*10+n)*(n*10+m)=3627,以下程序的功能是输出如下图形:,main()inti,j;clrscr();for(i=1;i=5;i+)for(j=1;ji;j+)printf();for(j=1;j=/*/*/;j+)printf(*);printf(n);for(i=1;i=4;i+)for(j=1;j=/*/*/;j+)printf();for(j=1;j4;i-,i-)k+=2A.3B.4C.1D.2,课堂小测试,2.有以下程序:main()intc;while(c=getchar()!=n)switch(c-2)case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;printf(n);当输入:247,程序的输出结果是()。A.689B.6689C.66778D.66887,3.以下程序段的运行结果是()。intx=3;doprintf(%3d,x-=2);wh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论