| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2751 人关注过本帖
标题:请帮忙看看这段程序怎么理解!
只看楼主 加入收藏
小说贝斯
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-8-4
收藏
 问题点数:0 回复次数:16 
请帮忙看看这段程序怎么理解!
#include<iostream.h>
 void main()
 {
     int score,s,sum;
     char grade;
     cout<<"please input score "<<endl;
     cin>>score;
     if(score>=0&&score<=100)
     {
         s=score/10;
         switch(s)
         {
             case 0:
             case 1:
             case 2:
             case 3:
             case 4:
             case 5: grade='2';break;
             case 6:
             case 7: grade='3';break;
             case 8: grade='4';break;
             case 9:
             case 10: grade='5';break;
         }
         cout<<"grade is "<<grade<<endl;
     }
     else
         cout<<"data error\n";
 }
这是一个把百分制成绩按照五分制输出的程序,用switch写的!可是我不太明白case那段代码。比如我输入20,为什么也显示2,输入30也显示2!请知道的解释下具体原因!
搜索更多相关主题的帖子: case grade score break 
2007-12-27 12:45
Lonelie
Rank: 1
来 自:xmu
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-12-13
收藏
得分:0 
switch-case语句的执行过程是:
从第一个case语句开始,直到遇到break跳出
2007-12-27 15:31
小说贝斯
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-8-4
收藏
得分:0 
原帖由 [bold][underline]Lonelie[/underline][/bold] 于 2007-12-27 15:31 发表 [url=http://bbs.][/url]
switch-case语句的执行过程是:
从第一个case语句开始,直到遇到break跳出

恩,你说的我明白,但是我想知道的是为什么case0,case1,case2等后面没有写grade='2';break;也能输出‘2’!应该是我没有表达清楚吧!我是个新手,对这不明白!希望会的朋友不要只做过客!

Standing on Shoulders of Giants
2007-12-27 17:23
pzj636484
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-10-27
收藏
得分:0 
case0,case1,case2 等后没有break,故程序向下顺序执行,直到有break语句跳出
2007-12-27 18:44
guojias923
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-12-27
收藏
得分:0 
我也是新手,不过这个程序还是看得懂的,
问题的关键是出在这段代码:
             case 0:
             case 1:
             case 2:
             case 3:
             case 4:
             case 5: grade='2';break;
当你用分数除以10后,所得的整形值会与"S"配对,当配对后程序运行到当对应的case(n)后会检查,是否在这个分支里结束(break),你这段代码在s<5这前,程序都会运行到case 5才结束.所以你输入的成绩小于60时都会输出"2"
如果你需要设置那么多的成绩等级,可以在每个case (s)后面 加grade=s;break.





2007-12-27 18:46
Lonelie
Rank: 1
来 自:xmu
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-12-13
收藏
得分:0 
ls说的很清楚
2007-12-28 09:25
xiangz9025
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-10-30
收藏
得分:0 
我想问一下,尽管程序这样写看起来很简洁,但是是不是效率会比加入break低啊!新手请教!
2007-12-28 12:49
kidd2005
Rank: 1
等 级:新手上路
帖 子:193
专家分:0
注 册:2007-11-2
收藏
得分:0 
按道理就应该是比加入BREAK低了,因为是顺延下去检查有没有BREAK语句,
我也是新手,说得不对要尽快向我指出啊

潜心苦C,却发觉百C不得其解啊~
2007-12-28 16:46
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
每个case加上break就不正常了.

樱花大战,  有爱.
2007-12-28 18:06
wch27149
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-10-24
收藏
得分:0 
回复 1# 的帖子
我也是刚学switch结构,刚才看书:当几个case有共同的code的时候,可以只写一个case而其他的用空白。就像你写的,如果前5个都用空白,就会都用第六个的code。所以才会输入20,显示2,输入30也显示2。

我叫wch,编号27149
感谢little monkey同学。
2007-12-28 19:39
快速回复:请帮忙看看这段程序怎么理解!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035273 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved