永发信息网

C语言中switch case语句的问题

答案:6  悬赏:20  手机版
解决时间 2021-11-28 16:36
C语言中switch case语句的问题
最佳答案
# include
void main()

{
int I, k, a, b, c, d, e, f,g;
printf("请输入利润I:\n");
scanf("%d", &I);
a = I * (1.0f/10); //此处强制为浮点类型,不然a一直是0,看你的意思了
b = (I - 100000) * 75/1000;
c = (I - 200000) * 5/100;
d = (I - 400000) * 3/100;
e = (I - 600000) * 15/1000;
f = (I - 1000000) * 1/100;

g = (I - 1) / 100000;

switch(g)
{
case 0:
printf("奖金总数k=%d\n", a);
break;
case 1:
printf("奖金总数k=%d\n", a + b);
break;
case 2:
case 3:
printf("奖金总数k=%d\n", a + b + c);
break;
case 4:
case 5:
printf("奖金总数k=%d\n", a + b + c + d);
break;
case 6:
case 7:
case 8:
case 9:
printf("奖金总数k=%d\n", a + b + c + d + e);
break;
default :
printf("奖金总数k=%d\n", a + b + c + d + e + f);
break;
}
望采纳~追问g = (I - 1) / 100000;

大神,请问这句是什么意思,中间必须要这么多的case么?看上去有些好像是多余的?追答case只能对整型或字符起作用,不能对范围起作用,换句话说,必须是确定的数。按照本题,所列出的范围是10W到100W,除以10W正好能得到这样一个结果:利用10个数达到表示范围的目的。
所以让利润除以10W。但是只是除以10W不能达到目的,举例来说,当利润刚好是10W的时候,本身该是第一档,结果算成了第二档;利用利润I-1刚好达到了区分的目的,希望你能调试一下程序,然后消化一下用意。。

举例说明:
I <= 100000 时,g = (I - 1) / 100000 = 0;

100000 < I && I <= 200000时,g = (I - 1) / 100000 = 1;
200000 < I && I <= 400000时,g = (I - 1) / 100000 = 2或3;
400000 < I && I <= 600000时,g = (I - 1) / 100000 = 4或5;
600000 < I && I <= 1000000时,g = (I - 1) / 100000 = 6或7或8或9;
大于100w属于其他情况 。
全部回答
case后跟定值,不能跟变量
case不能出现不等式,只能是等式
switch case()括号里貌似不能这样写吧!
switch(int(I/100000))
{
case 0:
    printf("奖金总数k=%d ", a);
    break;
    case 1:
        printf("奖金总数k=%d ", a + b);
        break;
    case 2:
    case 3:
        printf("奖金总数k=%d ", a + b + c);
        break;
case 4:
case 5:
    printf("奖金总数k=%d ", a + b + c + d);
    break;
case 6:
case 7:
case 8:
case 9:
    printf("奖金总数k=%d ", a + b + c + d + e);
    break;
default:
    printf("奖金总数k=%d ", a + b + c + d + e + f);
    break;
}追问switch( int (I / 100000))

大神,请问这句是什么意思,中间必须要这么多的case么?看上去有些好像是多余的?追答整型运算的结果还是整型,也就是没有小数的,
0~~100000的数据除以100000的结果就是0
600000~1000000的数据除以100000的结果就是6,7,8,9
所以中间需要那么多的case追问不好意思,刚开始没看见你的答案,你们解释的都非常好

你的逻辑错了。。

而且。。switch case 只能是具体的数字,你可以用if else

int I, k, a, b, c, d, e, f;
 printf("请输入利润I: ");
 scanf("%d", &I);
 a = 100000 * (1/10);
 b = (200000 - 100000) * 75/1000;
 c = (400000 - 200000) * 5/100;
 d = (600000 - 400000) * 3/100;
 e = (1000000 - 600000) * 15/1000;
 if(I <= 100000)
  printf("奖金总数k=%d ", I/10);
 else if(100000 < I && I <= 200000)
  printf("奖金总数k=%d ", a + (I - 100000) * 75/1000);
 else if(200000 < I && I <= 400000)
  printf("奖金总数k=%d ", a + b + (I- 200000) * 5/100);
 else if(400000 < I && I <= 600000)
  printf("奖金总数k=%d ", a + b + c + (I- 400000) * 3/100);
 else if(600000 < I && I <= 1000000)
  printf("奖金总数k=%d ", a + b + c + d + (I- 600000) * 15/1000);
 else
  printf("奖金总数k=%d ", a + b + c + d + e + (I -1000000) * 1/100);

我随便写的,应该没问题了

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎样申请识货认证?
明可达的台灯怎么样?这个牌子好吗?
1.8括号x-12括号等于19.8用方程怎么解
2008tvb电视排行榜
潜伏式浇口在模具中是怎么顶出来的
从界首到西安杨凌有多远
单选题下面有关文学知识的表述完全正确的一项
6时多少分时时针与分针成110度角
引起冰箱起火有哪些原因
fgo首冲只有一次吗
2018年4月份1法郎等于多少人民币
关于反应3O2(g)=2O3(g)△H>0,下列说法
求家教耽美主受文,all27,all18,all69,all
为什么我的C4D填充不了颜色
芬兰和澳洲哪个益生菌好
推荐资讯
There existed an obvious between the accou
刚戴渐近眼镜 眼睛怎么冒水 这 正常吗?
late 和 later 有什么区别?
找出图中有几处不同的地方
哪个牌子的酸汤鱼料好
38+(27-19)=46的竖式计算怎么做
绩效考核奖励考核办法
"水滴"船中"左右''一词说明什么
肉眼可以在夜空中看到天狼星么?
从海天e家酒店到极地海洋怎么走
为什么家人去逝后要三十五天才能去坟地看
哈登的运球是怎样运的,怎样学习
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?