《流程控制语句.ppt》由会员分享,可在线阅读,更多相关《流程控制语句.ppt(116页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Chap4第四章 流程控制语句Chap4上一页上一页下一页下一页4.2if语句语句双分支语句双分支语句4.3switch语句语句多分支语句)多分支语句)4.4for语句语句(当型循环当型循环)4.5while语句语句(条件循环条件循环)4.6do-while语句语句(直到型循环直到型循环)4.7跳转语句跳转语句本章主要内容:4.1概述概述Chap4上一页上一页下一页下一页流程控制语句用来控制程序的执流程控制语句用来控制程序的执行过程,它包括以下三种语句:行过程,它包括以下三种语句:选择:用来解决实际应用中按不同情况进行不同处理的问题.包括:if语句 和 switch语句 循环:用来解决实际应用
2、中需要重复处理的问题.包括:for语句、while语句 和 do语句 跳转:用来改变顺序向下执行的正常顺序.包括:goto、continue、break 和 return语句 4.1概述概述Chap4上一页上一页下一页下一页4.2if语句语句条件语句条件语句一、if语句的简单格式三、if语句的嵌套二、if语句的双分支格式Chap4上一页上一页下一页下一页表达式表达式语句语句真假一、一、if语句的简单分支语句的简单分支语句:语句:if(表达式)表达式)语句语句v表达式为任意表达式表达式为任意表达式v若有多条语句,则要构成复合语句若有多条语句,则要构成复合语句执行:计算执行:计算表达式的值,若为真
3、(不为表达式的值,若为真(不为0)则执行语句;否则不执行语句则执行语句;否则不执行语句Chap4上一页上一页下一页下一页例例4.2.1:求:求x的绝对值的绝对值#includevoidmain()intx,absx;coutx;absx=x;if(x0)absx=-x;coutx=xendl;cout|x|=absxendl;#includeabsx=abs(x);if(x=0)absx=x;elseabsx=-x;Chap4上一页上一页下一页下一页例例4.2.2:C若为大写字母,则把它变为小写字母,若为大写字母,则把它变为小写字母,否则为否则为c本身。本身。#includevoidmain(
4、)charch;cinch;if(ch=A&ch=Z)ch=ch+32;coutchendl;Chap4上一页上一页下一页下一页二、二、if语句的双分支语句的双分支if(表达式)表达式)语句语句1else语句语句2表达式表达式表达式表达式语句语句语句语句1 1语句语句语句语句2 2真假入口出口执行:执行:若表达式的值不为若表达式的值不为0,执行语句,执行语句1,否则,否则执行语句执行语句2语句:语句:Chap4上一页上一页下一页下一页#includevoidmain()inta,b,x;cinab;if(ab)x=a;x*=x;elsex=b;coutxendl;例例4.2.3:输入两个数:输
5、入两个数a,b,若,若a 大,则输出大,则输出a的平的平方,若方,若b大,输出大,输出b。_ 复合语句一定要加大括号复合语句一定要加大括号x=a;x*=a;Chap4上一页上一页下一页下一页嵌套的两种形式嵌套的两种形式:(1)嵌套嵌套ifelse(2)嵌套嵌套elseif三、三、if语句的嵌套(语句的嵌套(处理多分支问题处理多分支问题)Chap4上一页上一页下一页下一页(1 1)嵌套嵌套 ifelseifelseif(if(表达式表达式表达式表达式1 1)if(if(表达式表达式表达式表达式3 3)语句)语句)语句)语句1 1;if(if(表达式表达式表达式表达式2 2)elseelse语句语
6、句语句语句2;2;elseelse语句语句语句语句3;3;elseelse语句语句语句语句4;4;外层外层外层外层内层内层内层内层中层中层中层中层若若若若表达式表达式表达式表达式1 1的值为非的值为非的值为非的值为非0 0,即,即,即,即真真真真,则,则,则,则执行中层执行中层执行中层执行中层ifelseifelse结构结构结构结构;否则否则否则否则,执行,执行,执行,执行语句语句语句语句4 4。执行执行执行执行中层中层中层中层时,若时,若时,若时,若表达式表达式表达式表达式2 2的值为非的值为非的值为非的值为非0 0,即,即,即,即真真真真,则,则,则,则执行内执行内执行内执行内层层层层if
7、elseifelse结构结构结构结构;否则否则否则否则,执行,执行,执行,执行语句语句语句语句3 3。执行执行执行执行内层内层内层内层时,若时,若时,若时,若表达式表达式表达式表达式3 3的值为非的值为非的值为非的值为非0 0,即,即,即,即真真真真,则,则,则,则执行语执行语执行语执行语句句句句1 1;否则否则否则否则,执行,执行,执行,执行语句语句语句语句2 2。Chap4上一页上一页下一页下一页if_else 嵌套流程图Chap4上一页上一页下一页下一页if(表达式表达式1)语句语句1;elseif(表达式表达式2)语句语句2;elseif(表达式表达式3)语句语句3;.elseif(表
8、达式表达式n)语句语句n;else语句语句n+1;/*前面前面n个条件均个条件均不成立,执行语句不成立,执行语句n+1*/(2 2)嵌套)嵌套 else ifelse ifChap4上一页上一页下一页下一页else_if else_if 嵌套流程图嵌套流程图Chap4上一页上一页下一页下一页例例4.2.4:4.2.4:编写程序计算函数编写程序计算函数x*x-4(x=0)y=x(0 x3)Chap4上一页上一页下一页下一页解解:根据题目的三个区间,两个判断点,形成三分支,可采根据题目的三个区间,两个判断点,形成三分支,可采用三种选择结构设计。用三种选择结构设计。方法方法1:else_if嵌套结构
9、设计嵌套结构设计方法方法2:if_else嵌套结构设计嵌套结构设计方法方法3:三个并列的三个并列的if结构设计结构设计嵌套嵌套Chap4上一页上一页下一页下一页方法方法1 1:else_if else_if 嵌套结构嵌套结构-源程序源程序:注:这种方法是判注:这种方法是判判断点判断点法法各条件互相关联形成区间各条件互相关联形成区间要考虑条件成立与不成立要考虑条件成立与不成立/X3/0X=3/X=0#includevoidmain()intx,y;coutx;if(x3)y=x*x+4;elseif(x0)y=x;elsey=x*x-4;couty=yendl;Chap4上一页上一页下一页下一页
10、方法方法2 2:if_elseif_else嵌套结构设计嵌套结构设计#includevoidmain()intx,y;coutx;if(x0)if(x=3)y=x;elsey=x*x+4;elsey=x*x-4;couty=yendl;注:注:这种方法也是判判断点法这种方法也是判判断点法各条件互相关联形成区间各条件互相关联形成区间要考虑条件成立与不成立要考虑条件成立与不成立Chap4上一页上一页下一页下一页方法方法3 3 三个并列的三个并列的if if 结构结构-源程序源程序#includevoidmain()intx,y;coutx;if(x3)y=x*x+4;if(x0&x=3)y=x;i
11、f(x=0)y=x*x-4;couty=yendl;注:这种方法是判区间法。注:这种方法是判区间法。若改为”0 x3时,运行程序,看结果如何?Chap4上一页上一页下一页下一页例例4.2.5:输入年份,判断是否为闰年,若是,:输入年份,判断是否为闰年,若是,回答回答“Yes”,否则回答否则回答“No”。什么样的年份是闰年?什么样的年份是闰年?能被4整除,不能被100整除,是闰年能被4整除,也能被100整除:不是闰年能被4整除,也能被100整除,还能被400整除:是闰年Chap4上一页上一页下一页下一页year被4整除year被100整除year被400整除真假No假Yes真假No真YesCha
12、p4上一页上一页下一页下一页#includevoidmain()intyear;coutyear;if(year%4=0)if(year%100=0)if(year%400=0)coutYesendl;elsecoutNoendl;/不能被不能被400整除整除/elsecoutYesendl;/不能被不能被100整除整除/elsecoutNoendl;/不能被不能被4整除整除/Chap4上一页上一页下一页下一页或:或:if(year%4)/*不能被不能被4整除整除*/coutNoendl;elseif(year%100)/*不能被不能被100整除整除*/coutYesendl;elseif(y
13、ear%400)/*不能被不能被400整除整除*/coutNoendl;elsecoutYesendl;返回返回Chap4上一页上一页下一页下一页也用一个逻辑表达式包含所有条件:也用一个逻辑表达式包含所有条件:#includevoidmain()intyear;coutyear;if(year%4=0&year%100!=0)|(year%400=0)coutYesendl;elsecoutNoN;coutN;coutx;Chap4上一页上一页下一页下一页_switch通常与break语句联用:break用于中断或结束语句(只能用在switch语句和循环语句中)例例4.3.1:输入成绩,若:输
14、入成绩,若:90100:A7089:B6069:C60:Dbreak语句:Chap4上一页上一页下一页下一页#includevoidmain()intcj;cincj;switch(cj/10)case10:case9:coutnA;case8:case7:coutnB;case6:coutnC;default:coutnDn;break;break;运行:不加运行:不加”break”和和加加”break”的区别!的区别!break;98ABCD不加break98A加breakChap4上一页上一页下一页下一页#include#includevoidmain()floatscore;couts
15、core;if(score100)cout输入数据有误!输入数据有误!endl;exit(1);程序举例(程序举例(P85例例4-3-2)Chap4上一页上一页下一页下一页switch(int(score)/10)case9:case10:coutscore:优:优endl;break;case8:case7:coutscore:良:良endl;break;case6:coutscore:及格:及格endl;break;default:coutscore:不及格:不及格endl;break;程序举例(程序举例(P85例例4-3-2)Chap4上一页上一页下一页下一页程序举例(程序举例(p85例
16、例4-3-1)#includevoidmain()intweekday;coutweekday;switch(weekday)case0:coutSundayendl;break;case1:coutMondayendl;break;case2:coutTuesdayendl;break;case3:coutWednesdayendl;break;Chap4上一页上一页下一页下一页程序举例(程序举例(p85例例4-3-1)case4:coutThursdayendl;break;case5:coutFridayendl;break;case6:coutSaturdayendl;break;de
17、fault:coutInputerror!endl;break;Chap4上一页上一页下一页下一页程序举例(P86程序4-3-3)#include#include#includevoidmain()charmark;intx,y,z;boolb=false;srand(time(0);/srand(time(0);/初始化系统中的随机数序列x=rand()%50+1;Chap4上一页上一页下一页下一页程序举例程序举例P86程序4-3-3y=rand()%10+1;coutmark;coutxmarkyz;switch(mark)case+:if(z=x+y)b=true;break;case-
18、:if(z=x-y)b=true;break;case*:if(z=x*y)b=true;break;Chap4上一页上一页下一页下一页程序举例程序举例P86程序4-3-3case/:if(z=x/y)b=true;break;case%:if(z=x%y)b=true;break;default:cout运算符输入错!endl;exit(1);if(b)coutright!endl;elsecouterror!endl;Chap4上一页上一页下一页下一页程序补充知识srand(time(0)和和rand()它们分别怎样用,又怎么它们分别怎样用,又怎么区别区别srand(time(0);/先设
19、置种子rand();/然后产生随机数srand是种下随机种子数,你每回种下的种子不一样,用rand得到的随机数就不一样。为了每回种下一个不一样的种子,所以就选用time(0),time(0)是得到当前时间值(因为每时每刻时间是不一样的了)。注:time函数原型包含在系统头文件time.h或ctime中,它返回从1970年1月1日零时算起至当前时间为止的总秒数。Chap4上一页上一页下一页下一页应用举例p87例4-3-1例4-3-1编写一个程序,要求把从键盘上输入的一个015的整数转换为一位十六进制数输出。#include#includevoidmain()intx;coutx;if(x15)c
20、out输入数据不正确!输入数据不正确!n;exit(1);Chap4上一页上一页下一页下一页应用举例p87例4-3-1switch(x)case10:coutA;break;case11:coutB;break;case12:coutC;break;case13:coutD;break;case14:coutE;break;case15:coutF;break;default:coutchar(x+48);break;/48为数字0的/ASCII码coutendl;Chap4上一页上一页下一页下一页分支(选择)结构小结分支(选择)结构小结1、if语句的简单分支语句的简单分支2、if语句的双分支
21、:语句的双分支:if-else3、if的嵌套的嵌套4、switch语句的使用语句的使用返回返回Chap4上一页上一页下一页下一页4.44.6循环结构循环结构一、for语句*二、while语句*三、do-while语句*主要学习语句的执行过程、使用方法循环:重复执行一段语句语句语句Chap4上一页上一页下一页下一页v格式for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句表达式表达式2语句语句表达式表达式1表达式表达式3表达式表达式1:作为初始化先执行表达式先执行表达式1的值;的值;再执行表达式再执行表达式2,如果值为真,执行语句,再,如果值为真,执行语句,再执行表达式执行表达式
22、3,重复,重复;如果表达式如果表达式2的值为假,退出循环,继续执行的值为假,退出循环,继续执行下面的语句。下面的语句。v执行情况真假表达式表达式2:作为循环控制,是循环条件:作为循环控制,是循环条件表达式表达式3:每次都要做:每次都要做,改变循环变量,改变循环变量4.4for语句语句(计数式型循环计数式型循环)Chap4上一页上一页下一页下一页for(循环变量赋初值;循环条件;循环变量增值)循环变量赋初值;循环条件;循环变量增值)语句语句for(s=0,i=1;i=100;i+)s+=i;注意:注意:v这三个表达式都可以忽略,但分号不能省for(;)v不能构成死循环,死循环可用ctrl+c强行
23、中止。for循环最常见格式:循环最常见格式:Chap4上一页上一页下一页下一页死循环举例#include#includevoidmain()intn,i;cinn;for(i=2;in;i+)inttemp=int(sqrt(n)+1e-5);for(i=2;itemp)coutnYesn;elsecoutnNon;Chap4上一页上一页下一页下一页例例4.4.1:求:求n!(n的值由键盘输入)的值由键盘输入)#includevoidmain()intn;doubles=1.0;coutn;for(inti=1;i=n;i+)s*=i;coutn!=sendl;Chap4上一页上一页下一页下一
24、页例例4.4.2:输入一个数,判断是否为素数:输入一个数,判断是否为素数#includevoidmain()intn,i;cinn;for(i=2;in;i+)if(n%i=0)break;if(i=n)coutnYesn;elsecoutnNon;Chap4上一页上一页下一页下一页#include#includevoidmain()intn,i;cinn;inttemp=int(sqrt(n)+1e-5);for(i=2;itemp)coutnYesn;elsecoutnNon;例例4.4.2程序优化:程序优化:循环次数可循环次数可以减少,详以减少,详见见p94(例(例4-4-4)例4-4-
25、4Chap4上一页上一页下一页下一页循环嵌套内循环内循环外循环外循环v嵌套不能有交叉嵌套不能有交叉v在循环嵌套中,在循环嵌套中,break语句只能退出一层循环。语句只能退出一层循环。Chap4上一页上一页下一页下一页例例4.4.3打印出打印出100到到200之间的素数之间的素数#includevoidmain()inti,j;for(i=100;i=200;i+)for(j=2;j=i)coutti;程序优化:程序优化:循环次数可循环次数可以减少,详以减少,详见见94(例(例4-4-4)例4-4-4Chap4上一页上一页下一页下一页例例4.4.4 打印乘法表。打印乘法表。1*1=12*1=22
26、*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=256*1=66*2=126*3=186*4=246*5=306*6=367*1=77*2=147*3=217*4=287*5=357*6=427*7=498*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81Chap4上一页上一页下一页下一页#includevoidmain()inti,j;for(i=1;i=9;
27、i+)coutn;for(j=1;j=i;j+)/*循环嵌套循环嵌套*/couti*j=i*jt;例例4.4.4 打印乘法表。打印乘法表。Chap4上一页上一页下一页下一页双重双重for循环的执行过程:循环的执行过程:例例4.4.5求求1!+2!+3!+5!#includevoid main()int i,j;long int s=0,m;for(i=1;i=5;i+)m=1;for(j=1;j=i;j+)m*=j;s+=m;coutsendl;m=1;m=1;s=0;s=0;当当当当 i=5i=5当当当当j=j=i im*=j;m*=j;j+;j+;s+=m;s+=m;i+;i+;coutc
28、outssendlendl;Chap4上一页上一页下一页下一页#include10s=0;voidmain()20for(i=1;i=3;i+)inti,j;30m=1;longintm,s;40for(j=1;j=i;j+)50m*=j;60s+=m;70coutsendl;102030405060m=1s=0i=1j=1m=1*1s=0+1i=2j=1m=1m=1*1j=2m=1*2s=1+2i=3j=1j=2j=4m=1m=1*1 m=1*2 m=2*3s=3+670s=9i=4外走一外走一内走遍内走遍j=2j=3j=3Chap4上一页上一页下一页下一页#includevoidmain(
29、)inti,j,n,m;longs=0,t;cinnm;for(i=1;i=n;i+)t=1;for(j=1;j=m;j+)t*=i*2-1;/t*=(i*2-1);s+=t;coutsn;例例4.4.61m+3m+5m+7m+.返回返回Chap4上一页上一页下一页下一页程序举例(p90程序4-4-1)#includevoidmain()inti,n;doublep=1;coutn;for(i=1;i=n;i+)p*=i;coutn!=pendl;Chap4上一页上一页下一页下一页程序举例(p90程序4-4-2)#include#includevoidmain()intn,x,max,min;
30、coutn;for(;n=0;)coutn;cout从键盘上输入从键盘上输入nx;max=min=x;for(;-n;)cinx;if(xmax)max=x;if(xmin)min=x;coutmax:maxendl;coutmin:minendl;Chap4上一页上一页下一页下一页程序举例(p90程序4-4-3)#includevoidmain()for(inta=0,b=1;b100;)coutab;a=a+b;b=a+b;coutendl;coutabendl;Chap4上一页上一页下一页下一页程序举例(p91程序4-4-4)#includeconstintM=4,N=5;voidmai
31、n()inti,j,s=0;for(i=1;i=M;i+)for(j=1;j=N;j+)s+=i*j;coutsendl;Chap4上一页上一页下一页下一页应用举例(p92例4-4-1)例例4-4-1编一程序计算编一程序计算1+22+42+62+502的值。的值。#includevoidmain()inti,s=1;for(i=2;i=50;i+=2)s+=i*i;couts=sendl;Chap4上一页上一页下一页下一页应用举例(p93例4-4-2)例例4-4-2已知一组实验数据为已知一组实验数据为3.62、2.93、3.16、3.73、2.86、3.40、2.86、3.07、3.29、3.
32、24,编一程,编一程序分别求出它们的平均值、方差和均方差,要求每序分别求出它们的平均值、方差和均方差,要求每一结果只保留两位小数。一结果只保留两位小数。Chap4上一页上一页下一页下一页应用举例(p93例4-4-2)#include#includeconstintN=10;/N等于待处理数据的个数等于待处理数据的个数voidmain()doublex,s1,s2;s1=s2=0;cout从键盘上输入从键盘上输入N个实验数据个实验数据:n;for(inti=1;ix;s1+=x;s2+=x*x;doublev,f,t;v=s1/N;f=s2/N-v*v;t=sqrt(f);v=floor(v*1
33、00)/100;/使结果保留两位小数使结果保留两位小数f=floor(f*100)/100;/使结果保留两位小数使结果保留两位小数t=floor(t*100)/100;/使结果保留两位小数使结果保留两位小数cout平均值平均值:vendl;cout方方差差:fendl;cout均方差均方差:tendl;Chap4上一页上一页下一页下一页应用举例(p94例4-4-3)例例4-4-3由勾股定理可知,在一个直角三角形中,由勾股定理可知,在一个直角三角形中,两条直角边两条直角边a和和b与斜边与斜边c的关系为的关系为a2+b2=c2,编一,编一程序求出每条直角边均不大于程序求出每条直角边均不大于30的所
34、有整数组解。的所有整数组解。#include#includeconstintN=30;voidmain()inta,b;doublec;Chap4上一页上一页下一页下一页应用举例(p94例4-4-3)for(a=1;a=N;a+)for(b=a+1;b=N;b+)c=sqrt(a*a+b*b);/求出斜边的长度求出斜边的长度if(fabs(c-int(c)1e-5)/若斜边同为整数若斜边同为整数/则输出则输出cout(a,b,c),;coutendl;Chap4上一页上一页下一页下一页应用举例(p94例4-4-4)例例4-4-4编一程序打印出编一程序打印出299的所有素数。的所有素数。#inc
35、lude#includevoidmain()inti,n;cout299之间的所有素数之间的所有素数:2;Chap4上一页上一页下一页下一页应用举例(p94例4-4-4)for(n=3;n=99;n+=2)inttemp=int(sqrt(n)+1e-5);for(i=2;itemp)coutn;coutn;例4.4.2Chap4上一页上一页下一页下一页v格式:格式:while(表达式)表达式)语句语句v执行过程:先求表达式的值,判断为真为假,执行过程:先求表达式的值,判断为真为假,若为真,则执行语句;否则退出循环。若为真,则执行语句;否则退出循环。真假表达式语句假注意:注意:语句:一个语句,
36、复合语句,空语句:一个语句,复合语句,空语句语句表达式后面不能有分号表达式后面不能有分号4.5while语句语句(条件循环条件循环)Chap4上一页上一页下一页下一页例例4.5.1:求:求1+2+3+100的和的和#includevoid main()int s,i;s=0;/s/s为累加和为累加和 i=1;/i/i为循环控制变量为循环控制变量 while(i=100)/循环循环条件条件 s+=i;i+;coutsendl;Chap4上一页上一页下一页下一页#include void main()int s,i;10:s=0;20:i=1;30:while(i=4)40:s+=i;50:i+;
37、60:coutsendl;s=0循环过程如下循环过程如下:102040305060i=1s=0+1i=21s=1+2i=311i=4s=3+30s=6+4i=5s=101Chap4上一页上一页下一页下一页例例4.5.2:编程求编程求的近似值的近似值,公式公式/41-1/3+1/5-1/7+1/9-#include#includevoidmain()ints;floatn,t,pi;s=1;n=1;t=1;pi=0;while(fabs(t)1e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=4*pi;coutpi=pin;分析分析:题目仍可以看成是累加求和题目仍可以看成是累加求和
38、不同的是不同的是,相加的每一项正负相间相加的每一项正负相间,公式是无穷的公式是无穷的,所以我们规定当所以我们规定当相加项的绝对值小于等于相加项的绝对值小于等于0.000001(即即106)时停止计算时停止计算tpins11-13-1/310 10.671/551返回返回Chap4上一页上一页下一页下一页程序举例(程序举例(p97例例4-5-1)分别统计出从键盘上输入的所有正整数中小于分别统计出从键盘上输入的所有正整数中小于60和大和大于等于于等于60的数据个数,然后显示出来。的数据个数,然后显示出来。#includevoidmain()intx,c1=0,c2=0;cinx;while(x=0
39、)/当输入一个负数时结束循环当输入一个负数时结束循环if(xx;coutc1c2endl;Chap4上一页上一页下一页下一页程序举例(p97例4-5-2)采用辗转相除法求出两个正整数的最大公约数。采用辗转相除法求出两个正整数的最大公约数。#includevoidmain()inta,b;coutab;while(a=0|b=0)coutab;while(b)intr=a%b;a=b;b=r;coutaendl;Chap4上一页上一页下一页下一页程序举例(p98例4-5-3)随机产生出随机产生出10个个10199之间的素数并显示出来。之间的素数并显示出来。#include#include#inc
40、ludevoidmain()inti=10,a;while(i0)a=rand()%190+10;intj,k=int(sqrt(a)+1e-5);for(j=2;jk)couta;i-;coutendl;Chap4上一页上一页下一页下一页应用举例(p99例4-5-1)例例4-5-1编一程序求出满足不等式编一程序求出满足不等式的最小n值。用用while循环编写的程序如下:循环编写的程序如下:#includevoidmain()inti=0;doubles=0;while(s5)s+=double(1)/+i;coutn=iendl;Chap4上一页上一页下一页下一页应用举例(p99例4-5-1
41、)用用for循环编写的程序如下:循环编写的程序如下:#includevoidmain()inti;doubles=0;for(i=1;s5;i+)s+=1.0/i;coutn=i-1endl;/此此i-1的值为所求的的值为所求的n值值Chap4上一页上一页下一页下一页应用举例(p99例4-5-2)例例4-5-2有一家企业,若年产值平均增长率有一家企业,若年产值平均增长率分别按分别按2%、4%、6%、20%计算,计算,问分别需要经过多少年能够使年产值翻一问分别需要经过多少年能够使年产值翻一番。番。分析:分析:假定把当年的年产值定为假定把当年的年产值定为1个单位,则翻个单位,则翻一番后就应变为一番
42、后就应变为2。设年产值平均增长率。设年产值平均增长率为为x,经过的年数为,经过的年数为n,n年后的产值为年后的产值为y,则求则求y的计算公式为的计算公式为:Chap4上一页上一页下一页下一页应用举例(p99例4-5-2)#includevoidmain()doublex,y;intn;for(x=0.02;x0.21;x+=0.02)/*终值为终值为0.20,考虑到,考虑到数据运算精度,使用时做好增加半个步长值数据运算精度,使用时做好增加半个步长值*/Chap4上一页上一页下一页下一页应用举例(p99例4-5-2)n=0;y=1;while(y2)n+;y*=1+x;coutx*100%nye
43、ndl;Chap4上一页上一页下一页下一页应用举例(p100例4-5-3)例例4-5-3一家商场采用打折促销活动,具体做法是:一家商场采用打折促销活动,具体做法是:购物满购物满100元送元送30元购物券,用购物券购物同用人元购物券,用购物券购物同用人民币购物一样遵循上述原则。若一个顾客一次购民币购物一样遵循上述原则。若一个顾客一次购物花销物花销x元,则最终能够得到几折优惠。元,则最终能够得到几折优惠。分析:花销分析:花销x元得到的购物券为元得到的购物券为(int(x)/100)*30,假定这个值仍以,假定这个值仍以x保存,则再保存,则再购价值为购价值为x的物品后,同样又可以得到由上述公式的物品
44、后,同样又可以得到由上述公式计算出来的购物券,直到计算出来的购物券,直到x为为0时止。时止。Chap4上一页上一页下一页下一页应用举例(p100例4-5-3)#include#include/此行可以省略此行可以省略#includevoidmain()doublex,a,s;coutx;Chap4上一页上一页下一页下一页应用举例(p100例4-5-3)while(x=0)cout0):;cinx;a=x;s=0;while(x)s+=x;x=int(x)/100*30;coutasfloor(a/s*100+0.5)/100endl;注:注:x=int(x)/100*30;/这里计算的是这里计
45、算的是x,不是,不是sChap4上一页上一页下一页下一页v格式格式do语句while(表达式)v执行情况执行情况:先执行语句,再计算表达式的值,若非先执行语句,再计算表达式的值,若非0,再执行语句;否则退出循环,执行下,再执行语句;否则退出循环,执行下面的语句面的语句真表达式语句假do后若有多条语句,需使用复合语句后若有多条语句,需使用复合语句语句至少被执行一次,不同于语句至少被执行一次,不同于while语句语句v注意4.6do-while语句语句(直到型循环直到型循环);Chap4上一页上一页下一页下一页_while语句与do-while语句(求(求1到到100的累加和)的累加和)#incl
46、udevoid main()int s,i;s=0;cini;while(i=100)s+=i;i+;couts;#includevoid main()int s,i;s=0;cini;do s+=i;i+;while(i=100);couts;输入:输入:101输出:输出:0输出:输出:101输入:输入:101Chap4上一页上一页下一页下一页例例4.6.1把从键盘上输入的一个正整数按数把从键盘上输入的一个正整数按数字位的相反次序输出字位的相反次序输出。#includevoidmain()intnum,rem;coutnum;dorem=num%10;num/=10;cout0);coute
47、ndl;Chap4上一页上一页下一页下一页程序举例(p102程序4-6-1)程序程序4-6-1根据从键盘上输入的根据从键盘上输入的NM个整个整数,统计出数,统计出3060范围内的整数个数,最后范围内的整数个数,最后输出统计结果。输出统计结果。Chap4上一页上一页下一页下一页程序举例(p102程序4-6-1)#includeconstintNM=10;voidmain()intx,n=1,c=0;docinx;if(x=30&x=60)c+;while(n+NM);coutc=cendl;Chap4上一页上一页下一页下一页程序举例(p103程序4-6-2)程序程序4-6-2把从键盘上输入的一个
48、大于等于把从键盘上输入的一个大于等于3的的整数分解为质因子的乘积。整数分解为质因子的乘积。#includevoidmain()intx;coutx;while(x=2);Chap4上一页上一页下一页下一页程序举例(p103程序4-6-2)inti=2;dowhile(x%i=0)couti;x/=i;i+;while(i=x);coutendl;请输入一个整数,若小于3则重输:623输出结果:Chap4上一页上一页下一页下一页应用举例(p103例4-6-1)例例4-6-1编一程序把从键盘上输入的一个十进编一程序把从键盘上输入的一个十进制正整数转换为对应的十六进制数字串输出。制正整数转换为对应的
49、十六进制数字串输出。#includevoidtrans(intx)/此函数得到的十六进制数字串是按照从低位到高此函数得到的十六进制数字串是按照从低位到高位的次序排列的位的次序排列的intrem;/用于保存整余数用于保存整余数dorem=x%16;x=x/16;if(rem10)coutchar(rem+0);Chap4上一页上一页下一页下一页应用举例(p103例4-6-1)elseswitch(rem)case10:coutA;break;case11:coutB;break;case12:coutC;break;case13:coutD;break;case14:coutE;break;ca
50、se15:coutF;break;while(x!=0);coutendl;Chap4上一页上一页下一页下一页应用举例(p103例4-6-1)voidmain()intd;coutd;while(d0);trans(d);Chap4上一页上一页下一页下一页应用举例(p103例4-6-1)#includevoidtrans(intx)/此函数得到的十六进制数字串是按照从低位到高此函数得到的十六进制数字串是按照从低位到高位的次序排列的位的次序排列的chara10;inti=0,rem;dorem=x%16;x=x/16;if(rem0)couta-i;coutendl;voidmain()intd