教学课件第四章程序的控制结构

上传人:re****.1 文档编号:568838691 上传时间:2024-07-27 格式:PPT 页数:109 大小:1.16MB
返回 下载 相关 举报
教学课件第四章程序的控制结构_第1页
第1页 / 共109页
教学课件第四章程序的控制结构_第2页
第2页 / 共109页
教学课件第四章程序的控制结构_第3页
第3页 / 共109页
教学课件第四章程序的控制结构_第4页
第4页 / 共109页
教学课件第四章程序的控制结构_第5页
第5页 / 共109页
点击查看更多>>
资源描述

《教学课件第四章程序的控制结构》由会员分享,可在线阅读,更多相关《教学课件第四章程序的控制结构(109页珍藏版)》请在金锄头文库上搜索。

1、第四章第四章 程序的控制结构程序的控制结构4.1 顺序结构顺序结构4.2 选择结构选择结构4.3 循环结构循环结构4.4 结构化程序设计结构化程序设计算法算法算法算法计算方法计算方法计算方法计算方法 解决问题的方法和步骤解决问题的方法和步骤解决问题的方法和步骤解决问题的方法和步骤例:用辗转相除法求两个正整数的最大公因子例:用辗转相除法求两个正整数的最大公因子1 1输入输入m m和和n n2 2若若mn, mn, 则交换则交换m m和和n n3 3m m除以除以n n,余数为,余数为r r4 4若若r=0r=0,则,则n n为最大公因子,输出为最大公因子,输出n n,否则执行,否则执行5 55

2、5m=nm=n,n=rn=r,转,转3 3算法特征:算法特征:有穷性、确定性、有效性有穷性、确定性、有效性、输入、输出、输入、输出 算法的描述方法:算法的描述方法:自然语言自然语言流程图流程图NS图图伪代码伪代码用辗转相除法求两个正整数的最大公因子用辗转相除法求两个正整数的最大公因子input m,n;input m,n;if mif mn20&x20&x=(3)c=0 0&c=&c=(4)c=a a&c=&c=|c=A A&c&c 99&t99&tb) printf(Its right);if(表达式)语句(表达式)语句if(a+bc&b+ca&c+ab) printf(能构成一个三角形能构

3、成一个三角形n);if(表达式)语句(表达式)语句1 else 语句语句2表达式表达式Y YN语句语句1流程图流程图语句语句2if (ab) max=a;else max=b; YN表达式表达式语句语句1语句语句2N-SN-S图图if(ab) printf(a比比b大大);else printf(a比比b小小);if(a+bc&b+ca&c+ab) printf(it is an triangle);else printf(it is not an triangle);编程示例int main( )char ch; ch=getchar(); if(ch=A&ch=A&ch=a&chb) t=

4、a; a=b; b=t;讨论:讨论:if(ab) t=a; a=b; b=t;if(bc) max=b; min=c;else max=c; min=b;if(a=0) printf(a equal to zero);else printf(a is not equal to zero); 嵌套的嵌套的if语句语句输入输入x的值,利用函数计算的值,利用函数计算y的值的值 -1 (x0)int main( )int x,y; scanf(%d,&x); if(x0) y= 1; else if(x=0) y=0; else y=1; printf(x=%d,y=%dn,x,y); return

5、0; x0y=-1x=0y=0y=1NNYY -1 (x0) if(x=0) if(x0) y= 1; else y=0; else y=-1; y=-1; if(x=0) if(x0) y= 1; else y=0; y=0; if(x!=0) if(x0) y= 1; else y=-1;if(num500) cost=0.15; else if(num300) cost=0.10; else if(num100) cost=0.075; else if(num50) cost=0.05; else cost=0;num500cost=0.15YNnum300num100cost=0.05

