📄 教学--第九章 条件分支语句.htm
字号:
<P>//---------------------------------------------------------------------------
<P><B>#include <iostream.h></B>
<P>#pragma hdrstop
<P>//---------------------------------------------------------------------------
<P>#pragma argsused
<P>int main(int argc, char* argv[])
<P>{</SPAN>
<P> <SPAN lang=EN-US><B>int fromWay;</B>
<P>
<P><B> cout << "请通过输入序号,选择您如何来到本网站。" << endl;</B>
<P><B> cout << "1) ---- 通过搜索引擎" << endl;</B>
<P><B> cout << "2) ---- 通过朋友介绍" << endl; </B>
<P><B> cout << "3) ---- 通过报刊杂志" << endl;</B>
<P><B> cout << "4) ---- 通过其它方法" << endl;</B>
<P>
<P><B> cin >> fromWay;</B>
<P>
<P><B> switch (fromWay)</B>
<P><B> {</B>
<P><B> case 1 : </B>
<P><B> cout << "您是通过搜索引擎来到本网站的。"
<< endl;</B>
<P><B> break;</B>
<P><B> case 2 : </B>
<P><B> cout << "您是通过朋友介绍来到本网站的。"
<< endl;</B>
<P><B> break;</B>
<P><B> case 3 : </B>
<P><B> cout << "您是通过报刊杂志来到本网站的。"
<< endl;</B>
<P><B> break;</B>
<P><B> case 4 : </B>
<P><B> cout << "您是通过其它方法来到本网站的。"
<< endl;</B>
<P><B> break;</B>
<P><B> default :</B>
<P><B> cout <<
"错误的选择!请输入1~4的数字做出选择。" << endl;</B>
<P><B> }</B>
<P>
<P><B> getchar();</B>
<P>
<P> return 0;
<P>}
<P>
<P>以下是我运行的一个结果,我输入的是2。
<P><IMG height=199 src="教学--第九章 条件分支语句.files/ls09.h1.gif" width=397
border=0>
<P>
<P>对照输入结果,我们讲一讲这段代码,其中主要目的是要弄明白switch语句的用法。
<P>
<P>首先,int fromWay 定义了一个整型变量,准备用来存储用户输入的选择。</SPAN>
<P>
<P><SPAN lang=EN-US>cout << "请通过输入序号,选择您如何来到本网站。" << endl;
<P>cout << "1) ---- 通过搜索引擎" << endl;
<P>cout << "2) ---- 通过朋友介绍" << endl;
<P>cout << "3) ---- 通过报刊杂志" << endl;
<P>cout << "4) ---- 通过其它方法" << endl;
<P>
<P>这些语句输出提示和选择项,结果如上图。
<P>
<P>cin >> fromWay; 这一句则负责等待用户输入,并且将用户的输入存储到 fromWay。
<P>接下来程序遇上了 switch 语句:
<P>
<P>switch (fromWay)
<P>程序将根据 fromWay 值,在下面的各个case
中找到匹配的值。 本例中switch带有四个case,值分别是1、2、3、4。在结果图中,由于我输入的是2,所以程序进入下面这个case:
<P>case 2 :
<P> cout << "您是通过朋友介绍来到本网站的。" << endl;
<P> break;
<P>
<P>程序打出"您是通过朋友介绍来到本网站的。" 这行内容。最后遇上 <B>break;</B>于是跳出整个switch语句。
<P>
<P>同样的道理,如果用户输入的是其它的数,如1或3,则会进入相应的case 1 或 case 3 分支。
<P>但如果用户输入的数在所有的case
里都找不到时,会怎么样?比如,用户输入5。这种情况下,default分支将起作用,所有case里的值都不匹配时,switch进入default分支。如果连default也没有,那么程序在switch语句里什么也不做,直接完成switch语句。
<P>我们来看一下如果用户不按所列的情况输入,而造成的结果:
<P><IMG height=183 src="教学--第九章 条件分支语句.files/ls09.h2.gif" width=381
border=0>
<P>
<P>了解一下switch,case,break,default的意思,对理解前面的一切也会有帮助,它们分别是:开关,情况,中断,默认(值)。那么用一句话套起来的说法就是:根据开关值的不同,执行不同的情况,直到遇上中断;如果所有的情况都不符合开关值,那么就执行默认的分支。
<P>
<P>最后说一下关于switch中非常重要的几个注意点。
<P>
<P><B>第一、</B>switch ( 整型或字符型变量
) 中,<B>变量的类型</B>如文中所标,<B>只能是整型和字符类型。</B>它们包含
int,char。当然无符类型或不同的长度整型(unsigned int,short,unsigned
char)等都可以。另外,枚举类型(enum)内部也是由整型或字符类型实现。所以也可以。实型(浮点型)数就不行,如:</SPAN>
<P><SPAN lang=EN-US>float a = 0.123;</SPAN>
<P><SPAN lang=EN-US>switch(a) //错误!a不是整型或字符类型变量。 </SPAN>
<P><SPAN lang=EN-US>{</SPAN>
<P><SPAN lang=EN-US> ....</SPAN>
<P><SPAN lang=EN-US>}
<P>
<P><B>第二、</B>case 之后可以是直接的常量数值,如例中的1、2、3、4,也可以是一个使用常量计算式,如2+2等,但不能是变量或带有变量的表达式,如
a * 2等。当然也不能是实型数,如4.1,或2.0 / 2 等。
<P>switch(formWay)
<P>{
<P> case 2-1 : //正确
<P> ...
<P> case a-2 : //错误
<P> ...
<P> case 2.0 : //错误
<P> ...
<P>}
<P>另外,在case 与常量值之后,需要一个冒号,请注意不要疏忽。
<P>
<P><B>第三、</B>break 的作用。
<P>break
使得程序在执行完选中的分支后,可以跳出整个switch语句(即跳到switch接的一对{}之后),完成switch。如果没有这个break,程序将在继续前进到下一分支,直到遇到后面的break或者switch完成。
<P>比如,假设现在程序进入case 1: 中的分支,但case 1 的分支这回没有加break:
<P>
<P>case 1 :
<P> <B> </B>cout << "您是通过搜索引擎来到本网站的。" <<
endl;
<P>case 2 :
<P> cout << "您是通过朋友介绍来到本网站的。" << endl;
<P>
<P>那么,程序在输出 "您是通过搜索引擎来到本网站的。" 之后,会继续输出case 2中的 "您是通过朋友介绍来到本网站的。" 。
<P>请大家将前面实例中的代码片段改为如下(红色部分,即将所有的break都通过加//使之无效。):
<P> ...
<P> case 1 :
<P> cout << "您是通过搜索引擎来到本网站的。"
<< endl;
<P><FONT color=#ff0000>
//break;</FONT>
<P> case 2 :
<P> cout << "您是通过朋友介绍来到本网站的。"
<< endl;
<P><FONT color=#ff0000>
//break;</FONT>
<P> case 3 :
<P> cout << "您是通过报刊杂志来到本网站的。"
<< endl;
<P><FONT color=#ff0000>
//break;</FONT>
<P> case 4 :
<P> cout << "您是通过其它方法来到本网站的。"
<< endl;
<P><FONT color=#ff0000>
//break;</FONT>
<P> default :
<P> cout <<
"错误的选择!请输入1~4的数字做出选择。" << endl;
<P> ...
<P>
<P>运行后,结果会是如何?请大家动手试试,然后在作业中回答我。
<P>
<P><B>第四、</B>default是可选中,前面我们已经说过它的用处,及如果没有default,程序在找不到匹配的case分支后,将在switch语句范围内不做什么事,直接完成switch。大家也可以在实例中将default的代码注释掉,然后试运行,并且在选择时输入5。
<P>...
<P>//default :
<P> //cout << "错误的选择!请输入1~4的数字做出选择。" << endl;
<P>...
<P>
<P><B>第五、</B>必要时,可在各个case中使用{}来明确产生独立的复合语句。
<P>前面我们在讲if...语句和其它流程控制语句时,都使用{}来产生复合语句:
<P>if (条件)
<P>{
<P> 分支一;
<P>}
<P>除非在分支中的语句正好只有一句,这里可以不需要花括号{}。但在switch的各个case语句里,我们在语法格式上就没有标出要使用{},请看:
<P>switch ( 整型或字符型变量 )
<P>{<BR> case 变量可能值1
: <BR>
分支一;<BR> break;
<P> case 变量可能值2 : <BR> ....
<P>}
<P>
<P>一般教科书上只是说 case
分支可以不使用{},但这里我想提醒大家,并不是任何情况下case分支都可以不加{},比如你想在某个case里定义一个变量:
<P>switch (formWay)
<P>{
<P> case 1 :
<P> int a=2;
//错误。由于case不明确的范围,编译器无法在此处定义一个变量。
<P> ...
<P> case 2 :
<P> ...
<P>}
<P>
<P>在这种情况下,加上{}可以解决问题。
<P>switch (formWay)
<P>{
<P> case 1 :
<P> {
<P> int a=2; //正确,变量a被明确限定在当前{}范围内。
<P> ...
<P> }
<P> case 2 :
<P> ...
<P>}
<P>由于本注意点涉及到变量的作用范围,所以你如果看得不是很明白,可以暂时放过。
<P>
<P><B>第六、</B>switch并不能代替所有有if..else...语句。这一点你应该知道了,因为前面已说过,它在对变量做判断时,只能对整型或字符型的变量做判断。另外,switch也只能做“值是否相等”的判断。你不能在case里写条件:
<P>
<P>switch (i)
<P>{
<P> case (i >= 32 && i<=48)
//错误! case里只能写变量的可能值,不能写条件。
<P> ...
<P>}
<P>
<P>在这种情况下,你只能通过 if...else来实现。
<P>
<H3><A name=9.6>9.6</A> 小结</H3>
<P>
<P>这一节课我们学了所有条件分支的流程控制语句。在编程的时候,我们选择什么语句呢?嗯,这是一个问题。幸好,这个问题不像丹麦王子哈姆雷特面对的那样困难。你所要做的就是<B>多看几遍本章课程</B>、<B>多做几次本章的各个短小简单的例程。</B>从基础做起。然后,我们会安排一个完整的,适合我们现在水准的小项目进行实战。
<P>
<P>也许你害怕做选择、也许你正在为难于某个选择、也许你一直为某个错误的选择而后悔……
<P>但如果生活真的没有了选择……或者
<P>如果我们所要经历一切选择都只能由别人做出决定……
<P>这样的生活肯定不精彩。
<P>编程也一样。学好条件选择的流程,你就能写一些精彩的程序!
<P>所以庆贺一下吧,就在这一章的内容,我们学完了所有的条件分支的流程控制语句!要知道,无论是什么编程语言,也都只有两大流程控制!
<P>多加努力!下一章《循环语句》见!</SPAN>
<P> </P></TD></TR></TBODY></TABLE></CENTER>
<P align=center>[<A
href="http://d2school.com/bcyl/bhcpp/newls/ls09.htm#页首">到页首</A>]</P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -