鱼C论坛

 找回密码
 立即注册
查看: 4106|回复: 2

求解答下这里的case代表什么呢?

[复制链接]
发表于 2013-9-7 11:01:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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呢?求解释,求指导,各种求帮助!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-8 08:45:47 | 显示全部楼层

恩,明白了,怪不得我运行不了呢,原来是if和else if 后面都要跟表达式,这下懂了。还有就是if语句里申明变量后下面给他们赋值,我始终想不明白为什么bon4和bon6会是这样的呢?bon4=bon2+100000*0.05;bon6=bon4+100000*0.03;
我觉应该是:
bon4=bon2+(400000-200000)*0.05;
bon6=bon4+(60-400000)*0.03;
为什么答案上会是100000呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-4 02:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表