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

下载本文档

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

文档简介

《C语言程序设计》

第4章循环结构程序设计1精选课件【例题】输入一个正整数n,把它分解成1及其质因子相乘的形式。如:19=1×1936=1×2×2×3×31024=1×2×2×2×2×2×2×2×2×2×2分析:本题即找出所有能整除n的数,可以尝试分别用2到n的整数去除n,如某时刻的值为i,能除尽n则取出此时的数i,再把n除以i的商作为新的n,但要注意下次尝试的时候还应该用此时的i去除n(因为如2是8的一个因子,同时也是8/2=4的一个因子)。如n不能被i整除则用i+1去除n看能否整除,如此反复直到i的值为n为止。2精选课件程序如下:main(){longi,n;printf("Inputn:");scanf("%ld",&n);printf("%ld=1",n);for(i=2;i<=n;i++)/**//**/getch();}{if(n%i==0){printf("*%ld",i);n/=i;i--;}}3精选课件【例】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总对数为多少?(40个月后)分析:兔子对数的规律为数列1,1,2,3,5,8,13,21……,即从第三个数开始其值都为前两个数之和。

main(){longm1=1,m2=1;inti;for(i=0;i<20;i++){if(i%2==0)/*目的每输出2组数后加一个回车符*/printf("\n");printf("%-12ld%-12ld",m1,m2);/**//**/}getch();}m1=m1+m2;m2=m1+m2;4精选课件【例】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。最大公约数算法也称“辗转相除法”,又称欧几里得算法”,其算法如下:

1.a÷b(a>=b),令r为所得余数(0≤r<b)若r=0,算法结束;b即为答案。

2.互换:置a←b,b←r,并返回第一步。5精选课件main(){intm=0,n=0,r,t,a,b;scanf(“%d%d”,&m,&n);a=m;b=n;/**//**//*实现大数在前小数在后*//**//**//*实现辗转相除算法*/

if(a<b){t=a;a=b;b=t;}r=a%b;while(r){a=b;b=r;r=a%b;}printf("%d&%dgreatestcommondivisoris%d",m,n,b);printf("%d&%dlowestcommonmultipleis%ld.",m,n,(long)m*n/b);getch();6精选课件【例】从键盘任意输入一个正数n,判断其是不是素数(因子只有1及其本身,其值大于1的自然数)。#include<math.h>main(){intn,i,k;clrscr();printf("Inputn(n>=2):");scanf("%d",&n);/**//**/}k=sqrt(n);for(i=2;i<=k;i++){if(n%i==0)break;}if(i==k+1&&n>1)printf("%disaprimenumber.",n);elseprintf("%disnotaprimenumber.",n);getch();7精选课件continue语句【例】分析如下程序,给出程序执行结果。main(){inti;for(i=0;i<10;i++){if(i%2==0)continue;printf("%d",i);}getch();}8精选课件【例】随机输入多个字符,直到输入回车结束,统计键入空格字符的次数。#include<stdio.h>main(){intcount=0;charch;printf("Inputchars:");do{/**/

/**/}while(/**//**/);printf("Thenumberofspacesis%d.\n",count);getch();}ch=getchar();if(ch!='')continue;count++;}ch!='\n'9精选课件1、以下程序段运行后变量a的值为(

)。

inti=1,a=0;for(;i<3;i++) {continue;a+=i;}A.6 B.3 C.0 D.5课堂小测试10精选课件2、以下程序段运行后变量n的值为(

)。inti=1,n=1;for(;i<3;i++)

{continue;n=n+i;}A.4 B.3 C.2 D.1课堂小测试11精选课件3、以下程序的运行结果是(

)。

voidmain(){ints=0,i=0;while(i<8){i++;if(i%2==0)continue;

s+=i;}printf("%d\n",s);}A.36 B.7 C.16 D.12课堂小测试12精选课件4、以下程序的运行结果是(

)。voidmain(

){intsum=0,item=0;while(item<5){item++;if(item==2)

continue;sum+=item;}printf("%d\n",sum);}A.10 B.13 C.15 D.1课堂小测试13精选课件4.5循环结构的嵌套一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。三种循环(while循环、do-while循环和for循环)可以互相嵌套。正常情况下:应先执行内层的循环体操作,然后是外层循环。例如:对于双重循环,内层循环被执行的次数应为:内层次数×外层次数。14精选课件4.5循环结构的嵌套1:for(;;){……for(;;){……}}2:for(;;){……while(){……}}3:for(;;){……do{……}while()}15精选课件4.5循环结构的嵌套4:while(){……while(){……}}5:while(){……for(;;){……}}6:while(){……do{……}while()}16精选课件4.5循环结构的嵌套7:do{……do{……}while()}while()8:do{……for(;;){……}}while()9:do{……while(){……}}while()17精选课件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);}18精选课件【例】编程实现在屏幕上输出九九乘法口诀。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列个等式。19精选课件【例】编程实现在屏幕上输出九九乘法口诀。main(){inti,j;for(/**//**/){for(/**//**/){printf("%d*%d=%d\t",j,i,i*j);}printf("\n");}getch();}i=1;i<=9;i++j=1;j<=i;j++20精选课件【例】输出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==0j==k+1i%j==021精选课件【例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;j<3-i;j++j=0;j<2*i+1;j++j=0;j<i+1;j++j=0;j<5-2*i;j++22精选课件【例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=%-2d\n",large,middle,small);}getch();}

