《CH3程序控制结构.ppt》由会员分享,可在线阅读,更多相关《CH3程序控制结构.ppt(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、CH3 程序控制程序控制结构结构主讲:邹显春主讲:邹显春E-Mail:分析问题分析问题构建算法构建算法选择选择描述描述方法方法描述算法描述算法利用利用C程序程序语句描述算法语句描述算法中的操作中的操作根据根据C程序结构程序结构完整完整C程序代码程序代码调试程序调试程序调试数据调试数据分析结果分析结果1.问题分析与算法设计问题分析与算法设计2.编写编写程序程序3.程序编译与运行调试程序编译与运行调试复习思考复习思考:编写编写C程序的基本过程程序的基本过程?【例】已知华氏温度,求 对应的摄氏温度-顺序结构程序设计 摄氏温度 C=(5/9)(F-32)1.1.问题分析与算法设问题分析与算法设计计 算
2、法描述算法描述.自然语言表示:自然语言表示:()输入华氏温度值()输入华氏温度值()根据公式计算()根据公式计算()输出摄氏温度()输出摄氏温度输入半径fahr计算celsius输出celsius开始开始输入输入fahr计算计算celsius输出输出celsius结束结束scanf(“%d”,&fahr);celsius=5*(fahr-32)/9;printf(fahr=%d,celsius=%dn,fahr,celsius);传统流程图传统流程图图图2.编写代码#includevoidmain()intcelsius,fahr;/变量定义变量定义scanf(%d,&fahr);/变量使用变
3、量使用celsius=5*(fahr-32)/9;printf(fahr=%d,celsius=%dn,fahr,celsius);/输出结果输出结果3.编辑编译连接运行编辑编译连接运行分析结果是否分析结果是否与实际问题相与实际问题相符合符合?编程序风格讨论编程序风格讨论?在上述程序中很显然与用户交互在上述程序中很显然与用户交互性不好性不好.若希望上述程序的运行情况若希望上述程序的运行情况如图所示如图所示,应如何修改程序应如何修改程序可将上述程序改为可将上述程序改为#includevoidmain()intcelsius,fahr;/变量定义变量定义printf(请输入华氏温度:请输入华氏温度
4、:n);scanf(%d,&fahr);/变量使用变量使用celsius=5*(fahr-32)/9;printf(华氏温度华氏温度%d对应的摄氏温度是对应的摄氏温度是%dn,fahr,celsius);/输出结果输出结果【实例【实例1】编写程序求分段函数的值】编写程序求分段函数的值1.问题分析与算法设计问题分析与算法设计根据根据x的值选择不同的函数计算,要求输出结果保留的值选择不同的函数计算,要求输出结果保留2位小数位小数算法方法算法方法1自然语言自然语言输入输入计算分段函数计算分段函数输出输出分支结构程序设计分支结构程序设计 X X1515成立成立不成立不成立y=4x/3y=4x/3z=2
5、.5xz=2.5x-10.5-10.5输入输入x x输出输出y y算法方法算法方法2N-S图图#include#include void main()void main()double x,y;double x,y;printf(printf(请输入请输入x:nx:n);/);/输入提示输入提示 scanf(scanf(%lf%lf,&x);/,&x);/输入数据输入数据 if(x=15)if(x=15)/if else/if else语句语句 y=4*x/3;y=4*x/3;else else y=2.5*x-10.5;y=2.5*x-10.5;printf(y=f(%f)=%.2fn,x,
6、y);printf(y=f(%f)=%.2fn,x,y);2.编写代码3.调试运行若用若用if语句实现语句实现#includevoidmain()doublex,y;printf(请输入请输入x:n);/输入提示输入提示scanf(%lf,&x);/输入数据输入数据if(x15)/if语句语句y=2.5*x-10.5;printf(y=f(%f)=%.2fn,x,y);温馨提示温馨提示1-1-软件测试的基本思想软件测试的基本思想 软件测试软件测试精心设计一批精心设计一批测试用例测试用例输入数据,预期输出结果输入数据,预期输出结果,然后分别,然后分别用这些测试用例运行程序,看程序的实际运行结果与
7、预期输出用这些测试用例运行程序,看程序的实际运行结果与预期输出结果是否一致。结果是否一致。if(x=15)y=4*x/3;elsey=2.5*x-10.5;9.5f(9.500000)=12.6715f(15.000000)=20.0021.3f(21.300000)=42.75if(表达式表达式)语句语句1else语句语句2if(x=15)y=4*x/3;elsey=2.5*x-10.5;语句语句1表达式表达式语句语句2真真假假温馨提示温馨提示2-if2-if语句一般形式语句一般形式(P(P4949)课堂思考:比较比较P47-49【例【例3.1】、】、【例【例3.2】在结构上以及实现方法与上
8、述例子在结构上以及实现方法与上述例子异同?异同?【实例【实例3】分段计算水费】分段计算水费l1问题分析与算法设计问题分析与算法设计思路:思路:2.编写代码#includevoidmain()doublex,y;printf(请输入请输入x:n);scanf(%lf,&x);if(x0)y=0;elseif(x=15)y=4*x/3;elsey=2.5*x-10.5;printf(y=f(%.2f)=%.2fn,x,y);3.调试运行if(表达式表达式1)语句语句1elseif(表达式表达式2)语句语句2elseif(表达式表达式n-1)语句语句n-1else语句语句n温馨提示温馨提示1-1-i
9、f-elseifif-elseif语句一般形式语句一般形式假假表达式表达式1表达式表达式2语句语句1语句语句2语句语句n-1语句语句n真真表达式表达式n-1真真假假真真假假假假#includevoidmain()inta=0,b=0,c=0,d=0,k;scanf(%d,&k);if(k=1)a+;elseif(k=2)b+;elseif(k=3)c+;elsed+;printf(a=%d,b=%d,c=%d,d=%d,a,b,c,d);a=1,b=0,c=0,d=0a=1,b=0,c=0,d=0当输入的值为当输入的值为2,2,结果是多少结果是多少?当输入的值为当输入的值为1,1,结果是多少结
10、果是多少?课堂思考:a=1,b=0,c=0,d=0a=1,b=0,c=0,d=0【例【例3 3】依据教材】依据教材P50 P50【例【例3.33.3】从键盘上输入两个实数,根据需要选择运算类型。从键盘上输入两个实数,根据需要选择运算类型。其运行情况如图所示其运行情况如图所示输入两个实数输入两个实数输出选择菜单输出选择菜单选择运算类型选择运算类型进行相应运算进行相应运算并输出并输出1.问题分析与算法设计问题分析与算法设计printf(nn%20s,运算列表菜单运算列表菜单n);printf(%20s,1.和运算和运算(+)n);printf(%20s,2.差运算差运算(-)n);printf(%
11、20s,3.积运算积运算(*)n);printf(%20s,4.除运算除运算(/)n);printf(请选择运算种类请选择运算种类(选择选择1/2/3/4):);输出选择菜单输出选择菜单输入两个实数输入两个实数printf(请输入两个实数请输入两个实数(之间用之间用,分隔分隔)n);scanf(%lf,%lf,&real_num1,&real_num2);printf(请选择运算种类请选择运算种类(选择选择1/2/3/4):);scanf(%d,&chioce);选择运算类型选择运算类型进进行行相相应应运运算算并并输输出出switch(chioce)/根据选择的运算种类进行相应的运算根据选择的
12、运算种类进行相应的运算case1:real_num=real_num1+real_num2;printf(%.2f+%.2f=%.2fn,real_num1,real_num2,real_num);break;case2:real_num=real_num1-real_num2;printf(%.2f-%.2f=%.2fn,real_num1,real_num2,real_num);break;default:printf(没有该运算没有该运算!n);#includevoidmain()doublereal_num1,real_num2,real_num;intchioce;printf(请输
13、入两个实数请输入两个实数(之间用之间用,分隔分隔)n);scanf(%lf,%lf,&real_num1,&real_num2);printf(nn%20s,运算列表菜单运算列表菜单n);printf(%20s,1.和运算和运算(+)n);printf(%20s,2.差运算差运算(-)n);printf(%20s,3.积运算积运算(*)n);printf(%20s,4.除运算除运算(/)n);printf(请选择运算种类请选择运算种类(选择选择1/2/3/4):);scanf(%d,&chioce);2.编写代码switch(chioce)/根据选择的运算种类进行相应的运算根据选择的运算种类进
14、行相应的运算case1:real_num=real_num1+real_num2;printf(%.2f+%.2f=%.2fn,real_num1,real_num2,real_num);break;case2:real_num=real_num1-real_num2;printf(%.2f-%.2f=%.2fn,real_num1,real_num2,real_num);break;case3:real_num=real_num1*real_num2;printf(%.2f*%.2f=%.2fn,real_num1,real_num2,real_num);break;case4:real_n
15、um=real_num1/real_num2;printf(%.2f%.2f=%.2fn,real_num1,real_num2,real_num);break;default:printf(没有该运算没有该运算!n);3.调试运行测试用例switchswitch(表达式)(表达式)casecase常量表达式常量表达式1:1:语句语句1 1casecase常量表达式常量表达式2:2:语句语句2 2casecase常量表达式常量表达式n:n:语句语句n ndefault :default :语句语句n+1n+1 温馨提示温馨提示1-1-switch语句语句(p52)按照考试成绩的等级输出百分制分
16、数段按照考试成绩的等级输出百分制分数段#includevoidmain()charch;ch=getchar();ch=(ch=a&ch=z)?ch-32:ch;switch(ch)caseA:printf(85100n);caseB:printf(7084n);caseC:printf(6069n);caseD:printf(85100n);default:printf(errorn);是否达到目标?break;break;break;break;课堂思考1:运输公司对用户计算运费。运输公司对用户计算运费。路程()越远,每公里运费越低。标准如下:路程()越远,每公里运费越低。标准如下:没有折
17、扣没有折扣 折扣折扣 折扣折扣 折扣折扣 折扣折扣 折扣折扣设每公里每吨货物的基本运费为,货物重为,距离为,设每公里每吨货物的基本运费为,货物重为,距离为,折扣为,则总运费的计算公式为:折扣为,则总运费的计算公式为:*()()课堂思考2:分析折扣变化的规律性:分析折扣变化的规律性:折扣的折扣的“变化点变化点”都是的倍数都是的倍数 sc=s/250折扣d250km00250s50012500s10002,351000s20004,5,6,782000s30008,9,10,1110 300012,13,.15l1问题分析与算法设计问题分析与算法设计#includevoidmain()intc,s
18、;floatp,w,d,f;scanf(%f,%f,%d,&p,&w,&s);c=(s=3000)?12:s/250;switch(c)case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;f=p*w*s*(1-d/100.0);printf(freight=%15.4fn,f);2.算法描述算法描述(省略省略).代码描述代码描述 -1 (x0)算法1:输入x若x0
19、,则y=1输出y 1.问题分析与算法设计问题分析与算法设计可用三个可用三个ifif语句实现语句实现算法算法2#includevoidmain()intx,y;printf(请输入整数请输入整数x:n);scanf(%d,&x);if(x=0)if(x0)y=1;else y=0;else y=-1;程序程序4:y=0;if(x=0)if(x0)y=1;else y=-1;程序程序3:y=-1;if(x!=0)if(x0)y=1;else y=0;正确?正确?正确?课堂思考1:if()if()if()if()语句语句1 1elseelse 语句语句2 2elseelseif()if()语句语句3
20、 3elseelse 语句语句4 4内嵌内嵌ifif在在ifif语句中又包含一个或多个语句中又包含一个或多个ifif语句称为语句称为ifif语句的嵌套。形式:语句的嵌套。形式:温馨提示温馨提示-if的嵌套的嵌套(p52)匹配规则:匹配规则:elseelse总是与它上面最近的、未配对的总是与它上面最近的、未配对的ifif语句配对。语句配对。例:if()if()语句1elseif()语句2else 语句3if()if()语句1elseif()语句2 else 语句3当当ifif和和elseelse数目不同时,可以加花括号来确定配对关系。数目不同时,可以加花括号来确定配对关系。希望希望配对配对课堂思
21、考:比较比较P52-53【例【例3.4】在结构上以】在结构上以及实现方法与上述例子异同?及实现方法与上述例子异同?【例【例5 5】依据教材】依据教材P50 P50【例【例3.53.5】5555位学生排成位学生排成4 4排排,学号学号1-551-55号号,按照按照1-41-4报报数数.任意给定一个学号任意给定一个学号,显示学生在第几列显示学生在第几列1.问题分析与算法设计问题分析与算法设计用用switch语句语句2.编编写写代代码码#includevoidmain()inti,n;i=0;printf(请输入学号请输入学号:n);scanf(%d,&n);if(n55)printf(Error!
22、);elsei=n%4;switch(i)case1:printf(%d号同学在第号同学在第1列列!n,n);break;case2:printf(%d号同学在第号同学在第2列列!n,n);break;case3:printf(%d号同学在第号同学在第3列列!n,n);break;case0:printf(%d号同学在第号同学在第4列列!n,n);break;循环结构程序设计循环结构程序设计 【实例【实例6 6】求】求1 1到到100100的和依据的和依据p56p56【例【例3.63.6】l1 1问题分析与算法设计问题分析与算法设计 求在一定范围内(求在一定范围内(1 1n n)、满足一定条件
23、)、满足一定条件(不超过不超过n)n)的若干整数的和,求累加和。的若干整数的和,求累加和。思路:设置一个变量思路:设置一个变量(s)(s),其初值为,其初值为0 0,然后在,然后在1 1n n中的所有数,将它们一个一个累加到中的所有数,将它们一个一个累加到s s中。中。l一步累加:一步累加:s=s+i;s=s+i;li i 值的变化通过值的变化通过i=i+1i=i+1实现实现实例分析实例分析3si612336i=i+1s=s+is=s+i实际上实际上:就是重复执行就是重复执行下列操作下列操作:s=s+Ii=i+1直到直到i i超过超过100100s=0,i=1i=100s=s+ii=i+1输出
24、输出s算法描述:将上述算法思想用算法描述:将上述算法思想用N-S图描述为图描述为:当当型型循循环环s=0,i=1i=100s=s+ii=i+1输出输出ss=0;i=1;while()i=100s=s+i;i=i+1;循环体循环体循环结构循环结构printf(“100以内的和是以内的和是:%d“,s);可用可用for、while、do-while实现实现用用while语句描述语句描述void main()s=0;i=1;while(i=100)s=s+i;i+;printf(s=%dn,s);int s,i;#include stdio.h主函数的首部主函数的首部算法实现算法实现数据类型数据类型
25、2编程序编程序#include stdio.hvoid main()int s,i;printf(s=%dn,s);s=0;i=1;while()i=100s=s+i;i=i+1;i=1,s=0for(;);s=s+ii=100 i+#include stdio.hvoid main()int s,i;printf(s=%dn,s);用用for语句描述语句描述#include stdio.hvoid main()int s=0,i=1;printf(s=%dn,s);dowhile(i=100);s=s+i;i+;用用do-while语句实现语句实现while(条件条件)循环体语句循环体语句;
26、真真假假while下一条语句下一条语句表达式表达式循环体语句循环体语句循环条件循环条件循环体循环体一条语句一条语句温馨提示温馨提示1-1-while语句语句(p57)do循环体语句循环体语句while(表达式表达式)先循环先循环后判断后判断真真假假表达表达式式循环体语句循环体语句do-while的下一条语句的下一条语句温馨提示温馨提示2-2-do-while语句语句(p58)l while 是先判别条件,再决定是否循环;l do-while 是先至少循环一次,然后再根据循环的结果决定是否继续循环。while 和 do-while 的比较真真假假表达式表达式循环体语句循环体语句do-while的
27、下一条语句的下一条语句真真假假while的下一条语句的下一条语句表达式表达式循环体语句循环体语句格式:格式:for(表达式表达式1;表达式表达式2;表达表达3)语句;语句;温馨提示温馨提示3-3-for语句语句(p60)100以内的自然数求和以内的自然数求和#include“stdio.h”Voidmain()inti,sum;for(i=1,sum=0;i=100;i+)sum=sum+i;printf(sum=%dn,sum);for语句使用灵活、形式多样语句使用灵活、形式多样 for(i=1,sum=0;i=100;)sum=sum+i;i+;for(i=1,sum=0;i=100;)s
28、um=sum+i+;for(i=1,sum=1;i+100;)sum=sum+i;for(i=1,sum=1;+i=100;)sum=sum+i;i=1,sum=1;for(;+i=100;)sum=sum+i;【实例【实例7】编程实现编程实现S=1!+2!+10!循环嵌套循环嵌套(p62)从从1!逐个求到逐个求到10!,每求到一每求到一个阶乘就求和个阶乘就求和求求解解思思路路?t=1;for(j=1;j=i;j+)/求求i!t=t*j;s=s+t;/阶乘求和阶乘求和for(i=1;i=10;i+)s=0;这就是一个循环嵌套结构这就是一个循环嵌套结构#includestdio.h#includ
29、emath.hvoidmain()inti,j;longt,s;s=0;for(i=1;i=10;i+)t=1;for(j=1;j=i;j+)t=t*j;/求求i!s=s+t;/阶乘求和阶乘求和printf(1!+2!+3!+.+10!=%ld,s);程程序序代代码码单重循环实现与双重循环实现的比较单重循环实现与双重循环实现的比较s=0;t=1;s=0;t=1;for(i=1;i=10;i+)for(i=1;i=10;i+)t=t*i;s=s+t;t=t*i;s=s+t;#includestdio.hvoidmain()inti,j;longt,s;s=0;for(i=1;i=10;i+)t=
30、1;for(j=1;j=i;j+)t=t*j;/求求i!s=s+t;/阶乘求和阶乘求和printf(1!+2!+3!+.+10!=%ld,s);用单重循环如何实现用单重循环如何实现?思考:思考:编程实现编程实现S=1+(1+2)+(1+2+3)+(1+2+10)?请比较请比较P62【例【例3.9】(中国古典算术问题(中国古典算术问题-搬搬砖问题砖问题)某工地需要搬运砖块,)某工地需要搬运砖块,36块砖,块砖,36人搬,人搬,已知男人一人搬已知男人一人搬4块,女人一人搬块,女人一人搬3块,小孩两人搬块,小孩两人搬1块。问男、女、小孩各需多少人?块。问男、女、小孩各需多少人?用三重循环实现用三重循
31、环实现-完整代码见备注完整代码见备注for(men=0;men=36;men+)for(women=0;women=36;women+)for(child=0;child=36;child+)if(men+women+child=36)&(men*4+women*3+child*0.5=36)printf(men=%d women=%d child=%dn,men,women,child);for(men=0;men=9;men+)for(women=0;women=12;women+)child=36womenmen;if(men*4+women*3+child*0.5=36)printf(
32、men=%d women=%d child=%dn,men,women,child);比较循环次数比较循环次数?用双重循环实现用双重循环实现-完整代码见备完整代码见备注注思考:思考:P63【例【例3.10】2008!的末尾有多少个!的末尾有多少个0?在在whilewhile、forfor、do-whliedo-whlie语语句句的的循循环环体体内内中中又又包含了另一个完整的循环结构,以包含了另一个完整的循环结构,以forfor为例为例内循环体内循环体 for(A1;A2;A3)B1for(A11;A21;A31)B2B3外循环体外循环体 温馨提示:温馨提示:什么是循环嵌套什么是循环嵌套?求解求
33、解A1A1求解求解A2A2执行执行B1B1求解求解A11A11求解求解A21A21执行执行B2B2求解求解A31A31结束循环结束循环YNYN执行执行A3A3三、三、非正常结束循环(非正常结束循环(p65p65)求求解解思思路路?范围:范围:if(n%7=0)printf(%d,n);for(n=1;n=100;n+)条件:条件:n能够被能够被7整除整除【实例【实例8】找出】找出1100中能够被中能够被7整除的数整除的数.(p66【例【例3.12】)程序编写程序编写#include#includevoid main()void main()int n;int n;for(n=1;n=100;n
34、+)for(n=1;n=100;n+)continuecontinuebreakbreak结果如何?结果如何?if(n%7=0)printf(%d,n);if(n%7!=0)printf(%d,n);2、continue格式:格式:continue;语义:结束本次循环语义:结束本次循环1、break语句语句形式:形式:break;语义:语义:结束循环结束循环温馨提示:温馨提示:beakbeak和和continuecontinue的含义的含义?【实实例例9】输输出出100200之之间间的的素素数数(P70【例【例3.16】)。)。关键是判断素数!何谓素数关键是判断素数!何谓素数?只能被只能被1和
35、它本身整除的数和它本身整除的数!问题分析与算法设计问题分析与算法设计 for(i=2;i=n-1;i+)if(n%i=0)break;if(i=n)printf(“n是素数是素数);若若n%i!=0,n%i!=0,继续循环继续循环直到所有直到所有i i的值取完的值取完,n n是不是是不是素数?素数?又这样判断又这样判断n n是是素数?素数?for(i=2;i=n-1;i+)if(n%i=0)break;if(i=n)printf(“n是素数是素数);思考:若思考:若n n的值是,共循环多少次?的值是,共循环多少次?次次思考:循环结束后思考:循环结束后i i的值是多少?的值是多少?次次改进!改进
36、!如如果果n n是是更更大大的的一一个个素素数数,效效率率就就会降低!怎么办?会降低!怎么办?k=sqrt(n);for(i=2;i=k+1)printf(“n是素数是素数);与上述算法等价的算法与上述算法等价的算法k=(int)sqrt(n);for(i=2;i=k+1)printf(t%2d,n);for(n=101;n=200;n+=2)voidmain()intn,i,k;#includemath.h#includestdio.h你认为这个程序最难理解的是什么?怎么办?引入标志变量引入标志变量f f来表示来表示n n是否是素数是否是素数在已学过的知识中用到过没有?在已学过的知识中用到过
37、没有?ff=0;f=1;/假设假设f为为1时,时,n为素数,为素数,f为为0时,时,n不是素数不是素数#includestdio.h#includemath.hvoidmain()intn,i,k,;for(n=101;n=200;n+=2)k=(int)sqrt(n);for(i=2;i=k+1f=1f#includestdio.h#includemath.hvoidmain()intn,i,k,f;for(n=101;n=200;n+=2)k=(int)sqrt(n);f=1;for(i=2;i=k;i+)if(n%i=0)f=0;break;if(f)printf(%8d,n);每行输出
38、多少个数?如果每行输出个数怎么办?10个个#includestdio.h#includemath.hvoidmain()intn,i,k,f,m=0;for(n=101;n=200;n+=2)k=(int)sqrt(n);f=1;for(i=2;i=k;i+)if(n%i=0)f=0;break;if(f)printf(%8d,n);m+;if(m%5=0)printf(n);本例题主要讨论了几个问题:.素数的算法实现.标志变量的使用.格式控制方法【实实例例10】编编程程求求60个个Fibonacci数数输输出出。假假设设每每行行输输出出6个个数数,。Fibonacci数数列列的的初初值值分分
39、别别是是0和和1。P59【例【例3-8】分析:任意第三个数是它前面两个数的和。即分析:任意第三个数是它前面两个数的和。即 f(n)=f(n-1)+f(n-2)f(n)=f(n-1)+f(n-2)。求解的方法有:求解的方法有:(1 1)每次计算两个每次计算两个FibonaciiFibonacii数数(2 2)每次计算一个)每次计算一个FibonaciiFibonacii数数(3 3)用数组来实现(第章)用数组来实现(第章)(4 4)用递归的方法来实现(第)用递归的方法来实现(第1010章)章)-10.2-10.2 aba=a+bb=a+b21358132134输出输出a,b方方法法printf(
40、%8d%8d,a,b);for(i=1;i=19;i+)printf(%8d%8d,a,b);a=a+b;b=a+b;for(i=1;i=20;i+)printf(%8d%8d,a,b);a=a+b;b=a+b;#includestdio.h#includemath.hvoidmain()inti,a=0,b=1;for(i=1;i=20;i+)printf(%10d%10d,a,b);a=a+b;b=a+b;printf(n);if(i%2=0)printf(n);每行输出个数怎么办?abc1112123235.c=a+ba=0;b=1;printf(%10d%10d,a,b);for(j=
41、1;j=38;j+)c=a+b;printf(%10d,c);a=b;b=c;a=bb=c方方法法2#includestdio.h#includemath.hvoidmain()longa,b,c,k/*k为输出的为输出的Fibonacci数的个数数的个数*/;intj;a=0;b=1;printf(%10d%10d,a,b);k=2;for(j=1;j=38;j+)c=a+b;printf(%10d,c);k+;if(k%6=0)printf(n);a=b;b=c;【例【例11】找出】找出1-10000中的水仙花数。中的水仙花数。P79习题习题关键在于如何分离正整数关键在于如何分离正整数n的
42、的各位数字各位数字i=n%10/分离个位分离个位j=(n/10)%10/分离十位分离十位k=n/100/分离个位分离个位如何描述算法?如何描述算法?如何延伸到任意位整数,如何修改?如何延伸到任意位整数,如何修改?为理解,以三位整数为例分析为理解,以三位整数为例分析#includestdio.h#includemath.hvoidmain()intn,i,r,s;for(i=1;i0,循环的功能是循环的功能是把把n的个各位数字分离出来并求立方和的个各位数字分离出来并求立方和*/r=n%10;/*求正整数求正整数n的个位数字的个位数字*/s=s+r*r*r;n=n/10;if(s=i)printf(%5d,i);/*输出满足条件的输出满足条件的数数*/思考题思考题从键盘上任意输入从键盘上任意输入20个正整数,将其每位数个正整数,将其每位数字的平方和输出字的平方和输出找出找出100以内所有满足条件的数这个数出现以内所有满足条件的数这个数出现在这个数的平方的最右边在这个数的平方的最右边3.从键盘上读入一个整数,统计该数的位数从键盘上读入一个整数,统计该数的位数小结:算法很多,请大家掌握算法小结:算法很多,请大家掌握算法