如何确定switch中case值判断?

ergao 2004-03-24 10:23:51
题目:
I=I*10%(I<=100000)
=I*7.5%(100000<I<=200000)
=I*5%(200000<I<=400000)
=I*3%(400000<I<=600000)
=I*1.5%(600000<I<=1000000)
=I*1%(I>1000000)

main()
{long I;
int c;
float prize;
printf("Please input I:\n");
scanf("%ld",&I);
c=I/100000;

switch(c)
{case 0:prize=I*0.1;break;
case 1:prize=100000*0.1+(I-100000)*0.075;break;
case 2:
case 3:prize=100000*(0.1+0.075)+(I-200000)*0.05;break;
case 4:
case 5:prize=100000*(0.1+0.075)+200000*0.05+(I-400000)*0.03;break;
case 6:
case 7:
case 8:
case 9:prize=100000*(0.1+0.075)+200000*(0.05+0.03)+(I-600000)*0.015;break;
default:prize=100000*(0.1+0.075)+200000*(0.05+0.03)+400000*0.015+(I-1000000)*0.01;
}
printf("Prize is %0.2lf",prize);
}

这个程序中为什么在 case 为2(4,6,7,8)中不跟prize 的计算公式?
这个不写意为着这种条件已经包含在某一其他情况下了!
但这是如何确定的?


...全文
205 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liem 2004-03-24
  • 打赏
  • 举报
回复
在C++/C中的switch结构中"case 常量:",仅起一个标号作用。如果测试值与某个case值相等,就从该入口起执行语句,直到switch结束,除非在某处有break。
ergao 2004-03-24
  • 打赏
  • 举报
回复
我觉得case=2 肯定是有用的
ergao 2004-03-24
  • 打赏
  • 举报
回复
不对啊
照你这么说
如果 c=2时他怎么处理啊(实际情况中是有可能等于2的而且这个程序绝对没有错误)
没有符合条件的语句啦!
因为 case 是一个入口而这个程序执行到c=2 时就找不到符合条件的入口了
也不可能转到case=3 这个入口啊!
happyhappygirl 2004-03-24
  • 打赏
  • 举报
回复
楼主写这个case2是没有用的,因为他没有跟break也没有执行语句,因此他会自动执行case3,即,无论你得出的c值是2还是3都会执行case3后的语句。
ergao 2004-03-24
  • 打赏
  • 举报
回复
就是说break;前的操作是一样的?
以break;来界定这使用什么公式计算!
反是在break前的情况都使用相同的公式
是这样吗?
bm1408 2004-03-24
  • 打赏
  • 举报
回复
这个程序中为什么在 case 为2(4,6,7,8)中不跟prize 的计算公式?

因为你的C定义的是整型变量!
case 2
case 3 执行的操作是一样的,没有必要了!
你写上也没有错!
tcice 2004-03-24
  • 打赏
  • 举报
回复
case 2:
case 3: .. break;
意思是2,3代码一样他到3的那个break跳出循环!
ruihouwei 2004-03-24
  • 打赏
  • 举报
回复
井中月你现在的理解是对的!:)
happyhappygirl() 说得有误!但是当然要写case 2了,要不然c=2的时候就会把它当default情况处理了!
andyliu11 2004-03-24
  • 打赏
  • 举报
回复
因为case=2和case=3后面的语句是相同的,就没必要写出语句,它会自动的执行case=3,自到有breake出结束。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