描述
根据一个场景,不同的数据值获取不同的数据。情景题目。(谭浩强
题目
企业发放的奖金根据利润提成。利润 I 低于或等于 100 000 元的,奖金可提 10% ;利润高于 100 000 元,低于 200 000 元(100 000 < I <= 200 000)时,低于 100 000 元的部分按 10% 提成,高于 100 000 元的部分,可提成 7.5% ;200 000 < I <= 400 000 时,低于 200 000 元的部分仍按上述办法提成(下同)。高于 200 000 元的部分按 5% 提成;400 000 < I <= 600 000 元时,高于 400 000 元的部分按 3% 提成;600 000 < I <= 1000 000 时,高于 600 000 元的部分按 1.5 % 提成;I > 1000 000 时,超过1000 000 元的部分按 1% 提成。从键盘输入当月利润 I,求应发奖金总数。
要求:
用
用
题目解决思路
可以按照题目的要求,将在不同区间范围内的金额进行计算。主要的是将每一个区间的奖金计算正确。
代码具体实现
if 实现
#include
void main(){
printf("嗨客网(www.haicoder.net)\n\n");
long i;
float bonus,bon1,bon2,bon4,bon6,bon10; //先定义变量用来存储各个区间的数值
bon1 = 100000 * 0.1;
bon2 = bon1 + 100000 * 0.075;
bon4 = bon2 + 200000 * 0.05;
bon6 = bon4 + 200000 * 0.03;
bon10 = bon6 + 400000 * 0.015;
printf("请输入利润 i :");
scanf("%ld",&i);
if(i <= 100000)
{
bonus = i * 0.1;
}
else if(i<= 200000)
{
bonus = bon1 + (i - 100000) * 0.075;
}
else if(i <= 400000)
{
bonus = bon2 + (i - 200000) * 0.05;
}
else if(i <= 600000)
{
bonus = bon4 + (i - 400000) * 0.03;
}
else if( i <= 1000000)
{
bonus = bon6 + (i - 600000) * 0.015;
}
else
{
bonus = bon10 + (i - 1000000) * 0.01;
}
printf("奖金是 %10.2f\n",bonus);
}
运行结果为:
我们直接使用 if else 按照题目的要求挨个去判断,不同的 if 与 else 分支,走不同的计算逻辑,即可。
Switch实现
#include
void main(){
printf("嗨客网(www.haicoder.net)\n\n");
long i;
float bonus,bon1,bon2,bon4,bon6,bon10;
int branch;
bon1 = 100000 * 0.1;
bon2 = bon1 + 100000 * 0.075;
bon4 = bon2 + 200000 * 0.05;
bon6 = bon4 + 200000 * 0.03;
bon10 = bon6 + 400000 * 0.015;
printf("请输入利润 i :");
scanf("%ld",&i);
branch = i / 100000;
if(branch > 10)
{
branch = 10;
}
switch(branch)
{
case 0 :
bonus = i * 0.1;
break;
case 1 :
bonus = bon1 + (i - 100000) * 0.075;
break;
case 2 :
case 3 :
bonus = bon2 + (i - 200000) * 0.05;
break;
case 4 :
case 5 :
bonus = bon1 + (i - 100000) * 0.075;
break;
case 6 :
case 7 :
case 8 :
case 9 :
bonus = bon6 + (i - 600000) * 0.015;
break;
case 10 :
bonus = bon10 + (i - 1000000) * 0.01;
break;
}
printf("奖金是 %10.2f\n",bonus);
}
运行结果如下图:
我们使用了 switch case 同样实现了相同的结果,不过,在使用 switch case 计算,我们只能判断整数,因此,在使用 switch case 之前,我们需要先做整除处理。
总结
本题中比较难的部分就是先计算好各个区间范围的奖金值,然后按照区间将各个部分的奖金相加,我们可以先将区域中的奖金先计算出来。