1、;cinij;2个数中最大的是:if(i=j)iendl;else jk;3个数中最大的是:=j)=k) k本例的思想是将“从3个数中找出最大者”的问题转化成两个“从2个数中找出最大者”的问题。例3.3: (例3.2的另解)if(ij) i=j;k) i=k;本例的思想是:假设第一个变量i中的数为最大,分别用i和j、k比较,只要遇到比i大的数就存到i中,否则什么也不做,这样保证i中始终存放的是当前比较到的最大者。这一思想很重要,请注意学习。例3.4:输入3个数,然后按从大到小的顺序把它们显示出来。int i,j,k,p;j) p=i;i=j;j=p;k) p=i;i=k;k=p;if(jk)
2、p=j;j=k;3个数从大到小排列:endl100000.0)tax+=(income-100000.0)*0.45;income=100000.0;80000.0)tax+=(income-80000.0)*0.40;income=80000.0;60000.0)tax+=(income-60000.0)*0.35;income=60000.0;40000.0)tax+=(income-40000.0)*0.30;income=40000.0;20000.0)tax+=(income-20000.0)*0.25;income=20000.0;5000.0)tax+=(income-5000.
3、0)*0.20;income=5000.0;2000.0)tax+=(income-2000.0)*0.15;income=2000.0;500.0)tax+=(income-500.0)*0.10;income=500.0;0.0)tax+=income*0.05;应纳个人所得税:tax按任意键结束cin.get();if多分支结构if(条件1)语句1elseif(条件2)语句2elseif(条件3)语句3.elseif(条件n)语句nelse语句n+1这是通过规范化的if嵌套所构成的条件分支结构,在这种结构中if语句嵌套在else之后。但通常我们采用下面更简洁的格式:if(条件1) 语句1
4、else if(条件2) 语句2else if(条件3) 语句3else if(条件n) 语句nelse 语句n+1这种结构的工作原理:先检测条件1,若满足就执行语句1;否则检测条件2,若满足就执行语句2;否则检测条件3,若满足就执行语句3.若所有条件都不满足则执行语句n+1,若没有else 语句n+1就什么也不做。这里的n个条件是互斥的,即只要满足其中一个条件则其他条件肯定不满足,也就是说多分支结构中的n+1个语句只有一个能被执行。例3.6:输入一个0-100分范围内的一个成绩,显示相应的等级:90-100优80-89良70-79中60-69及格60分以下不及格float score;请输入
5、成绩:score;if(score100) 输入错误!成绩必须在0-100分之!else if(score60) cout不及格70) cout及格80) cout中90) cout良else cout优switch语句和switch多分支结构switch语句的格式:switch(整型表达式)case 整型常量表达式1:语句序列1case 整型常量表达式2:语句序列2.case 整型常量表达式k:语句序列kdefault:语句序列k+1 switch语句通过判断整型表达式的值来确定程序的去向。若整型表达式的值与整型常量表达式1的值相同,则依次执行语句序列1开始的各个语句序列,即语句序列1,语句
6、序列2.语句序列k+1;若整型表达式的值与整型常量表达式2的值相同,则依次执行语句序列2开始的各个语句序列,即语句序列2,语句序列3.语句序列k+1;如果整型表达式的值不等于任何列出的整型常量表达式的值,则执行从default后的语句序列k+1;如果没有default则什么也不做;在依次执行各个语句序列的过程中,若遇见break语句,则立即跳出switch分支结构。若每个语句序列的最后一个语句都是break,则这样的switch多分支结构可以用等效的if多分支结构替代。例3.7:输入一个表示星期的数字(0表示星期日,1表示星期一.),显示对应的英文单词。int weekday;今天是星期几?w
7、eekday;switch(weekday)case 0:Sunday break;case 1:Mondaycase 2:Tuesdaycase 3:Wednesdaycase 4:Thursdaycase 5:Fridaycase 6:Saturdaydefault:输入有误!输入的整数应在0-6之间例3.8:同例3.6,输入一个0-100分范围内的一个成绩,显示相应的等级,用switch多分支结构替代原来的if多分支结构switch(int(score)/10)case 7:case 8:case 9:case 10:成绩必须在0-100分之间3.3循环结构for循环for语句的格式为:
8、for(循环初始化;循环条件;循环参数调整)循环体for语句遵循先判断后执行,即如果一开始循环条件不成立,则循环体一次也不执行看下面的例子: for(int i=0;100;i+=5) cout/程序将显示输出:0 5 10 15 . 95首先执行循环初始化(i=0;),然后判断循环条件(i100)是否成立,此时i=0小于100,所以循环条件成立,执行循环体(cout),输出当前i的值即0,同时输出一个空格;接着进行循环参数调整(i+=5),此时i=5转去判断循环条件(i100)是否成立,5100,所以循环条件成立,执行循环体(cout),输出当前i的值即5,同时输出一个空格;接着进行循环参数
9、调整(i+=5).当i=95时,循环条件仍成立,输出当前i的值即95,同时输出一个空格,接着进行循环参数调整(i+=5),此时i=100转去判断循环条件(i100)是否成立,100不小于100,所以条件不成立,跳出循环。例3.9:输入10个数,计算并显示它们的合计。double x,s=0;请输入10个数:for(int i=0;10;i+) x;s+=x;合计:s若输入 1 2 3 4 5 6 7 8 9 10则程序输出:55本例中的变量s起到累加器的作用,所以必须初始化为0。例3.10:显示输出如下所示的三角形:* * * * * * * * * * * * * * * * * * * *
10、 * * * * * * * * * * * * * *行号应输出的应输出的*11i5-ii+i+16;i+)int j;for(j=0;5-i;j+) cout |int i;for(i=1;i+) coutsetw(3)i;-+-setw(2)for(int j=1;i*j;本例中用到了setw,其功能是为下一个要输出的数据设置输出宽度,setw的说明在头文件iomanip.h中,因此要有#include=0.000001)s+=s0;n+=2;d+=d;程序中的s是累加器,必须初始化为0。程序中用到double(n)/d,将int型变量n强制转换为double型,是应为n和d都是int型
11、,直接n/d将是整除,余数将被丢弃。方法二:math.hint i=1;while(s0=(i+i-1)/pow(2,i)i+;例3.13:设计函数 double powi(double x,int n);它计算并返回x的n次方。double powi(double x,int n)double a=1;while(n-) a*=x;return a;powi(5.0,3)n*=(-x*x);d*=(i+i-2)*(i+i-1);sin(x)x的下法插入一些语句。const double dPI=2*3.1415926;if(xwhile(xdPI) x-=dPI;elsewhile(xbc;while(a=0.0);double delta=b*b-4*a*c;if(delta0.0)此方程有2个不同的实数解:(-b+sqrt(delta)/(a+a);和(-b-sqrt(delta)/(a+a)此方程有2个相同的实数解:-b/(a+a)程序中使用do while解决了输入错误的问题,也就是说只要用户误将a输入为0,程序就一直要求重新输入,直到输入的a!=0,才能跳出do while循环体,继续运行下面的内容。细心的同学会发现,以前的程序也提供了解决输入有误的方法,但是只要检查
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2