| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 1763 人关注过本帖
标题:请帮忙看看这段程序怎么理解!
收藏  订阅  推荐  打印 
小说贝斯
Rank: 1
等级:新手上路
帖子:29
积分:420
注册:2007-8-4
请帮忙看看这段程序怎么理解!

#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: 2
来自:xmu
等级:注册会员
帖子:47
积分:734
注册:2007-12-13

switch-case语句的执行过程是:
从第一个case语句开始,直到遇到break跳出
2007-12-27 15:31
小说贝斯
Rank: 1
等级:新手上路
帖子:29
积分:420
注册:2007-8-4

原帖由 [bold][underline]Lonelie[/underline][/bold] 于 2007-12-27 15:31 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1162271&ptid=194594][/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
积分:174
注册:2007-10-27

case0,case1,case2 等后没有break,故程序向下顺序执行,直到有break语句跳出
2007-12-27 18:44
guojias923
Rank: 1
等级:新手上路
帖子:1
积分:110
注册:2007-12-27

我也是新手,不过这个程序还是看得懂的,
问题的关键是出在这段代码:
             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: 2
来自:xmu
等级:注册会员
帖子:47
积分:734
注册:2007-12-13

ls说的很清楚
2007-12-28 09:25
xiangz9025
Rank: 1
等级:新手上路
帖子:29
积分:452
注册:2007-10-30

我想问一下,尽管程序这样写看起来很简洁,但是是不是效率会比加入break低啊!新手请教!
2007-12-28 12:49
kidd2005
Rank: 3Rank: 3
等级:中级会员
帖子:193
积分:2174
注册:2007-11-2

按道理就应该是比加入BREAK低了,因为是顺延下去检查有没有BREAK语句,
我也是新手,说得不对要尽快向我指出啊

潜心苦C,却发觉百C不得其解啊~
2007-12-28 16:46
中学者
Rank: 12Rank: 12Rank: 12
等级:版主
威望:11
帖子:3376
积分:34542
注册:2007-9-14

每个case加上break就不正常了.

汇编.....
2007-12-28 18:06
wch27149
Rank: 2
等级:注册会员
帖子:40
积分:648
注册:2007-10-24
回复 1# 的帖子

我也是刚学switch结构,刚才看书:当几个case有共同的code的时候,可以只写一个case而其他的用空白。就像你写的,如果前5个都用空白,就会都用第六个的code。所以才会输入20,显示2,输入30也显示2。

我叫wch,编号27149
感谢little monkey同学。
2007-12-28 19:39
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.049043 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved