资源预览内容
第1页 / 共56页
第2页 / 共56页
第3页 / 共56页
第4页 / 共56页
第5页 / 共56页
第6页 / 共56页
第7页 / 共56页
第8页 / 共56页
第9页 / 共56页
第10页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
9.3 9.3 控制结构控制结构9.4 9.4 常用算法常用算法 同济大学同济大学9.3 9.3 控控 制制 结结 构构顺顺 序序 结结 构构选选 择择 结结 构构循循 环环 结结 构构本单元教学目的本单元教学目的了解三种基本控制结构的作用了解三种基本控制结构的作用熟练运用熟练运用ifif语句的多种分支形式描述程序语句的多种分支形式描述程序熟练运用三种循环语句描述各种重复操作熟练运用三种循环语句描述各种重复操作领会复合语句在控制结构中的正确运用领会复合语句在控制结构中的正确运用【引例引例】 利用公式利用公式s=s=编程求以编程求以a a、b b、c c做三边的三角形的面积。其中,做三边的三角形的面积。其中,p p为三为三角形三边和的一半,即:角形三边和的一半,即: p=(a+b+c)/2p=(a+b+c)/2分析:分析:求解问题的数学模型能够通过一个数学公式来描述时程求解问题的数学模型能够通过一个数学公式来描述时程序是最易实现的,按以往的知识可将问题的核心部分表序是最易实现的,按以往的知识可将问题的核心部分表达如下:达如下:一、一、 从引例了解三种结构从引例了解三种结构 程序段程序段1 1:cinabc;cinabc;p=(a+b+c)/2;p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c);s=sqrt(p*(p-a)*(p-b)*(p-c);coutcout三角形面积为三角形面积为:sendl;:sabc;cinabc;s=sqrt(p*(p-a)*(p-b)*(p-c);s=sqrt(p*(p-a)*(p-b)*(p-c);引例分析实现引例分析实现语句是有顺序的,顺序结构语句是有顺序的,顺序结构不是语句的简单罗列不是语句的简单罗列。(观察以下初学者常犯错误)(观察以下初学者常犯错误)未考虑公式的适用条件未考虑公式的适用条件运行包含程序段运行包含程序段1的程序并思考:的程序并思考:有条件地按公式求解有条件地按公式求解引例分析实现引例分析实现?问题产生的原因?问题产生的原因?如何解决?如何解决?分别输入两组测试数据分别输入两组测试数据3、4、5和和3、4、9, 结果如何?结果如何?程序段程序段2: p=(a+b+c)/2;p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c); s=sqrt(p*(p-a)*(p-b)*(p-c); cout cout三角形面积为三角形面积为:sendl;:sc&a+cb&b+ca )if( a+bc&a+cb&b+ca )单分支选择结构单分支选择结构if(if(表达式)表达式) 语句语句值非值非0执行语执行语句,否则跳过句,否则跳过引例分析实现引例分析实现复合语句:复合语句:一对花括号将多条语句组合成一一对花括号将多条语句组合成一个整体,以满足语法上对此位置个整体,以满足语法上对此位置只允许有一条语句的要求。只允许有一条语句的要求。用用逻辑表达式逻辑表达式表达表达三边构成条件三边构成条件A AB BA&BA&BA AB BA|BA|BA A!A!A逻辑运算符逻辑运算符种类:种类:逻辑与(逻辑与(&)逻辑或(逻辑或(|)逻辑非(!)逻辑非(!)A BA BA&BA&BA|BA|B!A!A0 00 0 0 0 0 01 10 10 1 0 0 1 11 11 01 0 0 0 1 10 01 11 1 1 1 1 10 00-false 1-true形式:形式: 作用:作用: 当程序中某个位置在语法上只允许一条语句,当程序中某个位置在语法上只允许一条语句,而在语义上要执行多条语句才能完成某个操作而在语义上要执行多条语句才能完成某个操作时,需要使用复合语句。时,需要使用复合语句。复合语句复合语句 变量定义变量定义 语句组语句组 程序段程序段3:if(a+bc&a+cb&b+ca)if(a+bc&a+cb&b+ca)p=(a+b+c)/2;p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c); s=sqrt(p*(p-a)*(p-b)*(p-c); cout cout三角形面积为三角形面积为:sendl;:sendl; 如何进一步改进程序段如何进一步改进程序段2,在不满足三角形三边构成,在不满足三角形三边构成条件时给予相应的提示?条件时给予相应的提示?elseelse cout cout不是三角形的三边不是三角形的三边endl;endl;双分支选择结构双分支选择结构if(if(表达式)表达式) 语句语句1 1elseelse 语句语句2 2非非0执行语执行语句句1,否则,否则执行语句执行语句2引例分析实现引例分析实现?进一步思考:进一步思考:如何在输入错误数据时允许重新输如何在输入错误数据时允许重新输入,以便能得到正确的结果?入,以便能得到正确的结果?程序段程序段4 4:coutcout数据错误数据错误, ,重新输入重新输入:endl;:abc; cinabc; p=(a+b+c)/2; p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c); s=sqrt(p*(p-a)*(p-b)*(p-c); cout cout三角形面积为三角形面积为:sendl;:sc&a+cb&b+ca)while(!(a+bc&a+cb&b+ca)引例分析实现引例分析实现不构成三边不构成三边二、二、 选择结构选择结构 特点:特点: 根据条件的值判断程序的流向。根据条件的值判断程序的流向。 种类种类: :ifif语句语句单分之单分之ifif语句语句双分支双分支if-elseif-else语句语句多分支多分支if-else-ifif-else-if语句语句switchswitch语句:实现多分支(本课程略去)语句:实现多分支(本课程略去)1 1、比较两数大小、比较两数大小1 12 2、比较两数大小、比较两数大小2 23 3 、成绩转换、成绩转换4 4、分组体检、分组体检典型案例典型案例ifif语句单分支形式示例语句单分支形式示例【例例1 1】对任意输入的两个整数对任意输入的两个整数x,y进行处进行处 理,要求将大数放在理,要求将大数放在x中,小数存于中,小数存于y中。中。要点:要点:当当xyxy时需交换两数时需交换两数?如何交换两个变量如何交换两个变量?如何把交换变量的语句置于某条件控制之下如何把交换变量的语句置于某条件控制之下t=x; x=y; y=t;t=x; x=y; y=t;if(xy)if(xy) t=x; x=y; y=t; t=x; x=y; y=t; #include iostream.h#include iostream.hvoid main()void main() int x,y,t; int x,y,t; cout cout输入入 x yendl;x yxy; cinxy; if (xy)if (xy) t=x; x=y; y=t; t=x; x=y; y=t; coutxyendl; coutxyendl; 程序实现程序实现xyt=x;x=y;y=t;true三条语句作为三条语句作为一个执行整体一个执行整体【例例2 2】将任意输入的两个整数将任意输入的两个整数x,y中较大的数放中较大的数放 在在max变量中,较小的数存于变量中,较小的数存于min变量中。变量中。ifif语句双分支形式示例语句双分支形式示例要点:要点:根据根据xy成立与否,分别对变量成立与否,分别对变量max 和和min赋不同值。赋不同值。关键:关键:多条语句置于分支控制之下的表达多条语句置于分支控制之下的表达#include iostream.h#include iostream.hvoid main()void main() int x,y,max,min; int x,y,max,min; cout cout输入入 x yendl;x yxy; cinxy; if (xy)if (xy) else else coutmin=minendl; coutmin=minendl; coutmax=maxendl; coutmax=maxendl; 程序实现程序实现观察并思考:观察并思考:? ?去掉去掉if表达式后面的一对花括表达式后面的一对花括号会怎样?号会怎样?原因原因 min=x; max=y; min=x; max=y; min=y; max=x; min=y; max=x;? ?去掉去掉else表达式后面的一对花表达式后面的一对花括号会怎样?括号会怎样?分别对照以下两组数据的结果分别对照以下两组数据的结果第一组:第一组: 10 20第二组:第二组: 20 10条件运算符条件运算符条件运算符是唯一的三目运算符,条件运算符是唯一的三目运算符,形式如下:形式如下: e1e1?e2e2:e3e3作用:作用: 当当e1成立时,将成立时,将e2的值作为整个表达式的的值作为整个表达式的值,不再计算值,不再计算e3的值;否则取的值;否则取e3的值作为的值作为整个表达式的结果,而不计算整个表达式的结果,而不计算e2的值。的值。前面的前面的if-else语句还可通过语句还可通过C语言中的条件运算实现:语言中的条件运算实现:xy xy ? ? min=x, max=y min=x, max=y : : min=y, max=x;min=y, max=x;ifif语句多分支形式语句多分支形式 if (if (表达式表达式1)1) 语句语句1 1 else if ( else if (表达式表达式2)2) 语句语句2 2 else if ( else if (表达式表达式n)n) 语句语句n n else else 语句语句n+1n+1说明:说明:任意一个表达式非任意一个表达式非0,则执行其后紧跟的一条语句而跳过所有其,则执行其后紧跟的一条语句而跳过所有其它语句;若所有表达式皆为它语句;若所有表达式皆为0,则执行语句,则执行语句n+1。ifif语句多分支形式示例语句多分支形式示例【例例3 3】已知百分制成绩已知百分制成绩mark,要求将其转换为,要求将其转换为 对应的五级制成绩,评定条件:对应的五级制成绩,评定条件:等级等级=A (mark90)B (80mark90)C (70mark80)D (60mark70)E (mark= 60mark = 60) ) grade= grade=D D; ;else if( mark = 70) else if( mark = 70) grade= grade=C C; ;else if (mark = 80) else if (mark = 80) grade= grade=B B; ;else if (mark =90) else if (mark =90) grade= grade=A A; ;elseelse grade= grade=E E; ;错误原因?错误原因?如何保证逻辑关系正确如何保证逻辑关系正确要点分析要点分析程序实现程序实现#include iostream.h#include iostream.hvoid main()void main() int mark;int mark;char grade;char grade;coutinput mark(0coutinput mark(0100):endl;100):mark;cinmark;if(mark = 90)if(mark = 90)grade=A;grade=A;else if(mark= 80)else if(mark= 80)grade=B;grade=B;else if(mark=70)else if(mark=70)grade=C;grade=C;else if(mark=60)else if(mark=60)grade=D;grade=D;elseelsegrade=E;grade=E;coutmark=mark,grade=gradeendl;coutmark=mark,grade=gradeendl; ?思考:若将五级表示为思考:若将五级表示为“优、良、中、及格、不优、良、中、及格、不及格及格”,还能使用,还能使用grade变变量吗?程序如何修改?量吗?程序如何修改?ifif语句的嵌套形式语句的嵌套形式【例例4 4】某学校对教工进行分组体检,分组如下:某学校对教工进行分组体检,分组如下: 40岁以下男教工岁以下男教工-A组组 40岁以上男教工岁以上男教工-B组组 40岁以下女教工岁以下女教工-C组组 40岁以上女教工岁以上女教工-D组组要点:要点:?按性别和年龄的条件组合,如何表达?按性别和年龄的条件组合,如何表达?if(sex=if(sex=m m) ) if(age40) if(age40) group=group=A A; ; else else group=group=B B; ;多分支语句实现多分支语句实现ifif后面的语句本身后面的语句本身又是一个又是一个ifif语句语句?同一性别条件下,按不同年龄分不同组,如何表达?同一性别条件下,按不同年龄分不同组,如何表达?ifif语句的嵌套形式语句的嵌套形式在在if语句中,如果语句中,如果if或或else后面的语句本身又是一个后面的语句本身又是一个if语句,则称为语句,则称为if语句的嵌套。如:语句的嵌套。如:if(表达式表达式1) if(表达式表达式11) 语句语句11 else 语句语句12else 语句语句2锯齿书写格式反映语句锯齿书写格式反映语句间的层次,以增强可读性间的层次,以增强可读性else始终与它上面最近始终与它上面最近的的if语句配对,但要求这语句配对,但要求这个个if语句没有其它的语句没有其它的else与之匹配与之匹配 。程序实现程序实现#include iostream.h#include iostream.hvoid main()void main() char sex,group; char sex,group; int age; int age; coutinput sex(f or m) and age:endl; coutinput sex(f or m) and age:sexage; cinsexage; if(sex=m) if(sex=m)if(age40)if(age40) group=A; group=A;elseelse group=B; group=B; else elseif(age40)if(age40) group=C; group=C;elseelse group=D; group=D; coutgroup=groupendl; coutgroup=groupendl; ?将此嵌套形式如将此嵌套形式如何转换成多分支形式何转换成多分支形式ifif和和elseelse本身的语句本身的语句又都是一个分支语句又都是一个分支语句三三 循环结构循环结构 while (while (表达式表达式) ) 语句语句for(for(表达式表达式1;1;表达式表达式2;2;表达式表达式3)3) 语句语句当型循环:当型循环:先判断后执行的循环语句(循环体可能一次也不执行)先判断后执行的循环语句(循环体可能一次也不执行)循环条件非循环条件非0时执行循环体,否则退出循环时执行循环体,否则退出循环循环条件循环条件循环体循环体(一条语句)(一条语句)1 1、累加和、累加和2 2、猜数游戏、猜数游戏3 3、ASCIIASCII码对照表码对照表4 4、求极大值、求极大值5 5、最大公约数、最大公约数6 6、素数、素数7 7、穷举法、穷举法9.4 9.4 常用算法和案例常用算法和案例【例例5 5】求求199的奇数和,即的奇数和,即s=1+3+5+ +99要点:要点:?如何表达重复求和操作如何表达重复求和操作循环结构示例循环结构示例?什么条件下重复求和什么条件下重复求和?重复什么动作重复什么动作?如何终止循环如何终止循环?求和前必要的准备求和前必要的准备循环结构循环结构循环条件循环条件循环体循环体循环体中包含使循环循环体中包含使循环条件发生改变的语句条件发生改变的语句实现实现 s=1+3+5+ +99循环前准备:循环前准备:s=0s=0i=1i=1循环条件循环条件循环体循环体#include iostream.h#include iostream.hvoid main( )void main( ) int i(1),s(0); int i(1),s(0); while(i100) while(i100) s=s+i; s=s+i; i=i+2; i=i+2; couts=sendl; couts=sendl; 关键:要求一条关键:要求一条语句,需复合语句,需复合程序实现(程序实现(whilewhile语句)语句)通项取第一个数通项取第一个数累加和清零累加和清零i100i100s=s+is=s+ii=i+2i=i+2s+=is+=ii+=2i+=2等价于等价于又如又如“+=+=”、“-=-=”、“* *= =”、“/=/=”和和“%=%=”等等都等等都是是复合赋值运算符,理解复合赋值运算符,理解关键关键:右端的表达式是一个整体右端的表达式是一个整体例如:例如: 变量变量+=+=表达式表达式变量变量 = = 变量表达式变量表达式复合赋值运算符复合赋值运算符赋值运算符还可以与算术运算符等组合在一起构成复合赋值运算符还可以与算术运算符等组合在一起构成复合赋值运算符,使得表达更加赋值运算符,使得表达更加简洁、高效简洁、高效,其含义如下,其含义如下:b/=a+2b/=a+2 b = b/(a+2) b = b/(a+2)等价于:等价于:#include iostream.h#include iostream.hvoid main( )void main( ) int int i(1),i(1),s(0); s(0); while( while(i100i100) ) s=s+i; s=s+i; i=i+2;i=i+2; couts=sendl; couts=sendl; 程序实现(程序实现(forfor语句)语句)#include iostream.h#include iostream.hvoid main( )void main( ) int i,s(0); int i,s(0); for( for(i=1i=1; ; i100;i100; i=i+2i=i+2) ) s=s+i; s=s+i; couts=sendl; couts=sguess;cinguess;if(guessresult)if(guessresult) cout cout“too too bigbig”; ;else if(guessresult)else if(guessresult) cout cout“too too smallsmall”; ;循环体循环体语句类型语句类型因要因要先输入一个猜测先输入一个猜测的数的数与计算机产生的与计算机产生的数做相等与否的判断,数做相等与否的判断,所以所以适合选择适合选择do-while语句。语句。要点分析要点分析#include iostream.h#include iostream.h#include stdlib.h#include stdlib.hvoid main()void main() int guess,result;int guess,result;coutcout产生随机数产生随机数endl;endl;result=rand()%101;result=rand()%101;dodo coutcout输入猜测的数输入猜测的数:endl;:guess;cinguess;if(guessresult)if(guessresult)couttoo big;couttoo big;else if(guessresult)else if(guessresult)couttoo small;couttoo small; while(guess!=result);while(guess!=result);coutcout恭喜你,猜对了!恭喜你,猜对了!endl;endl; 语句结尾语句结尾有分号有分号程序实现程序实现?如果限定最多只能猜如果限定最多只能猜5次程序如何修改次程序如何修改【例例7 7】将可打印的将可打印的ASCII码制成表格输出,使每个码制成表格输出,使每个字符与其编码值对应,每行打印字符与其编码值对应,每行打印7个字符。个字符。 ?忘记某个字符的忘记某个字符的ASCIIASCII码怎么办码怎么办要点:要点:?字符与整型数据如何转换字符与整型数据如何转换字符在内存中以字符在内存中以ASCII码形式存储码形式存储字符与整型数据间可相互赋值字符与整型数据间可相互赋值?如何控制每行打印如何控制每行打印7个字符个字符满足满足i%7=0时,输出换行时,输出换行?可打印字符有哪些可打印字符有哪些int a=cchar c=97ASCII码在码在32126之间的字符之间的字符程序实现程序实现#include iostream.h#include iostream.hvoid main()void main() int i(0),ascii;int i(0),ascii;char c;char c;couttttASCIIcouttttASCII码对照表码对照表endl;endl;for(ascii=32;ascii=126;ascii+)for(ascii=32;ascii=126;ascii+) c=ascii; c=ascii; coutc=asciit;coutc=asciit;i+;i+;if (i % 7=0) coutendl; if (i % 7=0) coutendl; coutendl;coutx;cinx;xmax=xxmax=x程序实现程序实现#include iostream.h#include iostream.hvoid main()void main() int x,xmax; int x,xmax; cinx; cinx; xmax=x; xmax=x; while(x!=-1) while(x!=-1) if(xxmax)if(xxmax) xmax=x; xmax=x;cinx;cinx; cout cout最大值最大值=xmaxendl;=xmaxn吗吗m n rm n r2424 10 4 10 4 1010 4 2 4 24 2 04 2 0#include iostream.h#include iostream.hvoid main( )void main( ) int m, n, t, r; int m, n, t, r; do do cout cout请输入请输入 m n endl;m n mn;cinmn; while(m=0|n=0); while(m=0|n=0); if(mn) if(mn) t=m; m=n; n=t; t=m; m=n; n=t; while( while( (r=m % n)(r=m % n) !=0) !=0) m=n; n=r; m=n; n=r; cout cout最大公约数为最大公约数为 nendl; nm; cinm; for(k=2;km;k+) for(k=2;km;k+)if(m%k=0)if(m%k=0) break; break; if(k=m) if(k=m)coutmcoutm是素数是素数endl;endl; else elsecoutmcoutm不是素数不是素数endl;endl; 循环退出的条件有几个?循环退出的条件有几个?循环怎样退出的?循环怎样退出的?如何输出某个范围内的所有素数?如何输出某个范围内的所有素数?程序实现程序实现辅助控制语句,强制退出循环辅助控制语句,强制退出循环【例例1111】将将2100之间的所有素数以每行之间的所有素数以每行8个输出。个输出。要点:要点: 前例的素数判别过程成为该列的循环体前例的素数判别过程成为该列的循环体?嵌套循环的内外循环体如何正确表达嵌套循环的内外循环体如何正确表达使用双重循环使用双重循环-嵌套循环嵌套循环逻辑上清楚哪些语句是外循环循环体,哪逻辑上清楚哪些语句是外循环循环体,哪些是内循环循环体些是内循环循环体明确循环体语句只能是一条语句,何时需明确循环体语句只能是一条语句,何时需以复合语句表达以复合语句表达程序实现程序实现#include iostream.h#include iostream.hvoid main()void main() int k,m,num=0;int k,m,num=0;for(m=2;m100;m+)for(m=2;m100;m+) for(k=2;km;k+)for(k=2;km;k+) if(m%k=0) if(m%k=0) break; break;if(k=m)if(k=m) coutmt;coutmt;num+;num+;if(num%8=0)if(num%8=0)coutendl;coutendl; 能下移一行吗?能下移一行吗?谁的循环体?谁的循环体?能放在复合语能放在复合语句之外吗?句之外吗?【例例1212】交通事故中肇事车辆撞人后逃逸,警方在交通事故中肇事车辆撞人后逃逸,警方在 现现场找到场找到3位目击证人询问肇事车辆位目击证人询问肇事车辆5位车牌号码。一位说位车牌号码。一位说只看清最左两位为只看清最左两位为27,一位说只看清最后位是,一位说只看清最后位是3,另一,另一位说牌号是位说牌号是67的倍数。请帮助找出该车牌号。的倍数。请帮助找出该车牌号。要点:要点:枚举法是通过逐个考察某类事件的所有可能情况,从枚举法是通过逐个考察某类事件的所有可能情况,从中找出符合要求的答案的方法。中找出符合要求的答案的方法。 ?需要枚举的数字有几位需要枚举的数字有几位?需要枚举的几位数字间的关系如何需要枚举的几位数字间的关系如何?5位车牌号如何描述位车牌号如何描述枚举法(穷举法)枚举法(穷举法)0909百位百位(i3)权重权重100十位十位(i2)权重权重10for(i3=0;i3=9;i3+)for(i3=0;i3=9;i3+) for(i2=0;i2=9;i2+) for(i2=0;i2=9;i2+) num=27003+i3*100+i2*10 num=27003+i3*100+i2*10十位、百位可十位、百位可为为09间数字间数字的任意组合,的任意组合,故用嵌套循环故用嵌套循环关键点分析关键点分析#include iostream.h#include iostream.hvoid main()void main() int num;int num;for(int i3=0;i3=9;i3+)for(int i3=0;i3=9;i3+) for(int i2=0;i2=9;i2+) for(int i2=0;i2=9;i2+) num=27003+i3*100+i2*10; num=27003+i3*100+i2*10; if(num %67=0 ) if(num %67=0 ) coutnumendl; coutnumendl; 程序实现程序实现筛选出符合筛选出符合条件的答案条件的答案什么是顺序结构?顺序结构是语句的简单罗列吗?什么是顺序结构?顺序结构是语句的简单罗列吗?什么是选择结构?有几种语句形式?什么是选择结构?有几种语句形式?if语句有几种分支形式?每种形式的作用是什么?语句有几种分支形式?每种形式的作用是什么?什么是什么是if语句的嵌套形式?如何理解嵌套形式的语语句的嵌套形式?如何理解嵌套形式的语义关系?义关系?在选择结构中如何正确使用复合语句?在选择结构中如何正确使用复合语句?本单元知识要点小结本单元知识要点小结什么是循环结构?何时使用循环语句?什么是循环结构?何时使用循环语句?循环语句有几种表达方式?执行机理有何不同?循环语句有几种表达方式?执行机理有何不同?最适合描述什么情况?最适合描述什么情况?循环条件和循环体如何确定?循环条件和循环体如何确定?在循环结构中如何正确使用复合语句?在循环结构中如何正确使用复合语句?循环语句中循环语句中break语句的作用是什么?语句的作用是什么?什么是嵌套的循环?如何确定多重循环中内外循什么是嵌套的循环?如何确定多重循环中内外循环的循环体?环的循环体?本单元知识要点小结本单元知识要点小结实验(选择结构)实验(选择结构)1 1、在购买某物品时,若所花的的钱、在购买某物品时,若所花的的钱x x在下述范围内,所在下述范围内,所付钱付钱y y按对应折扣支付:按对应折扣支付: x x x x10001000 0.9 0.9x x 1000 1000x x20002000 0.8 0.8x x 2000 2000x x30003000 0.7 0.7x x x x300030002、输入、输入x,y,z三个数,按从小到大的次序显示。显示三个数,按从小到大的次序显示。显示形式:形式:3、输入一元二次方程的系数,计算并输出一元二次方、输入一元二次方程的系数,计算并输出一元二次方程的两个实根。程的两个实根。 y=4、 编一模拟袖珍计算器的完整程序,运行结果见下编一模拟袖珍计算器的完整程序,运行结果见下图要求:输入两个操作数和一个操作符,根据操作符图要求:输入两个操作数和一个操作符,根据操作符决定所做的运算。决定所做的运算。实验(选择结构)实验(选择结构)实验(循环结构)实验(循环结构)1 1、编写程序将一个十进制整数按倒序形式输出。即若输、编写程序将一个十进制整数按倒序形式输出。即若输入入156156,则输出,则输出651651。提示:实现的方法是将一个十进制数不断除以十取余,提示:实现的方法是将一个十进制数不断除以十取余,并马上输出该余数。并马上输出该余数。2 2、 编一程序,显示出所有的水仙花数。所谓水仙花数,编一程序,显示出所有的水仙花数。所谓水仙花数,是指一个是指一个3 3位数,其各位数字立方和等于该数字本身。位数,其各位数字立方和等于该数字本身。提示:提示:利用三重循环,将三个位数连接成一个利用三重循环,将三个位数连接成一个3 3位数进位数进行判断。行判断。例如,将例如,将i,j,ki,j,k三个个位数连成一个三位数的表三个个位数连成一个三位数的表达式为:达式为: i*100+j*10+ki*100+j*10+k利用单循环将一个利用单循环将一个3位数逐位分离后进行判断分离方位数逐位分离后进行判断分离方法利用取余和整除运算。法利用取余和整除运算。3、计算、计算当第当第i i项的值项的值10-410-4时结束。时结束。提示:找出规律,第提示:找出规律,第i项的分母是前一项的分母加上表项的分母是前一项的分母加上表示有分母项开始计数。示有分母项开始计数。实验(循环结构)实验(循环结构)4、计算、计算 的近似值,的计算公式为:的近似值,的计算公式为:提示:要防止大数相乘时溢出问题,将变量类型改为双提示:要防止大数相乘时溢出问题,将变量类型改为双精度型。精度型。5、 求求Sn=a+aa+aaa+aaa+Sn=a+aa+aaa+aaa+aaaaaaa(naaa(n个个a)a),其中,其中a是一个由随机数产生的是一个由随机数产生的19(包括包括1,9)中的一个正整数,中的一个正整数,n是一个由随机数产生的是一个由随机数产生的510(包括包括5,10)中的一个数。中的一个数。例如:当例如:当a a=2=2,n n=5=5时,时,SnSn=2+22+222+2222+22222=2+22+222+2222+22222。实验(循环结构)实验(循环结构)提示:为了得到不断重复提示:为了得到不断重复a的的n位的数位的数Temp,可用如下,可用如下程序段实现:程序段实现: Temp=0Temp=0 for(i=1;i=n;i+) for(i=1;i=n;i+) Temp=Temp*10+a; Temp=Temp*10+a; 实验(循环结构)实验(循环结构)
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号