large=0;large<=33;large++middle=0;middle<=50;middle++large+middle+small==10023精选课件

以下程序的运行结果是(

)。

voidmain(){inti,j,k=0;

for(i=3;i>=1;i--){for(j=i;j<=3;j++) k+=i*j;}printf("%d\n",k);}A.19 B.29 C.6 D.25课堂小测试24精选课件以下程序段运行后,循环体中的“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次课堂小测试25精选课件下列程序段运行后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课堂小测试26精选课件4.6

goto语句goto语句是一种跳转语句,可以用于程序的任何地方。goto语句的一般格式为:goto语句标号;其中语句标号就是一个合法的标识符。能用goto语句的前提是在同一个函数中某个语句前存在标号,语句标号的作用在于标识出其后语句的位置,语句标号的使用方法是在合法标识符后面加上一个冒号“:”。如:label:i=j+2;中的label1就是一个语句标号。这时可用goto语句来跳转到label处。方法如下:

gotolabel;此时程序遇到goto语句之后会无条件的跳到label所标识的语句(i=j+2)处开始执行。27精选课件【例】用goto语句实现1+2+3+…+100结果的输出

main(){inti=0,s=0;label:i++;s+=i;if(i<100)gotolabel;printf("1+2+3+…+100=%d",s);getch();}

28精选课件【例】分析如下程序总结goto语句的作用。main(){inti=0,j;while(1){while(1){while(1){while(1){printf("test");gotolabel;}}}}label:printf("\nexit");getch();}

29精选课件【例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;i<20;i++30精选课件【例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++31精选课件【例4.22】输出所有三位数的“水仙花数”,所谓“水仙花数”是指其各个位上的数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。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();}

32精选课件(2)求出满足以下条件的最大的n。12+22+32……+n2≤100。(结果:n=6)main(){intn=0,s=0;while(/**//**/){/**//**/}n--;printf("n=%d",n);getch();}

s<=100n++;s+=n*n;33精选课件(3)中国古代数学家张丘建提出的“百鸡问题”:一只公鸡值五个钱,一只母鸡值三个钱,三个小鸡值一个钱。现在有100个钱,要买100只鸡,是否可以?若可以,给出一个解,要求三种鸡都有。请写出求解该问题的程序。main(){intcock,hen,chicken;for(/**//**/)for(/**//**/){chicken=300-9*hen-15*cock;if(/**//**/)printf("cock=%d,hen=%d,chicken=%d\n",cock,hen,chicken);}getch();}

cock=0;cock<=20;cock++hen=1;hen<=33;hen++cock+hen+chicken==100&&chicken>034精选课件(5)整元换零钱问题。把1元兑换成1分,2分,5分的硬币,共有多少种不同换法,请编写求解此问题的程序

main(){intone,two,five;for(/**/

/**/)

for(/**//**/)for(/**/

/**/)if(/**//**/)printf("one=%d,two=%d,five=%d\n",one,two,five);getch();}

one=0;one<=100;one++two=0;two<=50;two++five=0;five<=20;five++one+two*2+five*5==10035精选课件(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",&a);printf("Inputn:");scanf("%d",&n);for(i=1;i<=n;i++) { /**//**/} printf("%d+%d%d+%d%d+...=%ld",a,a,a,a,a,s);

getch();}

k=10*k+a;s+=k;36精选课件(8)编程据如下算求出M,N的值。

MN×NM 3627

main(){intm,n,k;for(/**//**/)for(/**/

/**/)if(/**/

/**/)

printf("m=%d,n=%d\n",m,n);getch();}m=1;m<=9;m++n=1;n<=9;n++(m*10+n)*(n*10+m)==362737精选课件以下程序的功能是输出如下图形:

main(){inti,j;clrscr();for(i=1;i<=5;i++){for(j=1;j<i;j++)printf("");for(j=1;j<=/**/

/**/;j++)printf("*");printf("\n");}for(i=1;i<=4;i++){for(j=1;j<=/**//**/;j++)p

温馨提示

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

评论

0/150

提交评论