📄 c语言基础(13-选择结构(续).htm
字号:
<td height="17" valign="top">
<p align="left">使用if语句可以进行二分支选择,使用嵌套的if语句可以实现多分支选择。但是使用嵌套if 语句时,当分支数比较多,if语句的嵌套层数就会增加,使得程序很难阅读。当对某一个变量(或表达式)的不同取值进行多分支选择的时候应当使用switch语句。(注意:并不是说多分支一定用switch,一定要“注意一个变量(或表达式)的多个取值”这个条件,如果不是这个条件,比如说,是“多个变量(或表达式)的多个取值”这样的条件,那么必须使用if嵌套语句,而不能使用switch语句)。<BR> <FONT color=#0000ff>switch语句的一般形式为</FONT>:<BR> switch(exprssion)<BR> {<BR> case constant1;<BR> statements:<BR> break;<BR> case constant2:<BR> statements;<BR> break;<BR> ....<BR> case constantn:<BR> statements;<BR> break;<BR> default:<BR> statements;<BR> }<BR> ANSI标准规定,一个switch至少可以带有257个case语句,也就是257个分支,但是在实际上不需要用到这么多的分支。<BR> 下面是switch语句格式的详细解释:<BR>switch 是分支的意思。switch(expression) 就是根据expression---表达式的不同值进行分支。<BR> 接下来的'{'号是不可少的,整个分支语句case ...都在一对‘{ }’花括号之间。<BR> case 是一个关键词,在这里是说明紧跟其后的constant--常量值,所以case constant的意思就是“如果expression的值等于constant常量值时”。<BR> 要注意每一个case分支下面都有一个break,break是一个关键词,是C的转移语句之一,它既可用在循环语句中也可以用在switch语句中。当程序执行到break就转移到switch之外的语句,也就是退出了switch。<BR> 最下面的一个分支不是用case组成,而是defaul。default关键词放在这里就是专门处理从case1到casen都没有处理的条件,当以上条件都不满足的时候就交给default语句来处理。<BR><BR> 关于switch语句,有三个要点:<BR>1)switch语句只能对等式进行测试,而if可以计算逻辑表达式或关系表达式的值。<BR>2)在同一个switch语句中,任意两个case常量均不允许有相同的值。当然,一个语句中的case的常量,可以和包围这个switch语句的另一个switch语句中的case的常量有相同的值。<BR>3)如果在switch语句中使用字符常量,它们将自动转换成整型值。<BR><BR>下面是一个使用swicth的例子,这是一个四则运算的程序:<BR>#include<stdio.h><BR>#include<stdlib.h><BR>#include<time.h><BR>#include<conio.h><BR><BR>void main()<BR>{<BR> unsigned int a,b,c;<BR> char ch;<BR> for(;;) /*这里用到了一个for循环,以后会详细地讲*/<BR> {<BR> clrscr(); /*清屏*/
<P> randomize(); /*初始化随机数发生器*/<BR> a=rand(); /*产生一个随机数*/<BR> a=a%100;<BR> b=rand();<BR> b=b%100;<BR> printf("已知 2 个数:%d 和 %d\n",a,b); /*这几条语句是输出提示信息*/<BR> printf("输入"+"号进行加运算\n");<BR> printf("输入"-"号进行减运算\n");<BR> printf("输入"*" 号进行乘运算\n");<BR> printf("输入"/" 号进行除运算\n");<BR> printf("输入"X" 退出\n");</P>
<P> ch=getch(); /*从键盘输入运算符+、-、*、/中的一个*/<BR> switch(ch) /*开始switch分支选择,字符变量ch是选择条件*/<BR> {<BR> case '+': /*如果ch等于字符'+'就执行后面的语句到break为止*/<BR> printf("\n\n输出 a+b= %d",c);<BR> break;<BR> case '-': /*如果ch等于字符'-'就执行后面的语句到break为止*/<BR> printf("\n\n输出 a-b= %d",c);<BR> break;<BR> case '*': /*如果ch等于字符'*'就执行后面的语句到break为止*/<BR> printf("\n\n输出 a*b= %d",c);<BR> break;<BR> case '/': /*如果ch等于字符'/'就执行后面的语句到break为止*/<BR> printf("\n\n输出 a/b= %d",c);<BR> break;<BR> case 'x': /*如果输入的是字符'x'就退出switch分支*/<BR> break;<BR> default: /*如果输入的不是以上的字符,就重新从for循环开始*/<BR> continue;<BR> }<BR> if(ch=='x'){clrscr();break;} /*如果输入的字符等于'x'就退出for循环*/</P>
<P> getch(); /*程序暂停,以便观察输出的结果*/</P>
<P> }<BR>}</P>
<P>在switch语句中,break是可以选择的(可以不写),但此时整个switch语句执行情况会与前面的不同。如果省略了break,那么执行完第一个case里面的语句后将继续执行后面的case语句而不退出switch。这个特性称为“向下传”特性。有时需要利用这个特性达到一些特殊的要求:<BR>例:<BR>void inp_handler(int i)<BR>{<BR> int flag;<BR> flag=-1;<BR> switch(i)<BR> {<BR> case 1:<BR> case 2:<BR> case 3:<BR> flag=0;<BR> break;<BR> case 4:<BR> flag=1;<BR> case 5:<BR> error(flag);<BR> break;<BR> default:<BR> process(ch);<BR> }<BR>}<BR>这个程序说明了两个方面。第一,每个case都可以有空语句。在这个例子中,前三个case都执行了同样的语句:<BR> flag=0;<BR> break;<BR> 第二,如果break语句不存在,就将在下一个case中继续执行。上例中,假设i的值等于4,那么flag置为1。由于不存在break语句,所以继续执行。这样,语句error(flag)也地了。如果i等于,error(flag)将以flag为-1的值被调用。所以有时不用break,几个case可以同时运行,这样就减少了不必要的代码重复,提高了代码效率。<BR><BR>如果要判断某一个区间的值,根据这个值作不同的选择,可以用下面讲的方法,先作一点变换,再用switch选择:<BR>#include<stdio.h><BR>void main(void)<BR>{<BR> int score;<BR> int flag;<BR> scanf("%d",&score);<BR> if(score<=60) flag=1;<BR> else if((score>60)&&(score<=70))flag=2;<BR> else if((score>70)&&(score<=80))flag=3;<BR> else if((score>80)&&(score<=90))flag=4;<BR> else flag=5;<BR> switch(flag)<BR> {<BR> case 1: <BR> printf("成绩为 A");<BR> break;<BR> case 2: <BR> printf("成绩为 B");<BR> break;<BR> case 3: <BR> printf("成绩为 C");<BR> break;<BR> case 4: <BR> printf("成绩为 D");<BR> break;<BR> case 5: <BR> printf("成绩为 E");<BR> break;<BR> }</P>
<P><BR><FONT color=#0000ff>嵌套的switch语句</FONT><BR> 一个switch语句可以作为另一个外层switch语句序列中的一部分。即使外层的switch与内层的switch中的case常量有公共值,也不会发生冲突,例如下面的代码段是完全合法的:<BR>switch(x)<BR>{<BR> case 1:<BR> switch(y)<BR> {<BR> case 0:<BR> printf("divied by zero error");<BR> break;<BR> case 1:<BR> process(x,y);<BR> }<BR> case 2:<BR> ....<BR>}</P> </td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<td width=758 bgColor=#b1bde0>
<P align=right>教程录入:Sunpeople 责任编辑:Sunpeople </P></td>
</tr>
<tr>
<td height=16>
<form method="POST" action="--WEBBOT-SELF--">
<!--webbot bot="SaveResults" U-File="fpweb:///_private/form_results.csv" S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
<p align="left"> <li>上一个教程: <a class='LinkPrevArticle' href='/c/ShowArticle.asp?ArticleID=30' title='文章标题:C语言基础(12-选择结构)
作 者:dd
更新时间:2006-6-6 18:07:13'>C语言基础(12-选择结构)</a></li><BR> <li>下一个教程: <a class='LinkNextArticle' href='/c/ShowArticle.asp?ArticleID=32' title='文章标题:C语言基础(09-有符号数的形式)
作 者:dd
更新时间:2006-6-6 18:08:05'>C语言基础(09-有符号数的形式)</a></li></p>
</form>
</td>
</tr>
<tr>
<td width=758 bgColor=#adb9dd>##相关推荐:</td>
</tr>
<tr>
<td width=758>
<div align=right>
<table cellSpacing=0 cellPadding=0 width="99%">
<!-- MSTableType="layout" -->
<tr>
<td vAlign=top height=118><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1422' title='文章标题:06.9全国计算机等级考试二级C语言上机题
作 者:未知
更新时间:2006-11-4 17:32:49' target="_self">06.9全国计算机等级考试二级…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1421' title='文章标题:06.9全国计算机等级考试二级C语言上机题
作 者:未知
更新时间:2006-11-4 17:32:04' target="_self">06.9全国计算机等级考试二级…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1420' title='文章标题:06.9全国计算机等级考试二级C语言上机题
作 者:未知
更新时间:2006-11-4 17:31:17' target="_self">06.9全国计算机等级考试二级…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1419' title='文章标题:06.9全国计算机等级考试二级C语言上机题
作 者:未知
更新时间:2006-11-4 17:30:27' target="_self">06.9全国计算机等级考试二级…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1418' title='文章标题:06.9全国计算机等级考试二级C语言上机题
作 者:未知
更新时间:2006-11-4 17:21:25' target="_self">06.9全国计算机等级考试二级…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1417' title='文章标题:2006年9月23日计算机等级考试二级C上机试题
作 者:未知
更新时间:2006-11-4 17:19:24' target="_self">2006年9月23日计算机等级考试…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1416' title='文章标题:全国计算机等级考试二级C语言上机题2
作 者:未知
更新时间:2006-11-4 17:16:40' target="_self">全国计算机等级考试二级C语言…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1415' title='文章标题:全国计算机等级考试二级C语言上机题1
作 者:未知
更新时间:2006-11-4 16:58:55' target="_self">全国计算机等级考试二级C语言…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1192' title='文章标题:C语言教程第二章: 数据类型、运算符、表达式
作 者:佚名
更新时间:2006-9-29 17:26:28' target="_self">C语言教程第二章: 数据类型、…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1191' title='文章标题:C语言教程第二章: 数据类型、运算符、表达式
作 者:佚名
更新时间:2006-9-29 17:25:13' target="_self">C语言教程第二章: 数据类型、…</a><br></td>
</tr>
</table>
</div></td>
</tr>
</table>
<table height=164 cellSpacing=0 cellPadding=0 width=760 border=0>
<tr>
<td width=760 background=/images1/index_32.gif height=26>
<P align=center>| <A class=Bottom onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://lsjs.gsau.edu.cn');" href="#">设为首页</A> | <A class=Bottom href="javascript:window.external.addFavorite('http://lsjs.gsau.edu.cn','蓝色极速');">加入收藏</A> | <A class=Bottom href="mailto:wxw404@gmail.com">联系站长</A> | <A class=Bottom href="/FriendSite/Index.asp" target=_blank>友情链接</A> | <A class=Bottom href="/Copyright.asp" target=_blank>版权申明</A> | </P></td>
</tr>
<tr>
<td width=760 background=/images1/index_33.gif height=138>
<P align=center>Copyright (C) 蓝色极速 All Rights Reserved<BR>建议使用:1024*768分辨率,16位以上颜色、Netscape6.0<BR>IE5.0以上版本浏览器和中文大字符集</P></td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -