|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目如下:
企业发放的奖金根据利润提成。利润(i)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数?
要求:
1: 用IF语句
2:用SWITCH 语句
这是switch的函数:
#include<stdio.h>
int main()
{
int i;
double bonus,bon1,bon2,bon4,bon6,bon10;
int branch;
bon1=100000*0.1;
bon2=100000*0.075+bon1;
bon4=(400000-200000)*0.05+bon2;
bon6=(600000-400000)*0.03+bon4;
bon10=(1000000-600000)*0.015+bon6;
printf("请输入利润i: ");
scanf("%d",&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=bon4+(i-400000)*0.03;break;
case 6:
case 7:
case 8:
case 9:bonus=bon6+(i-600000)*0.015;break;
case 10:bonus=bon10+(i-1000000)*0.01;
}
printf("当利润为%d的时候,应发奖金为%10.2lf\n",i,bonus);
return 0;
}
从第一句到swith语句之前我都能理解,但怎么都无法理解swith里面他是怎么分的。假定现在利润是200000,按照题目说的branch=i/100000,那么这里的branch=200000/100000=2,就应该执行case2,但case2没有,那就执行case3,但case3却又包含了本身2应该有的钱,怎么可能还凭空多冒出来给后面的(i-200000)来相减呢,那肯定不对。但我无法参透,求指点!!
另外这是if语句:
#include<stdio.h>
int main()
{
int i;
double bonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.1;
bon2=100000*0.075+bon1;
bon4=100000*0.05+bon2;
bon6=100000*0.03+bon4;
bon10=400000*0.015+bon6;
printf("请输入利润i: ");
scanf("%d",&i);
if (i<=100000)
bonus=i*0.1;
else if(i<=200000)
bonus=bon1+(i-100000)*0.075;
else if
bonus=bon2+(i-200000)*0.05;
else if
bonus=bon4+(i-400000)*0.03;
else if
bonus=bon6+(i-600000)*0.015;
else
bonus=bon10+(i-1000000)*0.01;
printf("当利润为%d的时候,应发奖金为%10.2lf\n",i,bonus);
return 0;
}
系统老提示我最后一个else那里没有匹配的if,但书上的例子也是这样写的,为什么我这样写就不对?而且我完全按无法理解为什么定义变量后bon4bon6的等式里通通都是100000在乘以不同的提成比,比如bon4=bon2+100000*0.05,为什么是100000?按照题目不是应该是bon4=bon2+(400000-200000)*0.05吗?为什么都是100000呢?求解释,求指导,各种求帮助!
|
|