课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759
【项目1分段函数求值】从键盘输入x的值(整型),根据公式1计算并输出x和y的值。
要求用switch语句构造多分支结构完成求解,利用BB平台上“第9周练习源代码及博文模板.txt”中给出了博文模板发布报告。
解法1:类似例3.9的思路,各分段的标准都为2的倍数,所以,构造表达式 t= x/2,根据t的取值决定switch分支;
#include<iostream> #include<cmath> using namespace std; int main( ) { int x, y, a; cin>>x; a = x/2; //注意是整数相除 if (a<0) a=0; //这样,x<0时,a值也是0 switch(a) { case 0: //即x<2时 y=x; break; case 1: case 2://a为1、2,对应x>=2 && x<6时 y=x*x+1; break; case 3: case 4://a为3、4,对应x>=6 && x<10时 y=-x; break; default://如果走到这一分支,对应的是x>=10的所有情况 y=-x*x-1; } cout<<y<<endl; return 0; }
解法 2 :构造表达式 t=(x<2) + (x<6) + (x<10) 。由于关系表达式 (x<a) 的值为 0 或 1 (真为 1 ,假为 0 ),所以 t 能表示 x 究竟满足了几个条件。 t 值为 3 时,相加的三个关系表达式全为真,对应 x<2 ;而 t 值为 0 时,相加的三个关系表达式全为假,对应 x ≥ 10 ,其他类似。根据 t 的取值,可以决定 switch 分支。
#include<iostream> #include<cmath> using namespace std; int main( ) { int x, y, t; cin>>x; t = (x<2) + (x<6) + (x<10); //括号中的关系表达式有几个为真(1),确定了t的值,实则反映的是x的范围 switch(t) { case 3: //(x<2) 、 (x<6) 、 (x<10) 全部为真,自然x<2 y=x; break; case 2: //(x<2) 、 (x<6) 、 (x<10) 为真有2,自然x>=2,且x<6 y=x*x+1; break; case 1: //(x<2) 、 (x<6) 、 (x<10) 为真有1,自然…… y=-x; break; case 0://只有(x<2) 、 (x<6) 、 (x<10) 全0了.也可写作default: y=-x*x-1; } cout<<y<<endl; return 0; }