有问题请教?

hurryupxo 2003-10-15 12:09:34
#include <iostream.h>
void main()
{
float score;
cout <<"请输入成绩:";
cin >>score;
switch (int(score)/10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5: cout <<"不合格";endl;break;
case 6: cout <<"合格";endl;break;
case 7: cout <<"中";endl;break;
case 8: cout <<"良";endl;break;
case 9:
case 10: cout <<"优";endl;break;
default: cout<<"成绩必须在0~100之间";
}
}

__________________________________________________________________________
请问:1、我写的是1~10的,为什么switch能够识别出结果是0~100之间的数?
2、switch (int(score)/10)这里的/10是不是除以10的意思?为什么要除以10?
3、switch 语句是不是全部都要根着顺序写的?例如1:、2:、3:、4:、……
不根顺序行不行的呢?
...全文
33 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wglfuture 2003-10-15
  • 打赏
  • 举报
回复
你这儿的指的是十种情况,但并不是1-10之间的数,switch是一个多分支条件语句。根据情况的不同会设不同结果。
panzhaoping 2003-10-15
  • 打赏
  • 举报
回复
switch (int(score)/10)这里的/10是不是除以10的意思
当然是拉,int(score)/10 作为一个临时变量。一般的
编译器可以对简单的计算求值的
mjfsun 2003-10-15
  • 打赏
  • 举报
回复
1.这个程序本身就是判断100以内的成绩。这和第二个问题有关。

2.int(score)先把score强制转换成int然后/10表示整除取商,除以十是因为case得条件是0-
10。这样可以把成绩分成十类。

3.case是顺序执行的,至于判断条件是否顺序就要根据题目的意思。对于这个题目最好用顺
序。

如果你写的是1-10,那么把/10改称/1就可以了。
hurryupxo 2003-10-15
  • 打赏
  • 举报
回复
有人明白我问的问题吗?
TianGuangZao 2003-10-15
  • 打赏
  • 举报
回复
仔细看了一下,楼主提的问题好呀!这个程序有 bug, 输入 101,出来也是优。

include <iostream.h>
void main()
{
float score;
cout <<"请输入成绩:";
cin >>score;
if ( score == 100) { cout <<"优"; endl;}
else {
switch (int(score)/10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5: cout <<"不合格";endl;break;
case 6: cout <<"合格";endl;break;
case 7: cout <<"中";endl;break;
case 8: cout <<"良";endl;break;
case 9: cout <<"优";endl;break;
default: cout<<"成绩必须在0~100之间";
}
}
}

不过效率实在太低,有好多改进方法,自己慢慢想吧!
hurryupxo 2003-10-15
  • 打赏
  • 举报
回复
我就是不明白我没有把int定义为0~100的数,为什么程序能够算出了我的分数是0~100 之间的数?
hurryupxo 2003-10-15
  • 打赏
  • 举报
回复
还是有点不明白:(int(score)/10),例如我要输入的成绩是88分然后除了10得出来的答案是8.8分了,为什么和实输出的不一样呢?
verbal 2003-10-15
  • 打赏
  • 举报
回复
1.楼主写的是1-10的case,但是可以识别1-100的数,原因是根据题目的意思,例:当case为2时那么它所能识别的数就为100中的20-29,以此类推就可以明白,为什么题目能用case 1-10来识别1-100的数了。
2.这里是除以10的意思,题目的意思为50-59为“不及格”60-69为及格,70-79为“中”....
这里把分数等级化了,可以简便的统计。这也就是为什么要除以10的原因。
3.switch不一定要顺序化的,顺序化只是一种约定。
TianGuangZao 2003-10-15
  • 打赏
  • 举报
回复
顺序排列是为了程序更加清晰,不过效率并不高。
不妨可以先思考一下正常情况下的分数分布情况:
假设:中 >= 良 >= 合格 >= 优 >= 不合格
如下排列:
switch (int(score)/10) {
case 7: cout << "中" << endl; break;
case 8: cout << "良" << endl; break;
case 6: cout << "合格" << endl; break;
case 9:
case 10: cout << "优" << endl; break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0: cout << "不合格" << endl; break;
default: cout << "成绩必须在0~100之间" << endl; break;


个人觉得下面这样写,应该有更高的效率,可读写也更好:
switch (int(score)/10) {
case 7 : cout << "中" << endl; break;
case 8 : cout << "良" << endl; break;
case 6 : cout << "合格" << endl; break;
case 9 : cout << "优" << endl; break;
case 10: cout << "优" << endl; break;
case 5 : cout << "不合格" << endl; break;
case 4 : cout << "不合格" << endl; break;
case 3 : cout << "不合格" << endl; break;
case 2 : cout << "不合格" << endl; break;
case 1 : cout << "不合格" << endl; break;
case 0 : cout << "不合格" << endl; break;
default: cout << "成绩必须在0~100之间" << endl; break;
}
williamVII 2003-10-15
  • 打赏
  • 举报
回复
哈.
不除以10,CASE就太多了(1---100).
另,
case 可以随意排列.
default 也可以放在其它前面,效果是一样的.

不过最好按惯例来,这样可以增强代码可读性.

69,336

社区成员

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

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