6、cost=0.075cost=0.1YYNcost=0num50NNYif if(表达式(表达式(表达式(表达式1 1) 语句语句语句语句1 1 else ifelse if(表达式(表达式(表达式(表达式2 2) 语句语句语句语句2 2 else ifelse if(表达式(表达式(表达式(表达式3 3) 语句语句语句语句3 3 . else ifelse if(表达式(表达式(表达式(表达式n n) 语句语句语句语句n n else else 语句语句语句语句n+1n+1 e1s1YNe2e3sn+1s3s2YYN if(e1) if(e2) s1 else s2else s3if(e1)

7、 if(e2) s1 else s2else if(e3) s3 else s4e1e2s1s2s3Y YY YNNe1e2s1s2s3s4e3YY YNNNY if(e1) if(e2) s1 else if(e3) s2 else s3没有没有if 就没有就没有elseelse总是与最近的尚未配对的总是与最近的尚未配对的if结合结合e1e2s1s2s3e3YYYNNNe1e2s1s2s3e3YYYNNN找找a、b、c的最大值的最大值if(ab) if(ac) max=a; else max=c;else if(bc) max=b; else max=c;max=a;if(maxb) max

8、=b;if(maxb&ac) max=a;if(bc&ba) max=b;else max=c;1格式:格式: 表达式表达式1 ?表达式?表达式2 :表达式:表达式32语义:语义: if(表达式(表达式1) 表达式表达式2 else 表达式表达式3 条件表达式条件表达式max=(ab) ? a : b; x=x=表达式表达式1 1 ?表达式?表达式2 2 :表达式:表达式3 3表达式表达式表达式表达式1 1 1 1x=x=x=x=表达式表达式表达式表达式2 2 2 2x=x=x=x=表达式表达式表达式表达式3 3 3 3NYmain( )char ch; scanf(%c,&ch); ch=(

9、ch=A&chb?a:ab?a:cd?c:dcd?c:d; ;5 5结果类型:与表达式结果类型:与表达式2 2或表达式或表达式3 3相同相同三、三、switch语句语句switch(ch)case A: printf(Good!n); break; case B: printf(Good!n); break; case C: printf(Passn); break; case D: printf(Fail!n); break;chGoodPassFailch=Ach=Bch=Dcasech=Cswitch(ch)csae A: case B: printf(Good!n); break; c

10、ase C: printf(Passn); break; case D: printf(Fail!n); break;chGoodPassFailch=Ach=Bch=Dcasech=C格式:格式:switch (表达式表达式) case 常量表达式常量表达式1:语句串:语句串1 case 常量表达式常量表达式2:语句串:语句串2 case 常量表达式常量表达式n:语句串:语句串n default :语句串:语句串n+1 表达式只能是整型、字符型、枚举类型表达式只能是整型、字符型、枚举类型各常量表达式中不能有相同的值各常量表达式中不能有相同的值执行完某个分支后,执行完某个分支后, 要用要用br

11、eak语句终止语句终止switch语句的执行语句的执行不同的常量表达式可以执行相同的语句串不同的常量表达式可以执行相同的语句串switch(ch)csae A: case B: printf(Good!n); case C: printf(Pass!n); case D: printf(Fail!n);switch(ch)csae A | B: printf(Good!n); case C: printf(Pass!n); case D: printf(Fail!n);switch(ch)csae A= ch0?-4ac0?N N N N计算并输出两个虚根计算并输出两个虚根计算并输出两个虚根计

12、算并输出两个虚根N N N N输入系数输入系数a a、b b、c c开始开始结束结束int main( )float a,b,c,p,q,disc; printf(Please enter a,b,c:); scanf(%f,%f,%f,&a,&b,&c); printf(The Equation:); if(fabs(a)=1e-6) printf(has one roots:%6.2fn,-c/b);else disc=b*b-4*a*c; p=-b/(2*a); q=sqrt(fabs(disc)/(2*a); if(fabs(disc)1e-6) printf(has two uneq

13、ual real roots: %6.2f and %6.2fn,p+q,p-q); else printf(has complex roots:n); printf(%6.2f+%6.2f in, p,q); printf(%6.2f-%6.2f in, p,q); 公里公里 折扣折扣 =250 =500 =1000 =2000 =3000 15%运费计算运费计算每公里每吨货物的每公里每吨货物的 基本运费为基本运费为p货物重量为货物重量为w距离为距离为s 折扣为折扣为d总运费为:总运费为: f=p*w*s*(1-d)输入输入p p、w w、s s输出输出f fs/250s/250d=0d=2

14、d=5d=8d=10d=15f=p*w*s*(1-d/100.0); 公里公里 折扣折扣 =250 =500 =1000 =2000 =3000 15%0 01 14 42 23 35 56 67 78 89 910101111= 12 12int main( )int c,s; float p,w,d,f; printf(Input p,w,s:); scanf(%f,%f,%d,&p,&w,&s); if (s=3000) c=12; else c=s/250;switch(c) case 0: d=0; break; case 1: d=2; break; case 2: case 3:

15、 d=5; break; case 4: case 5: case 6: case 7: d=8; break; case 8: case 9: case 10: case 11:d=10; break; case 12:d=15;break; f=p*w*s*(1-d/100.0); printf(freight=%15.4fn,f); return 0;intmain()charchoice;printf(n-欢迎点菜-n);/显示菜单printf(1.西红柿炒鸡蛋n);printf(2.宫爆鸡丁n);printf(3.鱼香肉丝n);printf(0.退出n);printf(请选择(0-3

16、):);choice=getchar();/选择switch(choice)case1:printf(西红柿炒鸡蛋1份,请稍后);break;case2:printf(宫爆鸡丁1份,请稍后);break;case3:printf(鱼香肉丝1份,请稍后);break;printf(n欢迎光临!n);4.3循环结构程序设计循环结构程序设计往前走,往前走,直到直到到达目标为止到达目标为止没到?没到?往前走往前走YN只要只要.计算计算1+2+3+.+1001+2+3+.+100sum=1+2;/sum存放和值sum=sum+3;sum=sum+4;.sum=sum+100;sum=0;/sum存放和值

17、sum=sum+1;sum=sum+2;sum=sum+3;sum=sum+4;.sum=sum+100;sum=0;/sum存放和值i=1;sum=sum+i;i=i+1;sum=sum+i;i=i+1;sum=sum+i;i=i+1;sum=sum+i;i=i+1;.sum=sum+i;计算计算1+2+3+.+1001+2+3+.+100int i,sum;sum=0; i=1; while(i=100) sum+=i; i+;printf(%d,sum);sum=sum+i; i+;sum=0;i=1;i=100NY输出输出sum计算计算1+2+3+.+1001+2+3+.+100int

18、 i,sum;sum=0; for(i=1; i=100; i+) sum+=i; printf(%d,sum);sum=sum+i;sum=0;i=1;i=100NY输出输出sum i+;sum=sum+i; i+;sum=0;i=1;i=100NY输出输出sumsum=sum+i;sum=0;i=1;i=100NY输出输出sum i+;计算计算1+1+3 3+ +5 5+.+.+9999sum=sum+i; i+=2;sum=0;i=1;i=100NY输出输出sum计算计算1 1-3-3+ +5-75-7.-99-99sum=sum+s*i; i+=2; s=-s;sum=0;i=1;s=

19、1;i100NY输出输出sum符号s,初始为1;s=-s;i=100输入输入x x的值的值sum=sum+x; i+;Y计算计算x1+x2+x3+.+x100x1+x2+x3+.+x100i=1;输出输出sumN输出输出sumNi=100sum=0;sum=sum+s/i;s=-s; i+;Yi=1;输出输出sumN输出输出sumN符号s,初始为1;s=-s;计算计算1+2+3+.+1001+2+3+.+100int i,sum;sum=0; i=1; do sum+=i; i+; while(i=100);printf(%d,sum);sum=sum+i; i+;sum=0;i=1;i=10

20、0NY输出输出sum实现循环的方式:实现循环的方式:whiledo whilefor if goto循环条件循环条件结束条件结束条件循环的内容循环的内容循环要素:循环要素:表达式语句YN一、一、 while语句语句表达式语句非00格式:格式: whilewhile(表达式)语句(表达式)语句;语义:语义: 只要表达式为真只要表达式为真 重复执行语句重复执行语句 while while语句语句循环体循环体循环条件循环条件表达式语句非00whilewhile(表达式)(表达式) 语句语句; while语句int main( ) int i,sum=0; i=1; while(i=100) sum+

21、=i; i+; printf(%dn,sum); return 0;循环体循环体循环控制变量循环控制变量循环条件循环条件二、二、 do while语句语句表达式表达式语句语句非非0 00 0格式:格式: do 语句串;语句串; while(表达式)(表达式);语义:语义: 执行语句串直到表达式为假执行语句串直到表达式为假do whiledo while语句语句循环体循环体循环条件循环条件do 语句串;语句串; while(表达式);(表达式);int main( )int i=1,sum=0; do sum+=i+; while(i=100); printf(%d,sum); return 0

22、;循环控制变量循环控制变量表达式表达式语句语句非非0 00 0do whiledo while语句语句循环体循环体循环条件循环条件三、三、for 语句语句格式:格式: for(for(表达式表达式1;1;表达式表达式2;2;表达式表达式3) 3) 语句语句语义:语义: 表达式表达式1;1; while( while(表达式表达式2)2) 语句语句; ; 表达式表达式3;3; for for语句语句表达式表达式2表达式表达式1非非00表达式表达式3语句语句循环体循环体for(e1;e2;e3) sfor(e1;e2;e3) ssum=0;for(i=1; i=100; i+) sum=sum+i

23、; for(i=1,sum=0; i=100; sum=sum+i+);e2e1非非00e3s循环控制变量循环控制变量for(i=1,sum=0; i=100; i+) sum=sum+i; i=100i=1非非00i+sum=sum+i循环体循环体 for(e1;e2;e3) sfor(i=1; i=100;) sum+=i; i+;表达式表达式e1、e3可以省略可以省略 i=1; sum=0; for(;i=100; i+) sum+=i;省略省略e2是一个死循环是一个死循环for(i=1; ; i+) s相当于相当于i=1; while(1)s; i+;表达式表达式语句语句非非00 do

24、 while语句语句表达式表达式语句语句非非00 while语句语句表达式表达式语句语句表达式表达式语句语句两两类类循循环环的的对对比比当型循环当型循环直到型循环直到型循环表达式表达式语句语句非非00循环体执行循环体执行? ?次次, ,条件表达式判断条件表达式判断? ?遍遍表达式表达式语句语句非非00n=3;while(n-) printf(%d,n); printf(%d,n);格式:格式: goto 语句标号;语句标号;标识符标识符goto语句的作用:语句的作用:(1)与)与if语句一起构成循环语句一起构成循环(2)从多重循环中跳转到循环体外)从多重循环中跳转到循环体外 四、四、 goto

25、语句语句int main( ) int i,sum=0; i=1;loop: if(i=100) scanf(%d,&x); sum=sum+x; i+; goto loop; printf(%dn,sum); return 0;goto与与if语句构成循环语句构成循环sum=sum+x; i+;sum=0;i=1;i=100NY输出输出sum要写出一个正确的循环结构,要写出一个正确的循环结构,对循环控制变量要做三方面的工作:对循环控制变量要做三方面的工作: 1 1、对循环控制变量赋初值。、对循环控制变量赋初值。 2 2、将循环控制变量写入正确的控制条件。、将循环控制变量写入正确的控制条件。

26、3 3、对循环控制变量值的更新。、对循环控制变量值的更新。如如 x=1; s=0;x=1; s=0; /* /* 给给x x赋初值赋初值 * */ / while(x10)while(x10) /*/*循环条件循环条件* */ / s=s+x;s=s+x; x+; x+; /*/*对对x x的值做更新、调整的值做更新、调整* */ / 输入全班输入全班N N个人的分数,求最高分个人的分数,求最高分#include#define N 10int main( ) int i,max=0,score; printf(input %d score:, N); for(i=0; imax) max=sc

27、ore; printf(max=%dn,max); return 0;输入全班输入全班N N个人的分数,求最高分个人的分数,求最高分#define N 10int main( ) int i,max=0,score; printf(input %d score:,N); i=1;i=1; while(imax) max=score; i+;i+; printf(max=%dn,max); return 0;输入全班输入全班N N个人的分数,求最高分个人的分数,求最高分#define N 10int main( ) int i,max=0,score; printf(input %d score

28、:,N); i=1;i=1; do scanf(%d, &score); if(scoremax) max=score; i+;i+; while(i=N); printf(max=%dn,max); return 0;#includeint main( ) int a,b,c; float s,area; do printf(请输入三角形的三条边长度:请输入三角形的三条边长度:); scanf(%d%d%d,&a,&b,&c); while(a+b=c|a+c=b|b+c=a); s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(are

29、a=%.2fn,area); return 0;int i,j;long sum;sum=0;for(i=1,j=100; i=j; i+,j-) sum+=i+j; printf(sum=%ldn,sum);i=ji=1,j=100非非00i+,j-sum+=i+j讨论讨论: :(1)(1)while(count!=10);while(count!=10); count=1; count=1; sum=sum+x; sum=sum+x; count=count+1; count=count+1; (2)(2)name=10;name=10;doname=name+1;doname=name+

30、1; printf( printf(okok););while(name=1)while(name=1)五、五、 break与与continue语句语句breakbreak语句语句语句语句( (跳出跳出跳出跳出.).)用在用在switch语句或循环语句中语句或循环语句中跳出跳出switch语句,语句, 执行执行switch后面的语句后面的语句跳出循环体,跳出循环体, 执行该循环语句后面的语句执行该循环语句后面的语句e1非非00s2s1e2非非00breakbreak例:例:for(r=1; r100) break; printf(%f ,area); continue语句语句(跳过循环的一部分

31、跳过循环的一部分)作用:提前结束本次循环,继续下一次循环作用:提前结束本次循环,继续下一次循环int n;for(n=100; n=1e-6) pi=pi+term; n+=2; sign= - sign; term=sign/n; term=1; pi=0; n=1.0; sign=1;判断判断m是否是素数是否是素数输入输入m m判断判断m m是否是素数是否是素数输出结果输出结果.k=sqrt(m)i=2ikY YN Nm m不是素数不是素数m m是素数是素数#include int main( )int m,i,k; printf(m=); scanf(%d,&m); k=sqrt(m);

32、 for(i=2; ik) printf(yes,%d is a prime numbern,m); else printf(no,%d isnt a prime numbern,m); return 0;k=sqrt(m)i=2;flag=1i=k&flag i能被能被m整除整除i+Y YN NY YN Nflag0Y YN Nm m不是素数不是素数m m是素数是素数flag=0#include int main( )int m,i,k; int flag=1; printf(m=); scanf(%d,&m); k=sqrt(m); for(i=2; i=k ; i+) if(m%i=0)

33、 flag=0; if(flag) printf(yes,%d is a prime numbern,m); else printf(no,%d isnt a prime numbern,m); return 0;&1=flag七、循环嵌套七、循环嵌套while(e) s;dos;while(e);for(e1;e2;e3) s;while(e1) . while (e2) s; for(e1;e2;e3) . while (e4) s; s=0;for(i=0; i10; i+) for(j=0; j10; j+) s+=i*10+j; printf(s=%dn,s);i=0i10s=0j=

34、0j10s+=i*10+jj+i+NNyy输出输出输出输出ss=0;s=0;for(i=0; i10; i+)for(i=0; i10; i+) for(j=0; j10; j+) for(j=0; j10; j+) s+=i*10+j; s+=i*10+j;s=0;s=0;for(i=0; i10; i+);for(i=0; i10; i+); for(j=0; j10; j+); for(j=0; j10; j+); s+=i*10+j; s+=i*10+j;区别!区别!s=0;s=0;for(i=0; i10; i+)for(i=0; i10; i+) for(i=0; i10; i+)

35、 for(i=0; i10; i+) s+=i*10+i; s+=i*10+i;i=0i10s=0i=0i10s+=i*10+ii+i+NNyy输出输出输出输出ss=0;s=0;for(i=0; i10; i+)for(i=0; i10; i+) for(i=0; i10; i+) for(i=0; i10; i+) s+=i*10+i; s+=i*10+i; #include int main( ) int m,k,n=0,i; printf(n); return 0; 求求100100至至200200间的全部素数间的全部素数k=sqrt(m);for(i=2; ik) printf(%d

36、,m); for (m=101; m200; m+=2) n+; if(n%10=0) printf(n);一种运用循环的算法一种运用循环的算法-枚举枚举 对问题的所有可能一一测试,直到找出解或对问题的所有可能一一测试,直到找出解或将全部状态测试过为止。将全部状态测试过为止。有男人、女人、小孩共有男人、女人、小孩共3030人,在一家饭馆里吃饭人,在一家饭馆里吃饭共花了共花了5050元,每个男人花元,每个男人花3 3元,每个女人花元,每个女人花2 2元,元,每个小孩花每个小孩花1 1元。问男人、女人、小孩各有多少人元。问男人、女人、小孩各有多少人?men的值:的值:0-16women的值:的值:

37、0-25children的值:的值:30-men-womenint main( ) int men,women,children; for(men=0; men=16; men+) for(women=0; women=25; women+) children=30-men-women; if(men*3+women*2+children=50) printf(men=%d,women=%dn,men,women); printf(children=%dn,children); 一种运用循环的算法一种运用循环的算法-迭代迭代 不断用新值取代变量的旧值或由旧值递不断用新值取代变量的旧值或由旧值递

38、推出变量的新值的过程推出变量的新值的过程有一对兔子,从出生后第有一对兔子,从出生后第3 3个月起每个月都生一对兔个月起每个月都生一对兔子。小兔子长到第子。小兔子长到第3 3个月后每个月又生一对兔子。假个月后每个月又生一对兔子。假设所有的兔子都不死,问每个月的兔子总数是多少?设所有的兔子都不死,问每个月的兔子总数是多少?设不满设不满1个月的为小兔子个月的为小兔子 满满1个月不满个月不满2个月的为中兔子个月的为中兔子 满满3个月以上的为老兔子个月以上的为老兔子月份小兔子对数中兔子对数老兔子对数兔子总数1100 12010 13101 24111 35212 563238753513第几个月小兔子对

39、数中兔子对数老兔子对数兔子总数1100 12010 13101 24111 35212 563238753513第第i月的小兔子月的小兔子第第i月的中兔子月的中兔子第第i月的老兔子月的老兔子第第i+1月的小兔子月的小兔子第第i+1月的中兔子月的中兔子第第i+1月的老兔子月的老兔子第第i+2月的小兔子月的小兔子第第i+2月的中兔子月的中兔子第第i+2月的老兔子月的老兔子设:设:f1表示第表示第i月的兔子数,月的兔子数,f2表示第表示第i+1月的兔子数月的兔子数f表示第表示第i+2月的兔子数月的兔子数f1=1i=1f2=1f1=1i=2f2=2f=f1+f2f=f1+f2f1=2i=3f2=3f=

40、f1+f2int main( ) int f1=1,f2=1,f; int i; printf(%12d%12d,f1,f2); for(i=3; i=40; i+) f=f1+f2; printf(%l2d,f); if(i%4=0) printf(n); f1=f2; f2=f; return 0;m=55n=15r=m%n=10用辗转相除法求两个正整数的最大公因子用辗转相除法求两个正整数的最大公因子1 1输入输入m m和和n n2 2若若mn, mn, 则交换则交换m m和和n n3 3m m除以除以n n,余数为,余数为r r4 4若若r=0r=0,则,则n n为最大公因子,输出为最大

41、公因子,输出n n,否则执行,否则执行5 55 5n nm m,r rn n,转,转3 3m=15n=10r=m%n=5m=10n=5r=m%n=0m=5n=0(终止)开始开始输入输入m和和nmnr=m%nr=0m=n; n=r输出输出n交换交换m和和n结束结束YNYN输入输入m和和nmn交换交换m和和nYNr=m%nr!=0m=n; n=rr=m%n输出输出n循循环环分分支支顺顺序序int main() int m,n,r; scanf(%d,%d,&m,&n); if(mn) r=m,m=n,n=r; do r=m%n; m=n; n=r; while(n); printf(greates

42、t common divisor is %dn,m); charchoice;printf(n-欢迎点菜-n);/显示菜单doprintf(1.西红柿炒鸡蛋n);printf(2.宫爆鸡丁n);printf(3.鱼香肉丝n);printf(0.退出n);printf(请选择(0-3):);choice=getchar();getchar();/选择switch(choice)case1:printf(西红柿炒鸡蛋1份,请稍后n);break;case2:printf(宫爆鸡丁1份,请稍后n);break;case3:printf(鱼香肉丝1份,请稍后n);break;while(choice!

43、=0);printf(n欢迎光临!n);4.4 结构化程序设计方法结构化程序设计方法1966年,年,C.Bohm和和G.Jacopini首先证明了:首先证明了:只用顺序、选择、循环三种基本的控制结构就能只用顺序、选择、循环三种基本的控制结构就能实现任何单入口、单出口的程序实现任何单入口、单出口的程序给结构化程序设计奠定了基础给结构化程序设计奠定了基础结构化程序设计是一种进行程序设计的原则和方法,结构化程序设计是一种进行程序设计的原则和方法,避免使用避免使用goto语句语句采用采用自顶向下、逐步求精自顶向下、逐步求精方法进行程序设计方法进行程序设计程序的特点程序的特点:结构清晰结构清晰 容易阅读

44、容易阅读 容易修改容易修改 容易验证容易验证采用采用顺序、选顺序、选择、循环三种基择、循环三种基本的控制结构本的控制结构采用采用自顶向下、自顶向下、逐步求精、模块逐步求精、模块化方法进行程序化方法进行程序设计设计结构化程序设计思想:结构化程序设计思想:输入输入m和和nmn交换交换m和和nYNr=m%nr!=0m=n; n=rr=m%n输出输出n循循环环分分支支顺顺序序for(a=2; a1000; a+)找出找出10001000之内的所有完数之内的所有完数(除自身之外的所有真因子(除自身之外的所有真因子之和等于它本身)之和等于它本身)for(a=2; a1000; a+)判断判断a a是否是完

45、数;是否是完数;如果如果a a是完数是完数输出它的所有因子输出它的所有因子计算计算a a的所有因子之和的所有因子之和sumsum如果如果a=suma=sum输出它的所有因子输出它的所有因子计算计算a的所有因子之和的所有因子之和sum sum=0;for(i=1; i=a/2; i+) if(a%i=0) sum+=i;输出输出a的所有因子的所有因子for(i=1; i=a/2; i+) a%i=0printf(%5d,i);y yN Nfor(a=2; a1000; a+)sum=0;for(i=1; i=a/2; i+)a%i=0sum+=i;printf(%5d,i);a=suma=sumfor(i=1; ib)t=a;a=b;b=t;elsec=a;print(%d,c);return0;newfile12.c:7:error:syntaxerrorbeforeelsenewfile12.c:7:error:syntaxerrorbeforeelse undefinedreferencetoprintundefinedreferencetoprint

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号