《C语言第三次作业答案.ppt》由会员分享,可在线阅读,更多相关《C语言第三次作业答案.ppt(74页珍藏版)》请在金锄头文库上搜索。
1、第四章语句、程序控制结构(顺序、选择、循环)Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.1 C语句总述 C语句一般以分号“;”为结束标志,可分为以下六类:1. 表达式语句 表达式语句由表达式加上分号“ ; ”组成。如: x*=8 ; /* 赋值表达式语句 */ a=5, b=7,c=16 ; /* 逗号表达式语句 */ xy ? x : y ; /* 条件表达式语句 */ -a&+b&+c; /* 逻辑表达式
2、语句 */ i+ ; /* 算术表达式语句 */ Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.2. 说明语句说明语句 变量定义语句和函数说明语句统称说明语句。如: int a, b, *p,i=0 ; float add (float , float ); /*函数说明语句*/3. 空语句空语句 只有分号“ ; ”组成的语句称为空语句。空语句是 什么也不执行的语句。 在程序中空语句可用来作空循环体或转向点。 如:
3、 while(getchar()!=n) ; 本语句的功能是,只要从键盘输入的字符不是回 车则重新输入 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4. 复合语句 把多个语句用括号 括起来组成的一个语句称为复合语句。 在程序中应把复合语句看成是单条语句,而不是 多条语句。如: t = x ; x = y ; y = t ; 5. 函数调用语句* 由函数名、实际参数加上分号“ ; ”组成。如: printf(C P
4、rogram) ; Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.6. 控制语句 控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。 语言有九种控制语句,可分成以下三类: 条件判断语句: if语句、switch语句; 循环执行语句: do while语句、while语句、for语句; 转向语句: break语句、continue语句、 goto语句、 return语句。 Evalua
5、tion only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.2 顺序结构C语言中的顺序结构主要由说明语句、表达式语句、空语句以及复合语句组成。在顺序结构程序中,各语句(或命令)是按照位置的先后次序顺序执行的按照位置的先后次序顺序执行的,且每个语句都会被执行到。例:输入两个整数,编程完成两数的交换。 main() int a, b, t; scanf(%d %d, &a, &b); t=a; a=b; b=t; printf(%d %d,
6、 a, b); main() int a, b; scanf(%d %d, &a, &b); a=a+b; b=a-b; a=a-b; printf(%d %dn, a, b); Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.3 选择结构它所要解决的问题是根据“条件”判断的结果决定程序执行的流向,因此该结构也被称为判断结构。程序执行的流向是根据条件表达式的值是“0”还是非“0”来决定(流程)。设计选择结构程序,
7、需要考虑两个方面的问题:一是在C语言中如何来表示条件(条件表达式),二是在C语言中实现选择结构用什么语句(if/switch结构)。简单if语句if-else语句if-else if-else语句 switch语句A 块B 块P0(假)非0(真)Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.3.1 简单if语句语法形式:语法形式: if(表达式) 语句其中表达式是决定程序流向的条件语句可以是单语句或复合语句语句表达
8、式假真Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.if语句示例例1:输入任意三个整数a、b、c,求三个数中的最大值(例4.2) main()/*注意三段式编程思想注意三段式编程思想*/ int a, b, c, max; printf(Please input three numbers:); scanf(“%d,%d,%d”, &a, &b, &c); /*输入数据语句*/ max=a; if (ba) max
9、=b; if (cmax) max=c;/*算法处理部分*/ printf(“max=%dn”, max); /* 输出结果语句*/Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.*例2:输入x,y两整数,按小到大顺序输出。 main ( ) int x, y, t;scanf (“%d, %d”, &x, &y); /*输入*/ if ( x y) t = x; x = y; y = t; /*算法处理*/ pri
10、ntf (“%d, %dn”, x, y );/*输出*/ 运行结果 ,输入: 4, 1 输出:1, 4Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.3.2 if-else语句语法 if(表达式) 语句1else 语句2语句1表达式假真语句2Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright
11、 2004-2011 Aspose Pty Ltd.if-else语句示例例1. 输入一个整数,输出该整数的绝对值main() int n; scanf(%d, &n); if(n=0) printf(%d, n); else printf(%d, -n);printf(“%d”,n=0?n:-n);Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.*例2. 用if-else语句求输入的三个整数中的最大数 main (
12、 ) int a, b, c, max; scanf(“%d%d%d ”,&a,&b,&c); max=a; if (cb) if (ca) max=c; else if (ba) max=b; printf (max=%dn , max); max=bF输出maxmax=c输入a,b,cmax=acacbTTTFbaFEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.3.3 系列if语句 if ( 条件1 ) 语句1
13、 else if ( 条件2 ) 语句2 else if ( 条件3 ) 语句3 else if ( 条件n ) 语句 n else 语句 n+1 其中最后一个else 在无语句 n+1时可以省略 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.系列if结构流程图条件1条件2语句1语句2语句n语句n+1条件n TFFTFTEvaluation only.Created with Aspose.Slides for .
14、NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.系列if结构示例例1. 用else if 结构求解一元二次方程ax2+bx+c=0的 根,系数a、b、c的值从键盘输入。见98页 例4.4)Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.p=(b*b-4*a*c);real=-b/(2*a)imag=sqrt(fabs(p)/(2*a)
15、输出2复根realimagi输入a,b,c输出根-c/ba!=0TTTFFa=0&b!=0p=0p0FFT非法或无意义输出2实根realimag输出根-b/(2*a)求一元二次方程流程图Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例2:从键盘输入成绩score,编程要求能有如下输出: score60,输出 E; 60 score 70,输出 D; 70 score 80,输出 C; 80 score 90,输出
16、B; 90 score,输出 A。 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.main ( ) int score; printf (Enter a score:n); scanf (%d, &score); if (score60) printf(“E); else if ( score 70 ) printf(D); else if (score 80 ) printf (C); else if (scor
17、e y) z=x; x=y;y=z; 2. if结构与+、-的综合应用时遵循原来的自增自减运算符的应用规则例:下面程序运行后结果是? main() int m=5; if(m+5) printf(“%dn”,m); else printf(“%dn”,m-);3 if结构可以嵌套使用,当有众多的if和else时, else必须和if配对使用,且else总是跟它上面最近的if配对Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty
18、Ltd.例:下面这段程序执行后,例:下面这段程序执行后,x的值为的值为?main() int a=1,b=3,c=5,d=4, x; if(ab) ,则,则 x=? */ if(cd) x=1; else if(ac) if(bd) x=2; else x=3; else x=6;else x=7;printf(x=%d,x);注意:在注意:在if-else的嵌套结构中,的嵌套结构中,else 总是与它上面最总是与它上面最 近的近的if配对配对if(ab) x=7Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Pro
19、file 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.3.4 switch语句 switch结构是多分支选择结构,根据表达式值的不同,程序转入不同的模块执行 switch 结构的语法形式 switch (表达式) case 常量表达式 1: 语句 1; case 常量表达式 2: 语句 2; case 常量表达式 n: 语句 n ; default: 语句 n+1; Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-
20、2011 Aspose Pty Ltd.不带break语句switch结构图e=e1e=e2e=e3e=en语句1语句2语句3语句n语句n+1TTTTFFFFdefault其中:e 为表达式e1、e2en 为常量表达式1、2nEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.带break语句的switch结构 实际使用时,一般要使程序在执行一个case语句 后退出switch结构,可用break语句将上述switch
21、结构改成: switch (表达式) case 常量表达式 1: 语句 1; break; case 常量表达式 2: 语句 2; break; case 常量表达式 n: 语句 n ; break; default: 语句 n+1; Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.e=e1e=e2e=e3e=en语句1语句2语句3语句n语句n+1TTTTFFFFdefault其中:e 为表达式e1、e2en 为常量
22、表达式1、2nEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例4.6 用switch结构编写可处理四则运算的程序main( ) float v1,v2; char operator; printf(Please type your expression:n); scanf(%f%c%f,&v1,&operator,&v2); switch(operator) case +: printf(v1+v2=%.2fn,v
23、1+v2); break; case -: printf(v1-v2=%.2fn,v1-v2); break; Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. case *: printf(v1*v2=%.2fn,v1*v2); break; case /: if(v2=0) printf(division by zero.n); else printf(v1/v2=%.2fn,v1/v2); break; def
24、ault: printf(unknown operator.n); Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.switch使用说明每个case后面的常量表达式的值必须互不相同,以免程序执行的流程产生矛盾switch后面括号内的表达式,可以是整型或字符型表达式或枚举型数据加上break语句可以使程序执行某一分支后直接退出switch结构多个case 语句可以共用一组执行语句 如: case 4: case 5:
25、case 6: case 7: d=8; break;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.switch与if-else if-else改写用if-else if语句写成的程序: 从键盘输入成绩score,编程要求能有如下输出: score60,输出 E; 60 score 70,输出 D; 70 score 80,输出 C; 80 score c & a+cb & b+ca判断是否等边等边三角形:a=b
26、& b=c判断是否等腰等腰三角形:a=b | b=c | c=a判断是否直角直角三角形:(a*a+b*b=c*c) | (a*a+c*c=b*b) |(b*b+c*c=a*a) Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.main() int a,b,c; printf(nPlease input a,b,c:); scanf(%d%d%d,&a,&b,&c); if(a+bc&a+cb&b+ca) if(a=b
27、&b=c) printf(equilateral trianglen); else if(a=b|b=c|c=a) printf(isoceles trianglen); else if (a*a+b*b=c*c) | (a*a+c*c=b*b)|(b*b+c*c=a*a) printf(right-angled trianglen); else printf(arbitrary trianglen); else printf(“It isnt triangle.n”); /*构不成三角形*/在构成三角形的前提前提下四种三角形的类型判断选择语句Evaluation only.Created w
28、ith Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.选择结构复习-读程题读程题#include main() int a=0, b=0, c=0, x=0; if(!a) b-; else if(b) if(!c) x=3; else x=4; printf( “x=%dn”, x); Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004
29、-2011 Aspose Pty Ltd.#include main() int x=1, y=0, a=0, b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+; b+; break; printf( “a=%d, b=%dn”, a, b); a=2,b=1Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd
30、.4.4 循环结构4.4.1 while 循环结构4.4.2 do - while 循环结构4.4.3 for 循环结构4.4.4 无条件控制语句 break, continue, goto 4.4.7 多重循环4.4.8 应用举例Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.概述 循环结构 根据循环条件决定是否要重复执行某一模块(循环体)。 C语言中主要提供三种循环语句: while语句 do-while语句 f
31、or语句Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.4.1 while 语句 一般形式 执行流程 while ( 表达式 ) 语句 也称语句为循环体 while循环结构 是一种当型循环结构语 句表达式0(假)非0(真)Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-201
32、1 Aspose Pty Ltd.例4.8 用while循环写一个程序统计从键盘输入的数字字符出现的次数并把其中的数字字符依次输出。#include stdio.hmain() /*只统计数字字符出现的次数*/ char c; int nd = 0; while(c=getchar( )!=n) if(c=0&c=0&c=0&c=9)nl+; printf(nThere are %d numbers!n,nd); printf(nThere are %d characters!n,nl);Evaluation only.Created with Aspose.Slides for .NET 3
33、.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.从键盘输入n,计算累加和、阶乘n!计算1+2+nmain()int n,sum=0,i=1; scanf(“%d”,&n);while(i=n)sum = sum+i; i+; printf(“sum=%d”,sum);计算n!main()long fa=1,i=1,n;scanf(“%ld”,&n);while(i=n) fa=fa*i; i+; printf(“%ld!=%ld”,n,fa);Evaluation only.Created with Aspose.Sli
34、des for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.*例2:已知s=1!+2!+3!+n! ,求当s首次超过 2,000,000时的n和s的值main()int n=0;long s=0, an=1;while(s2000000) n+; an=an*n;s=s+an; for(n=1; s=1.e-4); printf(exp(x)=%fn, s ); Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5
35、.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.4.3 for 循环语句 一般形式 for (表达式1;表达式2;表达式3) 语句(循环体) 其中: 表达式1 - 初始化表达式。可用来设定循环控制变 量或循环体中变量的初始值,可以是逗号表达式。 表达式2 - 循环条件表达式。其值为逻辑量,为非 0时继续循环,为0时循环终止 表达式3 - 增量表达式。用来对循环控制变量进行 修正,也可用逗号表达式包含一些本来可放在循环 体中执行的其他表达式 上述表达式可以缺省,但分号不可缺少Evaluation only.Created with Aspose.Slide
36、s for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. 执行过程求解表达式求解表达式1求解表达式求解表达式3语语 句句表达式表达式2TFEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例4.11 用for语句写程序在屏幕上依次输出26个字母,输出形式:a-b-c-d-y-z*例1:求s=sin1+sin2+.+sin50#in
37、clude math.hmain ( ) /*用数学函数加上面的包含文件*/ int n; float s; for ( s=0., n=1; n=50; n+) s+=sin(n); printf (s=%fn,s ); s=s+sin(n)s=0,n=1n+n=50TFEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例1:写出下列程序的输出结果main() int i, s=0, t=0;for( i=1; i1
38、0; i+ )/*选择结构作循环体*/switch( i6 ) case 0: t+=i; break; case 1: s+=i; break; printf( t=%d,s=%dn; t, s );结果:t=30,s=15Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.无条件控制语句4.4.4 break 语句4.4.5 continue 语句4.4.6 goto 语句Evaluation only.Create
39、d with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.4.4 break语句 形式:break; 作用:跳出循环体, 提前结束循环, 无条件转移到 循环结构的下一句继续执行。 使用场合:只能用在 switch 结构和循环结构中。 【例4.13】写一个程序求整数m是否是素数。 一个只能被1和自己整除的数称为素数。决定一个数m是否是素数,只要让m 被2除到被m除就可以,如果不能被2到m中的任何一个数整除,就定m为素数Evaluation only.Created w
40、ith Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.#include stdio.hmain()int m,i;scanf(%d,&m);for(i=2;im;i+) if(m%i=0) break;if(i=m) printf(%d is a prime number.n,m);else printf(%d is not a prime number.n,m);Evaluation only.Created with Aspose.Slides for .NET 3.
41、5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例:阅读如下程序,写出运行结果main() int i, s=0; for(i=1; i10) break; printf(i=%d,s=%dn, i, s); 结果:结果:i=3, s=14Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.4.5 continue 语句 形式:continue;
42、 作用:用来结束本次循环(即跳出循环体中尚未 执行的语句)直接进行循环条件的判断 使用场合:用于循环结构中。 【例4.14】写程序从键盘读入分数,计算有效分数的总分、平均分、最高分、最低分。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.main()float score,min=100,max=0,total=0,avg;int n=0;printf(Please input first score:);while
43、(scanf(“%f”,&score)=1)/*利用输入函数的返回值作条件*/ if(score100) continue; n+; min=(scoremax)?score:max; total=total+score; printf(please input next score:);if(n0)avg=total/n;printf(Max:%.1f,Min:%.1f,Total:%.1f,Average:%.1fn,max,min,total,avg);Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profi
44、le 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例1:阅读如下程序,写出运行结果main( ) int i, s=0, n=0; for( i=1; i10; i+) if( i%2=0 | i%3=0) continue; n+; s+=i; printf(n=%d, s=%dn, n, s);结果:n=3,s=13Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. *4.
45、4.6 goto语句 形式: goto 语句标号语句标号; 其中语句标号用标识符表示。 与goto语句相对应,程序中必有一个带语 句标号的语句,形式为: 语句标号:语句语句标号:语句 作用: 程序无条件地转移到具有该语句标号的语 句上继续执行。 说明: goto语句不是一个必要的语句; 与if结构配合构成条件转移或循环。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.【例4.15】求1100间的奇数和,即求1+3+5
46、+99main() int i=1,sum=0; loop: sum=sum+i; i=i+2; if(i100) goto loop; printf(sum=%dn,sum);运行结果:sum=2500for ( i=1; i100; sum+=i, i+=2 );Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.4.7 多重(嵌套)循环在循环体内又包含另一个或多个完整的循环结构,称为多重循环。要点:三种循环语句
47、可以相互改写、 相互嵌套,但不允许交叉break语句用于多重循环中,是从语句所在的循环跳转到上一层循环continue处于多重循环时,仅仅影响包含它的循环结构执行体执行的次数。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.三种循环结构的等价关系int s=0,i=1;while(i=100) s=s+i; i=i+1;int s=0,i;for(i=1;i=100;i+) s=s+i;int s=0,i=1;do
48、s=s+i; i=i+1;while(i=100); 以下三种结构都可以计算数学式子以下三种结构都可以计算数学式子:1+2+3+100Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例1: 打印阶梯状九九乘法表 #include stdio.hmain()int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%d*%d=%-4d,i,j,i*j);printf(n);嵌套循环举例E
49、valuation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例2:写出下列程序的输出结果#include “stdio.h”main() int n, a, x; char cc=#;scanf(%d, &n); /* n=4*/for( x=0; x0; a- ) putchar(cc); for( a=0; a1) a=2*(a+1); i-; printf(a=%dn, a);运行结果:a=1534main() /*用for
50、循环*/ int i, a; for(i=10, a=1; i1; i-) a=2*(a+1); printf(a=%dn, a);Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.【*2】有一头母牛每年年初生一头小母牛,每头小母牛从第4个年头起,每年年初也生一头小母牛。求在第20年时,共有多少头牛。 这是个“顺推顺推”问题。设:第n年时的母牛数为Yn,则: Y12,Y23,Y34,Y4Y3+Y1, Y5Y4+Y2,可
51、得到,当n4时有: YnYn-1 + Yn-3已知: Y12,Y23,Y34Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.main() int i, y1, y2, y3, y4; y1=2; y2;=3; y3=4;/* 即 y1=2, y2=3, y3=4 */ for(i=4; i=20; i+) y4=y3+y1; /* 即 yn=yn-1 + yn-3 */ y1=y2; y2=y3; y3=y4; pr
52、intf(20 years of cow total amount is %dn, y4);结果:20 years of cow total amount is 2745Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. 3【例4.20】求两整数的最大公约数和最小公倍数。 求最大公约数算法求最大公约数算法: 有两整数a和b: a%b得余数c 若c=0,则b即为两数的最大公约数 若c0,则a=b,b=c,再回去执行 例如
53、求27和15的最大公约数过程为: 2715 余 12 1512 余 3 123 余 0 因此,3即为最大公约数 求最小公倍数算法: 最小公倍数=两整数的乘积最大公约数Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.main() int m,n,a,b,t,c; prinf(Input two integer numbers:n); scanf(%d%d, &a, &b); m=a; n=b; c=a%b; while
54、(c!=0) a=b; b=c; c=a%b; printf(The largest common divisor:%dn, b); printf(The least common multiple:%dn, m*n/b);while(b!=0) c=a%b; a=b; b=c; b=a;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4【例4.17】百钱百鸡问题。 公鸡5文钱1只, 母鸡3文钱1只, 小鸡一文钱3只
55、。 100文钱如何买100只鸡? 分析:设买 x 只公鸡,y 只母鸡,z 只小鸡,则有: x+y+z=100 5x+3y+z/3=100 隐含条件: x、y、z 都是整数;x20;y33。 用穷举法穷举法,即把x、y、x所有可能的各种组合都一 一判断是否符合上述不定方程组,具体是: 把x可能值020和y可能值033用二重循环来组合, 每个x和y组合都可得到z值,即z=100-x-y,若x、y、 z值使5x+3y+z/3=100成立,则该组x、y、z即为一 组所求值。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Pr
56、ofile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.main( ) int x, y, z, j=1; printf(Possible solutions to buy 100 fowls whith 100 wen:n); for (x=0; x=20; x+) for (y=0; y=33; y+) z=100-x-y; if (z%3=0&5*x+3*y+z/3=100) printf(%2d:cock=%-2d hen=%-2d chicken=%-2dn, j, x, y, z); j+; Evaluation only.Created
57、with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.运行结果:Possible solutions to buy 100 fowls whith 100 wen: 1: cock=0 hen=25 chicken=75 2: cock=4 hen=18 chicken=78 3: cock=8 hen=11 chicken=81 4: cock=12 hen=4 chicken=84Evaluation only.Created with Aspose.Slides
58、for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.5*:打印出所有的“水仙花数”。所谓“水仙花 数”是指一个三位正整数,其各位数字的立方和 等于该数本身,例如:153=13+53+33 。 分析: 可用穷举法穷举法,即把所有的三位正整数100999按 题意一一进行判断,如果一个三位正整数n的百位、 十位、个位上的数字分别为i、j、k,则判断式为: n = =i3 + j3 + k3 如何分解三位数n的百位、十位、个位: 百位:i = n/100%10; 十位:j = ( n/10 )%10; 个位:k
59、= n%10;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.#include stdio.hmain() int n,i,j,k; for( n=100; n=999; n+ ) i = n /100; j = ( n / 10 ) % 10 ; k = n % 10 ; if ( n= i*i*i + j*j*j + k*k*k ) printf(%d = %d3 + %d3 + %d3n,n,i,j,k); 运
60、行结果:153 13 + 53 + 33370 33 + 73 + 03371 33 + 73 + 13407 43 + 03 + 73Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.6:利用循环结构打印图形,写程序输入行数n,并打印下面的图形*main() int n,i,k; scanf(%d,&n); for(i=0;in;i+) for(k=0;k=i;k+) printf(*); printf(n); Ev
61、aluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.课后复习关键字语句选择结构if if-elseif - else if - elseswitch循环结构whiledo-whileforbreak, continue算法求最大公约数、素数判断、完数判断、打印图形等Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.本章结束Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.