




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 语句与程序控制构造 4.1 语句总述 4.2 顺序构造4.3 选择构造 4.4 循环构造 4.5 程序举例 4.2 顺序构造程序举例顺序构造程序举例 3,4,6例例1:输入三角形的三边长,求三角形的面积。:输入三角形的三边长,求三角形的面积。公式:公式:#include math.h main( ) float a, b, c, area, s; printf(Enter a, b, c:); scanf(%f,%f,%f, &a, &b, &c); s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf(a
2、=%7.2f,b=%-7.2f,c=%-7.2fn, a,b,c); printf(area=%-7.2fn, area); 2cbas)(*)(*)(*csbsassarea例2:将一个三位整数的各位数符分别出来,并转 换为数字字符倒序输出。main( ) int num; char c1, c2, c3; printf(Enter a data(100999):); scanf(%d, &num); c1=num%10+48; /*or: num%10+0 */ num=num/10; c2=num%10+48; num=num/10; c3=num+48; printf(%3c,
3、%3c,%3cn, c1, c2, c3); 例3:定期存款一年期利率2.3%,三年期年利率3.2%,今有本金1万元,按一年期延续存三年和按三年期存入,各得多少利息?(按一年期再存时本息一并存)设:d为本金,p为利率一年期利息公式:第一年本息:d+dp= d(1+p)第一年本息:d(1+p)+ d(1+p)p= d(1+p)2 三年利息:d(1+p)3d三年期利息公式:dp3源程序:#include math.h#define P1 2.3/100#define P3 3.2/100main( ) float x1, x3, d; scanf(%f, &d); x1=d*pow(1+P
4、1, 3)-d; /*pow(1+2.3/100,3)*/ x3=d*P3*3; /*pow(1+3.2/100,3)*/ printf(x1=%-7.2fx2=%-7.2fn, x1, x3); 4. 3.1 if 语句 (分支控制语句)1. if 语句的 三种方式单路分支:条件成立执行操作,不成立什么也不做;双路分支:条件成立执行A操作,不成立执行B操作;嵌套分支:条件成立执行A操作,不成立时还需求进 一步进展分支判别。4.3 选择构造 第一种方式第一种方式单路分支单路分支 if (表达式表达式) 语句语句 内嵌语句;可是一条语句、复内嵌语句;可是一条语句、复 合语句、空语句。描画了条件合
5、语句、空语句。描画了条件 成立时要执行的操作。成立时要执行的操作。 可是任何方式的表达式;通常是关系或可是任何方式的表达式;通常是关系或 逻辑表达式。描画了分支控制条件。逻辑表达式。描画了分支控制条件。 执行流程:执行流程: 首先求解表达式,并对其值进展逻辑判别;非首先求解表达式,并对其值进展逻辑判别;非零视为真,执行内嵌语句,之后执行后续语句。零视为真,执行内嵌语句,之后执行后续语句。 假设分支条件不成立,那么直接执行后续语句。假设分支条件不成立,那么直接执行后续语句。对应算法:对应算法:PT F内嵌 语句例:输入一个整数,为正那么输出 main( ) int x; scanf(%d, &a
6、mp;x); if (x0) printf(%dn , x); 例:输入两个数并按由小到大顺序输出 main( ) float a, b, t; scanf(%f,%f, &a, &b); if (ab) t=a; a=b; b=t; printf(%f,%fn, a, b); 第二种方式第二种方式双路分支双路分支 if (表达式表达式) 语句语句1 else 语句语句2 其中:内嵌语句其中:内嵌语句1是条件成立时所执行的操作;是条件成立时所执行的操作; 内嵌语句内嵌语句2是条件不成立时所执行的操作;是条件不成立时所执行的操作;执行流程:执行流程: 首先求解表达式,并对其值进展
7、逻辑判别;为首先求解表达式,并对其值进展逻辑判别;为真,执行内嵌语句真,执行内嵌语句1,之后执行后续语句。,之后执行后续语句。 假设分支条件不成立,那么执行内嵌语句假设分支条件不成立,那么执行内嵌语句2,之后之后执行后续语句。执行后续语句。对应算法:对应算法:PT F内嵌 内嵌 语句1 语句2可分行书写: if (表达式) 语句1 else 语句2例:根据x求y值 y= main( ) float x, y; scanf(%f, &x); if (x=0) y=x; printf(y=%fn , y); else y=x*x+1.0; printf(y=%fn, y); x x0 x2
8、 + 1 x=0) y=x; else y=x*x+1.0; printf(y=%fn, y); 例:求恣意三角形面积,假设三边值不能构成三角形时输出表示错误的信息。#include math.hmain( ) float a, b, c, s, area; printf(Enter a, b, c:); scanf(%f,%f,%f, &a, &b, &c); if(a+bc & a+cb & b+ca) s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(area=%-8.3fn, area);
9、else printf(DATA ERROR!); 第三种方式第三种方式阶梯阶梯if (不成立时嵌套分支不成立时嵌套分支) if ( e1 ) s1 else if ( e2 ) s2 else if ( e3 ) s3 else if ( em ) sm else sn其中:其中:ei各层的分支条件;各层的分支条件;si各层的内嵌语句;各层的内嵌语句;执行流程:首先计算并判别执行流程:首先计算并判别e1的值,为真执行的值,为真执行s1,之后退出分支。之后退出分支。e1为假那么计算并判别为假那么计算并判别e2的值,为的值,为真真执行执行s2, 之后退出分支。依次类推。之后退出分支。依次类推。e
10、1e2T F T F T F s1 s2 s3 s4e3例:对学生成果分档;main( ) int g; printf(Enter score:); scanf(%d, &g); if (g100) printf (INPUT ERROR !); else if (g=80) printf(A); else if (g=70) printf(B); else if (g=60) printf(C); else printf(D); 80100分 A档 7079分 B档 6069分 C档 059分 D档留意:分支条件的正确性留意:分支条件的正确性 main( ) int g; print
11、f(Enter score:); scanf(%d, &g); if (g100) printf (INPUT ERROR !); else if (g=60) printf(C); else if (g=70) printf(B); else if (g=80) printf(A); 57 65 89 D C C 上例:用单路分支实现main( ) int g; printf(Enter score:); scanf(%d, &g); if (g100) printf (INPUT ERROR !); if (g=80&g=70&g=60&g=0&am
12、p;g=59) printf(D); 多个并列if语句,执行效率不如阶梯 if。80100分 A档 7079分 B档 6069分 C档 059分 D档2. if 的嵌套 在一个分支构造中,又完好地包含一个或多个分支构造,那么构成了分支构造的嵌套。例:分支条件不成立时需求进一步分支算法表示: 算法实现: if (e1) s1 else if (e2) s2 else s3 e1e2T F T Fs1 s2 s3 例:分支条件成立与不成立,均要进一步分支算法表示: 算法实现:e1 e2 e3T FT F T Fs1 s2 s3 s4if (e1) if (e2) s1 else s2else if
13、 (e3) s3 else s4例:分支条件不成立时需求假设干层进一步的分支算法表示: 算法实现:e1e2e3T F T F T F s1 s2 s3 s4if (e1) s1else if (e2) s2 else if (e3) s3 else s4 可见:阶梯if是条件不成立时的嵌套构造例:编程,断定某年能否闰年闰年条件:整百的年份能被400整除; 或非整百的年份能被4整除。算法表示:输入yearyear%100= =0year%400= =0year%4= =0T F T Fleap=1 leap=0 leap=1 leap=0 leap= =1 T F T F 输出“is 输出“no
14、t 程序清单:main( ) int year, leap; scanf(%d, &year); if (year%100=0) if (year%400=0) leap=1; else leap=0; else if (year%4=0) leap=1; else leap=0; if (leap=1) printf(%d is a leap yeas.n,year); else printf(%d is not a leap year.n, year); 例:根据 x求y值。 3x - 11 0 x 10 y= 2x + 5 10 x 20 x 20 x 30输入 x x0&
15、;x30T F x10 T F x20 T F y=x y=3x-11 y=2x+5 输出x无效 输出 y 输入x输出X无效3x-11yx0&x30 x10 x=0&x30) if (x10) y=3*x-11; else if (x20) y=2*x+5; else y=x; printf(x=%7.2f,y=%7.2fn, x, y); else printf(%7.2f is invalid.n, x); 方法2: 3x - 11 ( 0 x 10) y= 2x + 5 (10 x 20) x (20 x 30) x=30T F 输出 x无效 x10 T F y=3x-1
16、1 y=2x+5 y=x x20 T F 输出 y 输入 xscanf(%f, &x);if(x=30)printf();else if(x10) y=3*x-11; else if(x=a & c=z) c=c-32; else c=c; printf(“%c,c); /*将小写字母转换为大写字母*/if语句语句 例如例如【例二】以下程序的执行结果是什么? main( ) int x=2,y=-1,z=2; if (xy) if (y0) ; if (x=2) if (1=x0); y=x-1;4.3.2 switch多分支选择多分支选择 语句语句 (多路开关语句多路开关语句
17、)1. switch的普通方式的普通方式 switch (表达式表达式) case 常量常量1: s1 case 常量常量2: s2 case 常量常量n: sn default : sn+1 其中:表达式可是任何方式,但其值应为整型;其中:表达式可是任何方式,但其值应为整型; 内嵌语句内嵌语句si可是一条语句、复合或空语句;可是一条语句、复合或空语句; 常量常量i可是整、字符、符号常量、常量表达式。可是整、字符、符号常量、常量表达式。2. switch的执行流程 首先求解表达式,然后测试其值与哪个case后的常量相等,相等那么从该case后的语句开场执行,直到其后的一切内嵌语句执行终了,退出
18、多分支结构。 假设表达式的值不与任何常量相等,那么执行default后的语句,执行终了退出分支。switch执行流程图:switch (表达式) case c1: s1 case c2: s2 case cn: sn default : sn+1 求解表达式c1?c2?cn?sn+1s1sns2YYYNNN求解表达式c1?c2?cn?sn+1s1sns23. 运用阐明1) 在switch中可以运用break语句跳出switch构造;breakbreakbreak例:对成果分档 main( ) char c1; int g; scanf(%d, &g); switch( g/10 ) c
19、ase 10: c1=A ; case 9: c1=A ; case 8: c1=A ; case 7: c1=B ; case 6: c1=C ; default: c1=D ; printf(“%cn, c1); 80100分 A档7079分 B档 6069分 C档 059分 D档break;break;break;break;break;2) case后的各常量不能一样,否那么编译无法经过;3) default为可选项,它提供了表达式的值与任何量 都不一样时的执行方案;假设表达式的值与任何常量都不一样时什么也不需求做,那么省略关键字 default;4) 多个case可共用一组执行语句;
20、 例: switch( g/10 ) case 10: case 9: case 8: c1=A ; break; case 7: c1=B ; break; 例:设计一个简单的菜单项选择择程序,根据选择可实 现a与b的四那么运算。#include “stdio.hmain( ) int a, b; char c1; clrscr( ); printf(1. Addn); printf(2. Subtractn); printf(3. Multiplyn); printf(4. Dividen); printf(Enter your choice:); c1=getchar( ); c1=ge
21、tchar( ); if (c1=1 & c1=4 ) printf(Enter a, b:); scanf(“%d,%d, &a, &b); switch(c1) case 1 : printf(“%dn, a+b); break; case 2 : printf(“%dn, a-b); break; case 3 : printf(“%dn, a*b); break; case 4 : printf(“%fn, (float)a/b); else printf(“Invalid selsction.); /*main*/switch语句语句 例如例如main() c
22、har s; scanf(“%c,&s); switch(s) case A : printf(“85100n); case B : printf(“7084n); case C : printf(“6069n); case D : printf(“60n); default : printf(“错误输入n); 输入“c,求输出结果。 结果: 6069 60 错误输入 ?!switch语句语句 例如例如处理方法break语句:main() char s; scanf(“%c,&s); switch(s) case A : printf(“85100n);break; case
23、B : printf(“7084n);break; case C : printf(“6069n);break; case D : printf(“60n);break; default : printf(“错误输入n); 这才差不多!break! 运转结果: 6069switch语句语句 例如例如处理方法break语句:main() char s; scanf(“%c,&s); switch(s) case A : printf(“85100n);break; case B : printf(“7084n);break; case C : printf(“6069n);break;
24、case D : printf(“max) max=b; if (cmax) max=c; if (dmax) max=d; printf(MAX=%dn, max); 例:找出三个整数中的最大、最小数。main( ) int a, b, c, max, min; printf(Enter a, b, c:); scanf(%d,%d,%d, &a, &b, &c); max=ab? a: b; max=cmax? c: max; min=ab? a: b; min=cmin? c: min; printf(MAX=%dnMIN=%dn, max, min); 例:输入
25、三个整数,由大到小输出。main( ) int a, b, c; scanf(“%d,%d,%d,&a,&b,&c); if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; printf(%d,%d,%dn, a, b, c); 输入abc ab?ab bc?a=10000) w=5; /*求解位数*/ else if(a=1000) w=4; else if(a=100) w=3; else if(a=10) w=2; else w=1; p5=a/10000; /*分别各位*/ p4=(a
26、-p5*10000L)/1000; /*L:防止溢出*/ p3=(a-p5*10000L-p4*1000)/100; p2=(a-p5*10000L-p4*1000-p3*100)/10; p1=a-p5*10000L-p4*1000-p3*100-p2*10; printf(“t%ld,%dntt, a, w); switch( w ) case 5: printf(%dbbb, p5); /*无须break*/ case 4: printf(%dbbb, p4); case 3: printf(%dbbb, p3); case 2: printf(%dbbb, p2); case 1: p
27、rintf(%dbbb, p1); printf(“n);另一种输出方法:switch( w ) case 5: printf(%d %d %d %d %d, p1, p2, p3, p4, p5); break; case 4: printf(%d %d %d %d, p1, p2, p3, p4); break; case 3: printf(%d %d %d, p1, p2, p3); break; case 2: printf(%d %d, p1, p2); break; case 1: printf(%d, p1); 例:输入四个整数,升序排序并输出。输入a、b、c、dT ab F
28、ab T cd F cd T ac F ac T bc F bc T bd F bd T cd F cd 输出a、b、c、dbadccbdbB次小dc4.4.1 while语句语句普通方式:普通方式:while (表达式表达式) 语句语句其中:其中: 表达式表示了循环条件;方式:任何表达式。表达式表示了循环条件;方式:任何表达式。 内嵌语句为循环体;方式:单条、复合、空语句。内嵌语句为循环体;方式:单条、复合、空语句。执行流程:执行流程: 首先求解表达式并对其值进展逻辑判别,为真首先求解表达式并对其值进展逻辑判别,为真执行内嵌语句;之后再次求解表达式并判别,为真执行内嵌语句;之后再次求解表达式
29、并判别,为真再次执行内嵌语句;当表达式值为假时,退出再次执行内嵌语句;当表达式值为假时,退出while循环,执行后续语句。循环,执行后续语句。循环类型:当型,先判别后执行,循环体有能够一循环类型:当型,先判别后执行,循环体有能够一 次也不被执行。次也不被执行。例:求例:求 main( ) int i=1, sum=0; while(i=100) sum+=i; i+ ; printf(%d, sum); 1001nn运用阐明:运用阐明:1) 在在while的循环体中一定要有使循环趋于终了的循环体中一定要有使循环趋于终了的的 语句;否那么将构成死循环;语句;否那么将构成死循环;2) 留意循环操作
30、的范围、花括号、分号的运用;留意循环操作的范围、花括号、分号的运用;3) 留意与循环有关的变量赋初值的位置及初值的留意与循环有关的变量赋初值的位置及初值的 正确性;正确性; 如:如:i=0; sum=1; 是错误的。是错误的。例:输入一个班某门课的成果,统计80分的人数, 并计算出平均成果,保管小数两位。 main( ) int i, count, score, num, sum; i=1, count=sum=0; printf(Enter number:); scanf(%d, &num); while(i=80) count+; i+ ; printf(%d,%7.2fn, co
31、unt, (float)sum/num); 4.4.2 do - while语句语句普通方式:普通方式: do 语句语句 while (表达式表达式) ;其中:其中: 表达式表示了循环条件;方式:任何表达式。表达式表示了循环条件;方式:任何表达式。 内嵌语句为循环体;方式:单条、复合、空语句。内嵌语句为循环体;方式:单条、复合、空语句。执行流程:执行流程: 首先执行内嵌语句,之后求解表达式并对其值首先执行内嵌语句,之后求解表达式并对其值进逻辑判别,为真再次执行内嵌语句,如此反复,进逻辑判别,为真再次执行内嵌语句,如此反复,直到表达式的值为假退出直到表达式的值为假退出 do - while循环。
32、循环。循环类型:直到型,先执行后判别,循环体至少执循环类型:直到型,先执行后判别,循环体至少执 行一次。行一次。例:求例:求5! main( ) int i, fact; i=1, fact=1; do fact=fact*i; i+ ; while(i=A&ch=a&ch=t) printf(1); n=n-t; else printf(0); i-; while(n!=0 ); printf(nt 8:%ont16:%xn, num, num); 4.4.3 for语句语句普通方式:普通方式:for (表达式表达式1; 表达式表达式2; 表达式表达式3) 语句语句其中:其中
33、: 内嵌语句为循环体;方式:单条、复合、空语句;内嵌语句为循环体;方式:单条、复合、空语句; 各表达式可是任何方式的表达式;各表达式可是任何方式的表达式; 通常:表达式通常:表达式1用于对循环控制变量赋初值用于对循环控制变量赋初值; 表达式表达式2给出循环控制条件给出循环控制条件; 表达式表达式3使循环控制变量增值。使循环控制变量增值。循环类型:当型循环类型:当型 for语句执行流程: 求解e1求解e3内嵌语句求解测试 e2 F T 整个循环过程中e1只求解一次;内嵌语句和e3是反复执行的内容;e2相当于是for的循环条件;例:求main( ) int i, sum; for (sum=0,
34、i=1; i=100; i+) sum=sum+i; printf(1+2+3+100=%dn, sum); 1+2+3+100=50501001nn运用阐明:运用阐明: 1) for语句三个表达式的作用可了解为:语句三个表达式的作用可了解为: for(循环变量赋初值;循环条件;循环变量增循环变量赋初值;循环条件;循环变量增量量) 语句语句2) e1、e1、e3均为可选项,它们可分别地或同均为可选项,它们可分别地或同时时 被省略。被省略。省略省略e1: for ( ; i100) break; /*控制退出循环控制退出循环*/ sum=sum+i; 省略省略e3: 在流程中将跳过在流程中将跳过
35、e3的求解,此时循环变量的求解,此时循环变量的控制可在循环体中实现。的控制可在循环体中实现。 for (sum=0, i=1 ; i=100; ) sum=sum+i; i+; 省略省略e1和和 e3: 将跳过将跳过e1、e3的求解。的求解。 sum=0; i=1; sum=0; i=1; for ( ; i=100 ; ) 等价等价 while(i=100) sum=sum+i; sum=sum+i; i+; i+; 省略省略e1、e2、e3: 将搭建一个将搭建一个for循环的框架,在循环的框架,在这这个框架中便可运用个框架中便可运用break语句,到达跳过某段内容语句,到达跳过某段内容的的
36、目的。目的。 for ( ; ; ) if (e) break; /*单独的单独的if不能用不能用break*/ 例:for(i=10; i; i-) printf(“%d, i); 10,9,8,7,6,5,4,3,2,1,例:for(i=0; i=10; i=i+2) printf(“%3d, i); printf(“ni=%d, i); 0 2 4 6 8 10 i=12例:for(i=1, j=6; ij; i+, j-) printf(“%d*%d=%dn, i, j, i*j); 1*6=6 2*5=10 3*4=12 例:空循环构成一个延时器 long t; for(t=0; t
37、=83000000; +t) ; 例:计算15的阶乘 main( ) int i, fact; for(fact=1, i=1; i=5; i+) fact=fact*i; printf(t%d!=%dn, i, fact); 1!=1 (每次循环都进展输出) 2!=2 3!=6 4!=24 5!=120例: 计算某班32位学生某门课的平均成果,并输出 最高分、最低分。 main( ) int i, score, max=0, min=100; float sum=0; for(i=1;imax) max=score; if(scoremin) min=score; printf(averag
38、e=%-8.2fn, sum/32); printf(max=%d,min=%dn, max, min); 循环的嵌套循环的嵌套 一个循环体内又包含一个完好的循环构造,称一个循环体内又包含一个完好的循环构造,称为循环的嵌套;嵌套的层次可是双重的或多重的。为循环的嵌套;嵌套的层次可是双重的或多重的。 C四种方式的循环可以相互嵌套,但绝不能出现四种方式的循环可以相互嵌套,但绝不能出现交叉景象。交叉景象。正确的循环嵌套方式:正确的循环嵌套方式: 外循环 内循环 外循环 内循环1 内循环2三重循环错误的循环交叉方式:错误的循环交叉方式: 例:do-while嵌套 例:do-while、for混合嵌套
39、do do do for(e1;e2;e3) while(e1); while(e); while(e); 例:for循环嵌套 for(e1; e2; e3) for(b1; b2; b3) 求解e1部分语句1部分语句2e2?b2?求解b1内循环体求解b3求解e3 F T F T例:求110之间恣意5个整数的阶乘值 main( ) int i, j, n; long fact; for(i=1; i=5; i+) scanf(%d, &n); fact=1; for(j=1; j=0; i-) for(j=0; j=82000000; j+); /*延时1秒*/ printf(“a%d
40、b, i ); 例:按以下方式打印乘法九九表 i: 1 1*1=1 2 2*1=2 2*2=4 3 3*1=3 3*2=6 3*3=9 4 4*1=4 4*2=8 4*3=12 4*4=16 9 9*1=9 9*2=18 9*3=27 9*9=81 j 1 2 3 9被乘数i取值19;i每取一值,乘数j取值1i main( ) int i, j, k; for(i=1; i=9; i+) for(j=1; j100 main( ) int r; float area; for(r=1; r100) break; printf(“r=%d,area=%-7.2fn, r, area); (单步跟
41、踪;监视r、area)例: 求int型量的最大累加和 (1+2+3+.+? =sum, sum最大且32767) main( ) int i, sum=0; /*循环次数不明确*/ for(i=1, sum=0; ; i+) /* 省略了e2*/ if(long)sum+i32767) break; sum=sum+i; printf(“i=%d, sum=%dn, i, sum); i=256, sum=32640例:输入两个正整数m和n,求其最大公约数和最小 公倍数。算法1: (穷举法)找出m、n中的较小者 t; 最大公约数一定在t、t-1、t-2、1之间;2) 测试m%i和n%i能否同时
42、为0 ; 除数i依次取 t、t-1、t-2 1 ; 测试条件成立时的 i值即为最大公约数;3) 最小公倍数:mn/最大公约数; main( ) int m, n, t, i; printf(“Enter m,n:); scanf(“%d,%d, &m, &n); t=m=1; i-) if (m%i=0&n%i=0) break; printf(“GCD=%d,SCM=%dn, i, m*n/i); 18,12 17,3 GCD=6,SCM=36 GCD=1,SCM=51算法2: (辗转相除法)main( ) int a, b, m, n, r, t; printf(“
43、Enter a, b:); scanf(“%d,%d, &a, &b); m=a, n=b; /*产生a、b副本*/ if(mn?2. continue语句 普通方式: continue;功能:用于由while、do-while、for构成的循环中, 跳过本次循环后面尚未执行的语句,提早结 束本次循环,并继续循环流程的下一步。例:for中用 continue 例:while中用continue for(e1; e2; e3 ) while( e1 ) if (e) continue; if(e) continue; 例:把100200之间不能被3整除的数输出;并控制 一行输出1
44、0个数据。 main( ) int n, c=0; printf(“n); for(n=100; n=200; n+) if(n%3=0) continue; printf(“%d, n); c+; printf(“%s, c%10=0? n : ); 几种循环的比较几种循环的比较 1. 循环的控制类型循环的控制类型 1) 计数器控制计数器控制 2) 标志控制标志控制 例:求一个班某门课的平均成果。例:求一个班某门课的平均成果。计数器控制循环:计数器控制循环: scanf(“%d, &num); /*输入人数输入人数*/ for(i=1; i=num; i+) /*循环次数明确循环次数
45、明确*/ scanf(“%d, &g); sum=sum+g; aver=sum/num;标志控制循环:标志控制循环:printf(“Enter grade, -1 to end:); scanf(“%d, &g);while(g!=-1) /*-1是数据终了标志是数据终了标志*/ sum=sum+g; count+; printf(“Enter grade, -1 to end:); scanf(“%d, &g); aver=sum/count;2. 循环语句的选用1) 循环次数知且循环操作规律,选用 for方便;2) 循环次数未知且循环操作没有按一定规律变化 的量,
46、可采用while或do-while语句。 例:输入5个最多8位的正整数,将各数按位颠倒 输出。 main( ) int i; long n, d; for(i=1; i=10-4循环,循环,t为某项值。为某项值。 .71513114#include math.hmain( ) int s; float n, t, pi; n=1.0; s=1; t=1./n; pi=0; while(fabs(t)=1e-4) /*判别某项*/ pi=pi+t; /*累加和*/ n=n+2.0; /*改动分母*/ s=-s; /*符号变反*/ t=s/n; /*计算下一项*/ printf(PI=%10.6f
47、n, pi*4); getch( ); 例:求Fibonacci数列的前40个数,并按一行4个数 陈列输出。 1,1,2,3,5,8,13,21 思索问题:1) 属递推问题:从前一项或几项推出下一项结果;2) 定义几个变量? 一个:无法实现 ; 多个:各求其值,开销大; 三个:f3=f1+f2; f1=f2; f2=f3; 两个:f1=f2=1; f1=f1+f2; f2=f2+f1; 由前两项相加求得下一项后第一项可覆盖,即 变量的值是不断更迭的(迭代法)。main( ) long f1, f2, i; f1=f2=1; for(i=1; i=20; i+) printf(%12ld%12ld, f1, f2); if(i%2=0)printf(n); /*每行4项*/ f1=f1+f2; /*一次递推两项*/ f2=f2+f1; getch( );例:判别m能否素数素数:除1和它本身之外再无别的约数;算法:判别m%i=0成立否? i取值: 2(m-1) 或:2m(int)#include math.h main( ) int m, i, k; pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 济宁市2024-2025学年八年级上学期语文期末模拟试卷
- 集安市2025-2026学年七年级上学期语文月考模拟试卷
- 2025年度财务人员年度工作报告
- 电解铝生产安全知识培训课件
- 电表量程的选择课件
- 高血压糖尿病防治课件
- 电脑无法显示课件问题
- qhse管理体系考试及答案
- 电缆知识培训教材课件
- 电算化工资管理应用课件
- 电子支付安全课件
- 游乐园安全生产责任制
- 中医专科护理并发症预防与处理
- 《人工智能通识》高职人工智能教育全套教学课件
- 石油企业三标管理制度
- 育苗公司育苗管理制度
- 普通电工面试题及答案
- Unit 2 Home Sweet Home 第2课时(Section A Pronunciation 2a-2e) 2025-2026学年人教版英语八年级下册
- 2025年工艺美术设计专业毕业答辩试题及答案
- 小学生相处班会课件
- 2025至2030中国大学科技园行业发展分析及产业运行态势及投资规划深度研究报告
评论
0/150
提交评论