C语言中switch case语句的问题

# include <stdio.h>
void main()

{
int I, k, a, b, c, d, e, f;
printf("请输入利润I:\n");
scanf("%d", &I);
a = I * (1/10);
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;

switch(I)
{
case (I <= 100000):printf("奖金总数k=%d\n", a);break;
case (100000 < I && I <= 200000):printf("奖金总数k=%d\n", a + b);break;
case (200000 < I && I <= 400000):printf("奖金总数k=%d\n", a + b + c);break;
case (400000 < I && I <= 600000):printf("奖金总数k=%d\n", a + b + c + d);break;
case (600000 < I && I <= 1000000):printf("奖金总数k=%d\n", a + b + c + d + e);break;
default (I >= 1000000):printf("奖金总数k=%d\n", a + b + c + d + e + f);break;

}

}
这个怎么改呢?

# include <stdio.h>
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属于其他情况 。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-17

你的逻辑错了。。

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

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

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

第2个回答  2019-08-26
第一switch(表达式)后面要加花括号。也就是说整个语句体要被花括号括起来(复合语句)。
第二:case和常量表达式中间不用加空格吗?
第三:纠正一下,一楼的,defalut后面不用加break,执行defalut后自动退出switch
case。
第3个回答  2013-09-17
switch(int(I/100000))
{
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;
}

追问

switch( int (I / 100000))

大神,请问这句是什么意思,中间必须要这么多的case么?看上去有些好像是多余的?

追答

整型运算的结果还是整型,也就是没有小数的,
0~~100000的数据除以100000的结果就是0
600000~1000000的数据除以100000的结果就是6,7,8,9
所以中间需要那么多的case

追问

不好意思,刚开始没看见你的答案,你们解释的都非常好

第4个回答  2013-09-17
case不能出现不等式,只能是等式

C语言中switch case的问题
switch语句的格式为:switch(条件)语句 其中,条件的类型可以是整数类型,枚举类型,或者类类型(但该类需要有单一的转换到整数类型或(可以是字符类型,但不能是浮点类型、字符串、指针类型等),语句部分不一定非得是一条复合语句。

c语言中switch-case的问题
case 1:printf("**1**");break;}\/\/注意!这里的switch并没有break;所以继续向下执行,执行了 printf("**2**");,虽然a不等于2,但是由于没有Break会继续向下执行的,这就是为什么switch(b)里要加两个break的缘故,没有break会向下执行而不是跳出选择 case 2:printf("**2**");break;} } ...

C语言中switch case语句的问题
{ 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...

请问c语言中switch中的case的冒号后面能加一个程序块吗?初学,望大神指 ...
include<stdio.h> int main() { int a; scanf("%d",&a); switch(a) { case 1:{int b,c=1; for (b=5;b<=8;b++) c=c+b; printf("%d",c); }break; } }

c语言中switch case语句的使用问题
switch( 表达式)\/\/这个地方不能加分号,表达式必须是字符型或整型 { case E1 : 语句组 1; \/\/case 与E1(即常量)之间用空格分隔 case E2 : 语句组 2;\/\/ case后的常量不能相同且常量后必须加冒号 …….case En : 语句组 n;[default: 语句组 ;]} 执行过程:一...

C语言 switch...case问题
x) * 这句话 注意switch语句存在穿透问题 如果语句后面没写 break *语句则一直执行后面的语句而不再进行值得匹配 而是一直将后面的 *语句执行下去 知道遇到break或语句结束 所以此处会一直执行到 *case 10:后面的语句然后跳出switch语句 *\/ { case 4: \/*如果x=4则执行后面...

急求帮忙:这段C语言里边switch case的问题
你的switch case语句应该作为一个函数体,如下:switch(j) { case 0:MessageBox(NULL,"就知道你要点NO,再给你一次机会","恩...",MB_OK);goto loop;case 1:MessageBox(NULL,"我靠,你还敢点NO","作死啊。。",MB_OK);goto loop;} ...

switch语句中case后面的表达式可以是什么?
switch语句中case后面的表达式可以是常量表达式。C语言中switch语句的case后面不能是一个关系表达式,case后面跟的是一个常量表达式,CASE表达式的真假值判断就会中止,而剩余的 WHEN子句会被忽略。使用注意事项:要注意CASE表达式里各个分支返回的数据类型是否一致。某个分支返回字符型,而其他分支返回数值型的...

C语言switch case语句详解
在编程中,选择结构语句用于解决分支问题。当分支数量较少时,使用 if else 语句更合适;当分支数量较多时,switch case 语句能提供更简洁的解决方案。switch case 语句旨在简化多分支逻辑,其基本格式如下:1. 首先计算表达式的值。2. 比较表达式的值与每个 case 后的整数(或整数表达式)是否相等。如果...

c语言中switch用法的问题
在C语言中,switch语句用于执行基于特定条件的选择操作。在您的示例中,程序试图根据变量a的值执行不同的操作。然而,您的代码存在一些错误。首先,您在输入整数后忘记使用`getchar()`或`fflush(stdin)`来清除输入缓冲区。这样做可以避免意外地读取额外的输入,导致程序在运行时发生错误或行为异常。其次,...

相似回答