C语言-循环结构_第1页
C语言-循环结构_第2页
C语言-循环结构_第3页
C语言-循环结构_第4页
C语言-循环结构_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

1、C Programming LanguageC Programming LanguageC Programming Language C Programming LanguageC Programming LanguageC Programming Language C Programming Language C Programming LanguageC Programming LanguageC Programming LanguageC Programming LanguageC Programming Language循环变量循环变量赋初值赋初值循环终止循环终止条件条件循环变量循环变

2、量控制控制C Programming LanguageC Programming LanguageC Programming LanguageC Programming LanguageC Programming Language输入输入abcdefg.输出输出abcdefg.C Programming LanguageC Programming LanguageC Programming LanguageC Programming LanguageC Programming Languagenum n1=0,n2=0,n3=0i=1i=30num=num-0num%2n1+n2+n3+n1,

3、n2,n3 num=0YNi+num YNC Programming Languagemain() int i, n1=0,n2=0,n3=0; char num; scanf(“%c”,&num); for (i=1;i=30;i+) num=num-0; if (num=0) n1+; if (num%2) n2+; else n3+; scanf(“%c”,&num); printf(There are %2d evens, %2d odds, %2d zeros ”,n1,n2,n3,);C Programming Language解题思路解题思路 每当我们读入一张选票

4、,只有每当我们读入一张选票,只有6种种情况,将它们加到相应的人选上。情况,将它们加到相应的人选上。 -1结束循环结束循环1.case语句作为开关。语句作为开关。C Programming Languagemain() int vote,l_vote,z_vote,w_vote, invalidvote; l_vote=0; z_vote=0; w_vote=0; invalidvote=0; scanf(“%d”,&vote); while (vote!=-1) switch (vote) case 1: l_vote+;break; case 2: z_vote+;break; ca

5、se 3: w_vote+;break; case 0: case 4: invalidvote+;break; scanf(“%d”,&vote); printf(Li%2d,zhang%d2d,wang%2d,invalid%2d”, l_vote,z_vote,w_vote,invalidvote); C Programming Languagebit=num%10 num=num/10count=0;输入输入numnum!=0输出输出num%10count+num=num/10输出输出countC Programming Language C Programming Langu

6、ageC Programming Languageloop: sum=sum+i; i+; if(i101) goto loop;C Programming LanguageC Programming Language C Programming Language C Programming Language非00非000非00非0语句语句循循环环体体C Programming LanguageC Programming Language例例 求输入的十个整数中正数个数及其平均值。求输入的十个整数中正数个数及其平均值。C Programming Language(1) while() whil

7、e() . (2) do do while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while(); while() .C Programming Language C Programming Language例例1:main() int i,j; for(i=0; i3;i+) for(j=1;j=4;j+) printf( %d,j); printf(n); 运行后,运行后,输出:输出: 1 2 3 4 1 2 3 4 1 2 3 4例例2:main() int i,j; for(i=0; i3;i+) for(

8、j=1;j=4;j+) printf( %d,j); if( ! (j%3) ) break; printf(n); 运行后,运行后,输出:输出: 1 2 3 1 2 3 1 2 3 C Programming Language例例4: main() int i, j; for( i=0; i3; i+) printf( %d, i ); printf(n ) ; for( i=1; i=4; i+) printf(%d, i ) ; 运行后,运行后,输出:输出:例例3:main() int i, j; for( i=0; i3; i+) for( j=1;j=4;j+) printf( %d

9、,j); if( ! (j%3) ) goto l; printf(n); l: ;运行后,运行后,输出:输出: 1 2 3 0 1 2 1234C Programming LanguageC Programming LanguageC Programming LanguageC Programming Languagefor(i=1;i=5;i+) for(j=1;j=5;j+) printf( ); printf(n“);for(i=1;i=5;i+) for(j=1;j=i;j+) printf( ); printf(n“);for(i=1;i=5;i+) for(j=1;j=5-i+1

10、;j+) printf( ); printf(n“);for(i=1;i=5;i+) for(j=1;ji;j+) printf( ); for(j=1;j=5-i+1;j+) printf( ); printf(n“);for(i=1;i=5;i+) for(j=1;j5-i+1;j+) printf( ); for(j=1;j=i;j+) printf( ); printf(n);C Programming LanguageC Programming LanguageC Programming Language*C Programming Language i=1 i=9k=1k=9-i输

11、出空格输出空格k=k+1j=1j=1.0e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(“pi=%10.6fn”,pi);C Programming Language方法一:数列是正、负相间的,在这里可用一方法一:数列是正、负相间的,在这里可用一个个“开关开关”变量变量 t 来解决符号的问题。来解决符号的问题。main() float s=0; int t=1,i ; for(i=1;i101;i+) s+=1.*t / i ; t= -t ; printf(s=%fn,s); 在处理循环时应注意在处理循环时应注意初、终值初、终值的设定!的设

12、定!C Programming Language方法二:分别求出方法二:分别求出正项和正项和s1(奇数倒数奇数倒数)与负项与负项和和s2(偶数倒数偶数倒数),则,则s=s1-s2 main() float s,s1=0,s2=0; int i; for(i=1;i101;i+=2) s1+=1.0/ i; s2+=1.0/(i+1); s=s1-s2; printf(s=%fn,s); C Programming Languagef(x)= 4-x2dxbaC Programming LanguageC Programming LanguageC Programming LanguageC P

