⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 教学--第九章 条件分支语句.htm

📁 电子书籍(白话c++)非常好用的一本书
💻 HTM
📖 第 1 页 / 共 3 页
字号:
      <P>//--------------------------------------------------------------------------- 

      <P><B>#include &lt;iostream.h&gt;</B> 
      <P>#pragma hdrstop 
      <P>//--------------------------------------------------------------------------- 

      <P>#pragma argsused 
      <P>int main(int argc, char* argv[]) 
      <P>{</SPAN> 
      <P>&nbsp; <SPAN lang=EN-US><B>int fromWay;</B> 
      <P>  
      <P><B>&nbsp; cout &lt;&lt; "请通过输入序号,选择您如何来到本网站。" &lt;&lt; endl;</B> 
      <P><B>&nbsp; cout &lt;&lt; "1) ---- 通过搜索引擎" &lt;&lt; endl;</B> 
      <P><B>&nbsp; cout &lt;&lt; "2) ---- 通过朋友介绍" &lt;&lt; endl;&nbsp;&nbsp;</B> 

      <P><B>&nbsp; cout &lt;&lt; "3) ---- 通过报刊杂志" &lt;&lt; endl;</B> 
      <P><B>&nbsp; cout &lt;&lt; "4) ---- 通过其它方法" &lt;&lt; endl;</B> 
      <P>  
      <P><B>&nbsp; cin &gt;&gt; fromWay;</B> 
      <P>  
      <P><B>&nbsp; switch (fromWay)</B> 
      <P><B>&nbsp; {</B> 
      <P><B>&nbsp;&nbsp;&nbsp; case 1 :&nbsp;</B> 
      <P><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "您是通过搜索引擎来到本网站的。" 
      &lt;&lt; endl;</B> 
      <P><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</B> 
      <P><B>&nbsp;&nbsp;&nbsp; case 2 :&nbsp;</B> 
      <P><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "您是通过朋友介绍来到本网站的。" 
      &lt;&lt; endl;</B> 
      <P><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</B> 
      <P><B>&nbsp;&nbsp;&nbsp; case 3 :&nbsp;</B> 
      <P><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "您是通过报刊杂志来到本网站的。" 
      &lt;&lt; endl;</B> 
      <P><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</B> 
      <P><B>&nbsp;&nbsp;&nbsp; case 4 :&nbsp;</B> 
      <P><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "您是通过其它方法来到本网站的。" 
      &lt;&lt; endl;</B> 
      <P><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</B> 
      <P><B>&nbsp;&nbsp;&nbsp; default :</B> 
      <P><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; 
      "错误的选择!请输入1~4的数字做出选择。" &lt;&lt; endl;</B> 
      <P><B>&nbsp; }</B> 
      <P>  
      <P><B>&nbsp; getchar();</B> 
      <P>  
      <P>&nbsp;&nbsp; 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 &lt;&lt; "请通过输入序号,选择您如何来到本网站。" &lt;&lt; endl; 
      <P>cout &lt;&lt; "1) ---- 通过搜索引擎" &lt;&lt; endl; 
      <P>cout &lt;&lt; "2) ---- 通过朋友介绍" &lt;&lt; endl;&nbsp;&nbsp; 
      <P>cout &lt;&lt; "3) ---- 通过报刊杂志" &lt;&lt; endl; 
      <P>cout &lt;&lt; "4) ---- 通过其它方法" &lt;&lt; endl; 
      <P>  
      <P>这些语句输出提示和选择项,结果如上图。 
      <P>  
      <P>cin &gt;&gt; fromWay; 这一句则负责等待用户输入,并且将用户的输入存储到 fromWay。 
      <P>接下来程序遇上了 switch 语句: 
      <P>  
      <P>switch (fromWay) 
      <P>程序将根据 fromWay 值,在下面的各个case 
      中找到匹配的值。 本例中switch带有四个case,值分别是1、2、3、4。在结果图中,由于我输入的是2,所以程序进入下面这个case: 
      <P>case 2 :&nbsp; 
      <P>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "您是通过朋友介绍来到本网站的。" &lt;&lt; endl; 
      <P>&nbsp;&nbsp;&nbsp; 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不是整型或字符类型变量。&nbsp;&nbsp;</SPAN> 
      <P><SPAN lang=EN-US>{</SPAN> 
      <P><SPAN lang=EN-US>&nbsp; ....</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>&nbsp;&nbsp; case 2-1 :&nbsp; //正确 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; ... 
      <P>&nbsp;&nbsp; case a-2 :&nbsp; //错误 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; ... 
      <P>&nbsp;&nbsp; case 2.0 :&nbsp; //错误 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; ... 
      <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>&nbsp;<B>&nbsp;&nbsp; </B>cout &lt;&lt; "您是通过搜索引擎来到本网站的。" &lt;&lt; 
      endl; 
      <P>case 2 :&nbsp; 
      <P>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "您是通过朋友介绍来到本网站的。" &lt;&lt; endl; 
      <P>  
      <P>那么,程序在输出 "您是通过搜索引擎来到本网站的。" 之后,会继续输出case 2中的 "您是通过朋友介绍来到本网站的。" 。 
      <P>请大家将前面实例中的代码片段改为如下(红色部分,即将所有的break都通过加//使之无效。): 
      <P>&nbsp;&nbsp;&nbsp; ... 
      <P>  case 1 :&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "您是通过搜索引擎来到本网站的。" 
      &lt;&lt; endl; 
      <P><FONT color=#ff0000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //break;</FONT> 
      <P>&nbsp;&nbsp;&nbsp; case 2 :&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "您是通过朋友介绍来到本网站的。" 
      &lt;&lt; endl; 
      <P><FONT color=#ff0000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //break;</FONT> 
      <P>&nbsp;&nbsp;&nbsp; case 3 :&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "您是通过报刊杂志来到本网站的。" 
      &lt;&lt; endl; 
      <P><FONT color=#ff0000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //break;</FONT> 
      <P>&nbsp;&nbsp;&nbsp; case 4 :&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "您是通过其它方法来到本网站的。" 
      &lt;&lt; endl; 
      <P><FONT color=#ff0000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //break;</FONT> 
      <P>&nbsp;&nbsp;&nbsp; default : 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; 
      "错误的选择!请输入1~4的数字做出选择。" &lt;&lt; endl; 
      <P>&nbsp;&nbsp;&nbsp; ... 
      <P>  
      <P>运行后,结果会是如何?请大家动手试试,然后在作业中回答我。 
      <P>  
      <P><B>第四、</B>default是可选中,前面我们已经说过它的用处,及如果没有default,程序在找不到匹配的case分支后,将在switch语句范围内不做什么事,直接完成switch。大家也可以在实例中将default的代码注释掉,然后试运行,并且在选择时输入5。 

      <P>... 
      <P>//default : 
      <P>&nbsp;&nbsp; //cout &lt;&lt; "错误的选择!请输入1~4的数字做出选择。" &lt;&lt; endl; 
      <P>... 
      <P>  
      <P><B>第五、</B>必要时,可在各个case中使用{}来明确产生独立的复合语句。 
      <P>前面我们在讲if...语句和其它流程控制语句时,都使用{}来产生复合语句: 
      <P>if (条件) 
      <P>{ 
      <P>&nbsp; 分支一; 
      <P>} 
      <P>除非在分支中的语句正好只有一句,这里可以不需要花括号{}。但在switch的各个case语句里,我们在语法格式上就没有标出要使用{},请看: 
      <P>switch ( 整型或字符型变量 ) 
      <P>{<BR>&nbsp;&nbsp;&nbsp;  case 变量可能值1 
      :&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp; 
      分支一;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break; 
      <P>&nbsp;&nbsp; case 变量可能值2 :&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .... 

      <P>} 
      <P>  
      <P>一般教科书上只是说 case 
      分支可以不使用{},但这里我想提醒大家,并不是任何情况下case分支都可以不加{},比如你想在某个case里定义一个变量: 
      <P>switch (formWay) 
      <P>{ 
      <P>&nbsp;&nbsp; case 1 : 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; int a=2;&nbsp; 
      //错误。由于case不明确的范围,编译器无法在此处定义一个变量。 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; ... 
      <P>&nbsp;&nbsp; case 2 : 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; ... 
      <P>} 
      <P>  
      <P>在这种情况下,加上{}可以解决问题。 
      <P>switch (formWay) 
      <P>{ 
      <P>&nbsp;&nbsp; case 1 : 
      <P> {  
      <P>&nbsp;&nbsp;&nbsp;&nbsp; int a=2;&nbsp; //正确,变量a被明确限定在当前{}范围内。 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; ... 
      <P>&nbsp; }  
      <P>&nbsp;&nbsp; case 2 : 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; ... 
      <P>} 
      <P>由于本注意点涉及到变量的作用范围,所以你如果看得不是很明白,可以暂时放过。 
      <P>  
      <P><B>第六、</B>switch并不能代替所有有if..else...语句。这一点你应该知道了,因为前面已说过,它在对变量做判断时,只能对整型或字符型的变量做判断。另外,switch也只能做“值是否相等”的判断。你不能在case里写条件: 

      <P>  
      <P>switch (i) 
      <P>{ 
      <P>&nbsp; case (i &gt;= 32 &amp;&amp; i&lt;=48) 
      //错误! case里只能写变量的可能值,不能写条件。 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; ... 
      <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 + -