C语言习题100 第二题 算法问题
#include<stdio.h>main()
{
long int n,i;
double j;
printf("请输入总利润:");
scanf("%ld",&n);
i = n/100000;
printf("%d\n",i);
switch(i)
{
case 0: j = n*0.1;
case 1: j = 100000*0.1+(n-100000)*0.075;
case 2: j = 10000+7500+(n-200000)*0.05;
case 3: j = 10000+7500+(n-200000)*0.05;
case 4: j = 10000+7500+10000+(n-400000)*0.03;
case 5: j = 10000+7500+10000+(n-400000)*0.03;
case 6: j = 10000+7500+10000+6000+(n-600000)*0.015;
case 7: j = 10000+7500+10000+6000+(n-600000)*0.015;
case 8: j = 10000+7500+10000+6000+(n-600000)*0.015;
case 9: j = 10000+7500+10000+6000+(n-600000)*0.015;
case 10: j = 10000+7500+10000+6000+6000+(n-1000000)*0.01;
default : j = 10000+7500+10000+6000+6000+(n-1000000)*0.01;
}
printf("奖金总数为%lf\n",j);
}
请输入总利润:600000
6
奖金总数为35500.000000
Press any key to continue
为什么不是 10000+7500+10000+6000=33500
而是35500
本帖最后由 jackz007 于 2021-1-9 21:47 编辑
每一个 case 的语句块必须以一个 break 结束,否则,从 case 语句的进入点开始,将会顺序执行遇到的每一条语句,而无视这些语句是否属于本 case 语句块。
例如,当 i 为 6 的时候,将会从 6 的人口进入,执行完属于自己的语句块后,还会继续向后执行 i = 7、8、9、10、default 的语句块,全部执行完才会罢休。
所以,引起你疑问的答案就是这个值其实根本就不属于 i = 6 ,而是属于 default 的计算结果。
switch(i)
{
case 0: j = n*0.1;braek;
case 1: j = 100000*0.1+(n-100000)*0.075;braek;
case 2: j = 10000+7500+(n-200000)*0.05;braek;
case 3: j = 10000+7500+(n-200000)*0.05;braek;
case 4: j = 10000+7500+10000+(n-400000)*0.03;braek;
case 5: j = 10000+7500+10000+(n-400000)*0.03;braek;
case 6: j = 10000+7500+10000+6000+(n-600000)*0.015;braek;
case 7: j = 10000+7500+10000+6000+(n-600000)*0.015;braek;
case 8: j = 10000+7500+10000+6000+(n-600000)*0.015;braek;
case 9: j = 10000+7500+10000+6000+(n-600000)*0.015;braek;
case 10: j = 10000+7500+10000+6000+6000+(n-1000000)*0.01;braek;
default : j = 10000+7500+10000+6000+6000+(n-1000000)*0.01;braek;
} jackz007 发表于 2021-1-9 21:36
每一个 case 的语句块必须以一个 break 结束,否则,从 case 语句的进入点开始,将会顺序执行遇到 ...
感谢
页:
[1]