资源预览内容
第1页 / 共43页
第2页 / 共43页
第3页 / 共43页
第4页 / 共43页
第5页 / 共43页
第6页 / 共43页
第7页 / 共43页
第8页 / 共43页
第9页 / 共43页
第10页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
.,C语言程序设计第4章循环结构程序设计,.,【例题】输入一个正整数n,把它分解成1及其质因子 相乘的形式。 如: 19=119 36=12233 1024=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() long i, n; printf(Input n: ); scanf(%ld,if(n%i=0) printf(*%ld,i); n/=i; i-;,.,【例】古典问题:有一对兔子,从出生后第3个月起每个月都生一对 兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不 死,问每个月的兔子总对数为多少?(40个月后) 分析:兔子对数的规律为数列1,1,2,3,5,8,13,21 ,即 从第三个数开始其值都为前两个数之和。 main() long m1=1,m2=1;int i; for(i=0;i20;i+) if(i%2=0) /*目的每输出2组数后加一个回车符*/ printf(n); printf(%-12ld%-12ld,m1,m2); /*/ /*/ getch();,m1=m1+m2; m2=m1+m2;,.,【例】题目:输入两个正整数m和n,求其最大公约数 和最小公倍数。 最大公约数算法也称“辗转相除法”,又称欧几里得算 法 ”, 其算法如下: 1. a b(a=b),令r为所得余数(0rb) 若 r = 0,算法结束;b 即为答案。 2. 互换:置 ab,br,并返回第一步。,.,main() int m=0,n=0,r,t,a,b; scanf(“%d%d”, /*/ /*/ /*实现大数在前小数在后*/ /*/ /*/ /*实现辗转相除算法*/,if(ab) t=a;a=b;b=t;,r=a%b; while(r) a=b; b=r; r=a%b;,printf(%d ,.,【例】从键盘任意输入一个正数n,判断其是不是素数 (因子只有1及其本身,其值大于1的自然数)。 #include main() int n,i,k; clrscr(); printf(Input n (n=2): ); scanf(%d, /*/ /*/ ,k=sqrt(n); for(i=2;i1) printf(%d is a prime number.,n); else printf(%d is not a prime number.,n); getch();,.,continue语句,【例】分析如下程序,给出程序执行结果。 main() int i; for(i=0;i10;i+) if(i%2=0) continue ; printf(%d ,i) ; getch(); ,.,【例】随机输入多个字符,直到输入回车结束,统计键入空格 字符的次数。 #include main() int count=0;char ch; printf(Input chars:); do/*/ /*/while(/*/ /*/); printf(The number of spaces is %d.n,count); getch();,ch=getchar(); if (ch!= )continue; count+;,ch!=n,.,1、以下程序段运行后变量a的值为( )。 int i=1,a=0; for( ;i3;i+) continue; a+=i; A. 6B. 3C. 0D. 5,课堂小测试,.,2、以下程序段运行后变量n的值为( )。 int i=1,n=1; for (;i3;i+) continue;n=n+i; A. 4B. 3C. 2D. 1,课堂小测试,.,3、以下程序的运行结果是( )。 void main() int s = 0, i = 0; while(i 8) i+; if(i%2=0) continue; s+=i; printf(%dn,s); A. 36B. 7C. 16D. 12,课堂小测试,.,4、以下程序的运行结果是( )。 void main() int sum = 0, item = 0; while(item 5) 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() int i,j,s=0; for(i=1;i=3;i+) for(j=1;j=2;j+) s=s+i+j; printf(“%d”,s); ,.,【例】编程实现在屏幕上输出九九乘法口诀。 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81,分析:分行与列考虑,可用i控制行,j控制列,共9行,且每行的等式的个数与所在行的序数相同,即第i行就有i列个等式。,.,【例】编程实现在屏幕上输出九九乘法口诀。 main() int i,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() int i,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() int i,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() int large,middle,small; for(/*/ /*/) for(/*/ /*/) small=2*(100-3*large-2*middle); if( /*/ /*/) printf(large=%-2d middle=%-2d small=%-2dn,large,middle,small); getch();,large=0;large=33;large+,middle=0;middle=50;middle+,large+middle+small=100,.,以下程序的运行结果是( )。 void main() int i,j, k=0; for(i= 3;i=1;i-) for(j=i;j=3;j +) k += i * j ; printf(%dn, k); A. 19B. 29C. 6D. 25,课堂小测试,.,以下程序段运行后,循环体中的“count+=2;”语句运 行的次数为( )。 int i,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的值为( )。 int i,j,m=0; for (i=1;i=3;i+) for(j=2;j=4;j+) m=m+i+j; A .45 B.30 C.33 D.27,课堂小测试,.,4.6goto语句,goto语句是一种跳转语句,可以用于程序的任何地方。 goto语句的一般格式为:goto 语句标号; 其中语句标号就是一个合法的标识符。能用goto语句的前提是在同 一个函数中某个语句前存在标号,语句标号的作用在于标识出其后 语句的位置,语句标号的使用方法是在合法标识符后面加上一个 冒号“:”。 如: label: i=j+2 ;中的label1就是一个语句标号。 这时可用goto语句来跳转到label处。方法如下: goto label ; 此时程序遇到goto语句之后会无条件的跳到label所标识的语句(i=j+2)处开始执行。,.,【例】用goto语句实现1+2+3+100结果的输出 main() int i=0,s=0; label: i+; s+=i; if(i100) goto label; printf(1+2+3+100=%d,s); getch(); ,.,【例】分析如下程序总结goto语句的作用。 main() int i=0,j; while(1) while(1)while(1)while(1) printf(test); goto label; label: printf(nexit); getch(); ,.,【例4.20】有一分数序列: 求出这个数列的前20项之和。 main() int i; float a=2.0,b=1.0,t,sum=0; for(/*/ /*/) /*/ /*/ printf(sum = %f,sum); getch();,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号