13、rogramming LanguageC Programming Language例例 枚举问题枚举问题或称为或称为穷举法穷举法。一般用于不。一般用于不定方程求非负整数解的问题。它将方程中定方程求非负整数解的问题。它将方程中未知数可以取的到的非负整数逐个进行验未知数可以取的到的非负整数逐个进行验证找出所有满足方程的解。证找出所有满足方程的解。例如:例如:一元人民币兑换成一元人民币兑换成1分、分、2分、分、5分共有分共有多少种方法?多少种方法?若若5分、分、2分、分、1分的个数分别为分的个数分别为x个、个、y个、个、z 个,则个,则x的取值为的取值为020,y的取值为的取值为050,z的取值为的

14、取值为0100。于是有不定方程:于是有不定方程: 5x+2y+z=100。C Programming LanguageC Programming Language 上面程序的循环次数超过上面程序的循环次数超过10万次,且大量的循环万次,且大量的循环都不满足方程。可对程序进行优化,由于随着都不满足方程。可对程序进行优化,由于随着5分个数分个数的增加,的增加,2分个数就会减少,因此循环变量分个数就会减少,因此循环变量j可控制在可控制在(100-5i)/2以内以内,这样使得这样使得5i+2j=100。若不足。若不足100则补充则补充1分,分,将问题转换成为求循环次数的问题了将问题转换成为求循环次数的

15、问题了。main() int i,j,m=0; for(i=0;i21;i+) for(j=0;j=(100-5*i)/2;j+) m+=1; printf(m=%dn,m);因为该不定方程中,因为该不定方程中,如果有两个未知数确如果有两个未知数确定后,第三个未知数定后,第三个未知数也随之确定。即确定也随之确定。即确定了一种分法。例如:了一种分法。例如:i=20时,时,j=0i=19时,时,j=0,1,2i=18时,时,j=0,1,2,3,4,5C Programming LanguageAZ.a.z.C Programming LanguageabdEgWefhIkAC Programmin

16、g Languagemain() float value, total, average; int counter; total=0;counter=0; average = 0; scanf (“%d”,&value); while (value !=-1) total = total + value; counter + +; scanf (“%f”,&value); if (counter = 0) printf (“No data entered.n”); else average = total / counter; printf (The average of %d

17、 values is %f”, counter,average) 23.9 85.68 227E02 0.00863 7593.44 71 14.7E-05 66 -1The average of 9 values is 2568.336412C Programming Language* 本例还是要考虑每行的空格数、和星本例还是要考虑每行的空格数、和星号数问题,但要关注号数问题,但要关注空格数与星号数空格数与星号数在增在增加到一定的时候又要减少的规律。加到一定的时候又要减少的规律。C Programming Language #include main() int i,j,k; for(i=

18、 -2;i=2;i+) for(j=1;j=18+fabs(i);j+) printf( ); for(k=1;k=5-2*fabs(i);k+) printf(*); printf(n); 注意初、终值注意初、终值从从-2到到2的目的目的。的。fabs(i)变化规律是:变化规律是:2,1,0,1,2。 每行的空格数是:每行的空格数是:20,19,18,19,20。每行的星号数是:每行的星号数是:1,2,3,2,1。for(i=0;i4;i+) for(j=0;j20-i;j+) printf(“ ”); /*空格递减空格递减*/ for(k=0;k2*i+1;k+) printf(“*”);

19、 /*星号递增星号递增 */ C Programming LanguageC Programming Languagemain() long i,a,b,c,e,d; flaot f,g; i=95859; while (i=99999 ) a=i/10000; b=(i-a*10000)/1000; c=(i-a*10000-b*1000)/100; d=(i-a*10000-b*1000-c*100)/10; e=i-a*10000-b*1000-c*100-d*10; if (a=e) & (b=d) if(i-95859)%7)=0) printf(“The speed is

20、%d”,(i-95859)/7);i+; 该程序需要执行循环该程序需要执行循环99999-95859次!次!C Programming Language/*第二种算法第二种算法*/main() long i,distance,a,b,c,d; (for i=1;i=200;i+) distance=95859+i*7; a=distance/10000 b=(distance-a*10000)/1000; c=(distance-a*10000-b*1000)/100; d=(distance-a*10000-b*1000-c*100)/10; e=distance-a*10000-b*100

21、0-c*100-d*10; if (a=e) and (b=d) printf(“The speed is %d”,i); C Programming Language/*第三种算法第三种算法*/main() long i,j,distance,speed:real; for(i=6;i=9;i+) for (j=0;j=9;j+) distance=90000+i*1000+j*100+i*10+9; if (distanc%7)=0) printf(“The speed is %d”,distance/7); distance = distance-95959 if (distance%7

22、)=0) printf(“The speed is %d”,distance/7);该程序需要循环该程序需要循环(9-6)*10+1次!次!C Programming Language分析分析:( 1 ) 因 为 新 出 现 的 数 (因 为 新 出 现 的 数 ( d c b c d ) 是 :) 是 :个位数字(个位数字(d)与万位数字、十位数字()与万位数字、十位数字(c)与)与千位数字相同,而百位数字(千位数字相同,而百位数字(b)只能是)只能是,表示万位和千位的变量表示万位和千位的变量a取值范围为:取值范围为:9599。所以,要将所以,要将a分隔出的十位数字和个位数字分别分隔出的十位

23、数字和个位数字分别赋予赋予d和和c 。(2)约束条件是:公里数对称且车速为整数。)约束条件是:公里数对称且车速为整数。C Programming Language循环循环a=95;a=99;a+求出万、千位上的数字求出万、千位上的数字循环百位数字循环百位数字b=0;b=99找出对称的数字找出对称的数字计算路程、车速计算路程、车速车速为整且路程车速为整且路程 为正为正跳出并输出跳出并输出C Programming Languagemain() int a,b,c,d,n,v; long int m; for(a=95;a=99;a+) d=a/10; c=a-d*10; /*分别求出万、千位上的数字分别求

温馨提示

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

评论

0/150

提交评论