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

📄 第11章 循环语句.htm

📁 用非常通俗的语言介绍了C++和C
💻 HTM
📖 第 1 页 / 共 4 页
字号:
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( ch &gt;= 'A' 
      &amp;&amp; ch &lt;= 'Z') 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout 
      &lt;&lt; ch &lt;&lt; "是一个大写字母。" &lt;&lt; endl; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ( ch &gt;= 'a' 
      &amp;&amp; ch &lt;= 'z') 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout 
      &lt;&lt; ch &lt;&lt; "是一个小写字母。" &lt;&lt; endl; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if( ch &gt;= '0' 
      &amp;&amp; ch &lt;= '9') 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout 
      &lt;&lt; ch &lt;&lt; "是一个数字字符。"&nbsp; &lt;&lt; endl; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout 
      &lt;&lt; ch &lt;&lt; "是一个其它的字符。" &lt;&lt; endl; 
      <P>&nbsp;&nbsp;&nbsp; } 
      <P>} 
      <P>  
      <P>这段代码中,我们用到了getche()库函数,它的声明包含在 conio.h 文件中,所以本例程除了"#include 
      &lt;iostream.h&gt;"以外,还另需 "#include &lt;conio.h&gt;"。 
      <P>  
      <P>getche() 和我们常用的 
      getchar()同样是接收用户从键盘输入的<B>一个</B>字符,但getchar()在用户输入字符后,用户还需要敲一下回车键才能完成输入;而getche()则在用户敲入一个字符后,立即完成。本例中,我们希望如果用户敲一个回车键,则程序自动结束(见下面解析),所以我们采用getche()函数。 

      <P>  
      <P>现在来看while的循环条件: 
      <P>  
      <P>while( <B>(ch = getche()) != '\r' </B>) 
      <P>  
      <P>这行代码依次完成下面两件事:  
      <P>首先是: ch = getche() ,它等待用户敲入一字符,然后将该字符存储在ch变量。 
      <P>然后是判断条件: (……) != '\r' 。 程序判断 ch 是否不等于 '\r', '\r' 
      即回车(return)字符。也就是看用户输入的字符是否为回车键,如果不是,则循环继续,如果是,则循环结束。 
      <P>记住,在C和C++里 一个赋值表达式: A = B, 本身也有值,值就是完成赋值后的A。在上例中,A是ch,B是 
      getche()。在C,C++里,几乎所有表达式本身都有值,比如:1+2 的值是3;而表达式 a = 3 的值为3。 
      <P>理解这段代码,最好的方式就是在CB中运行它。至于我们所要练习的多级if...else在例中的表现,我不再多说,你需要自已看懂它。 
      <P>最后解释一下 conio.h, 其中 con 即我们总说的控制台,io则和iostream中的io一样,指:input/output。 
      <P>  
      <H4><A name=11.4.3>11.4.3</A> 等腰三角形图形的输出</H4>
      <P>  
      <P><B>例五:</B>请输出以下图形: 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; *** 
      <P> &nbsp; ***** 
      <P>&nbsp;&nbsp; ******* 
      <P>&nbsp; ********* 
      <P><B>分析:</B> 
      <P>新手刚看这道词可能觉得无从下手,其实,如果把图形改成一个矩形: 
      <P>  
      <P>&nbsp; ********* 
      <P>&nbsp; ********* 
      <P>&nbsp; ********* 
      <P>&nbsp; ********* 
      <P>&nbsp; ********* 
      <P>那么就很好解决了:输出5行,其中每行都输出9个* 。 
      <P>  
      <P>for(int i=0;i&lt;5;i++) 
      <P>{ 
      <P>&nbsp; for(int j=0;j&lt;9;j++) 
      <P>&nbsp; { 
      <P>&nbsp;&nbsp;&nbsp; cout &lt;&lt; '*'; 
      <P>&nbsp; } 
      <P>} 
      <P>  
      <P>对于三角形,程序仍然是这个结构:需要两层循环。同样是要输出5行,所以外层循环不变;不同的地方在于每一行输出的内容。其实三角形同样是输出一个矩形,只不过有些地方要打空格,有些地方要打*,以下我们用“-”表示空格,则三角形实为: 

      <P>  
      <P>&nbsp; ----*---- 
      <P>&nbsp; ---***--- 
      <P> --*****-- 
      <P>&nbsp; -*******- 
      <P>&nbsp; ********* 
      <P>所以,问题的重点在于:在每一行中,哪些地方要输出空格,哪些地方要输出星号?如果我们行和列都从1开始编号,如图: 
      <P><IMG height=237 src="第11章 循环语句.files/ls11.h1.gif" width=240 border=0> 
      <P>仔细观察我们发现,哪一列要打星,哪一列要打空格,主要和该列与第5列(红线所在列)的距离有关: 
      <P>第 1 行: 只有第5列本身打星,第5列和第5列(自身)的距离是0 
      <P>第 2 行: 除了第5列以外,增加第4、6列,4和6与5的距离都为1 
      <P>第 3 行: 增加了3、7两列要打星,3,7两列和5的距离都为2 
      <P>…… 
      <P>  
      <P>行了,规律就是:在第n行内,凡是和第5列的距离小于n的列,都要打星,其余的列打空格。 
      <P>下面代码中,row表示当前行,col表示当前列。 
      <P>  
      <P><B>答案:</B> 
      <P>  
      <P>#include &lt;iostream.h&gt; 
      <P>int main(int argc, char* argv[]) 
      <P>{ 
      <P>&nbsp;&nbsp; for(int row=1;row&lt;=5;row++) 
      <P>&nbsp; { 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int col=1;col&lt;=9;col++) 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      if( col-5 &gt; -row &amp;&amp; col-5 &lt; 
      row)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      cout &lt;&lt; 
      "*";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      cout &lt;&lt; " ";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; endl;<BR>&nbsp;&nbsp; 
      }<BR><BR>&nbsp; getchar();<BR><BR>&nbsp; return 0;<BR>&nbsp; }<BR>
      <P>以下是输出结果: 
      <P><IMG height=83 src="第11章 循环语句.files/ls11.h4.gif" width=89 border=0> 
      <P>  
      <P>在本例中,为了保持大家日常生活的习惯,我对行,列的编号均从1开始,其实,C,C++程序员更习惯于编程从0开始,即原来的第1行现在称为第0行,第1列称为第0列,则相关代码如下(黑体部分为改动处): 

      <P>  
      <P>&nbsp;for(int <B>row=0</B>;<B>row&lt;5</B>;row++) 
      <P>&nbsp; { 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int 
      <B>col=0</B>;<B>col&lt;9</B>;col++) 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      if( <B>col-4 &gt;= -row</B> &amp;&amp; <B>col-4 &lt;= 
      row</B>)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      cout &lt;&lt; 
      "*";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      cout &lt;&lt; " ";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; endl;<BR>&nbsp;&nbsp; 
}<BR>
      <P>学会从0开始索引的思想方法,这也是大家所要注意的,否则在阅读别人代码时会比较困难。 
      <P>  
      <H4><A name=11.4.4>11.4.4</A> 输出正弦曲线图</H4>
      <P>  
      <P><B>例六:</B>请在DOS窗口输出正弦曲线图 
      <P><B>分析:</B> 
      <P>1、还记得初中代数学的正弦函数吧? 
      <P>  y = sin (x); 
      <P>  当x从0到2<SPAN 
      style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">π变化时,y的值在 
      -1 和 +1 之间变化。</SPAN> 
      <P><SPAN 
      style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">  我们现在的任务就是随着x(位置)的变化,在y的位置上打一个点即可。</SPAN> 

      <P><SPAN 
      style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">2、C为我们提供了sin的库函数。只要我们给它x的值,它就能计算出相应的y值。sin(x)函数包含在头文件main.h里。</SPAN> 

      <P><SPAN 
      style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">3、为了方便,我们将“竖”着输出曲线,即x的值由上而下增长,而y值则在左右“摇摆”。并且,如果y值为负数的话,那么将输出到屏幕的最左边外面,所以我们将y值统一加上一值,用于向右偏到合适的位置。至于要加多大的值,和第4点有关。</SPAN> 

      <P><SPAN 
      style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">4、和前面输出“等腰三角形”类似。假如我们需要在屏幕的某一行最右边(行末)打出一个点,我们的方法是在前边连续地打满空格。正弦值在 
      -1到1之间,我们不可能打零点几个空格,所以,需要正弦值放大一定的倍数。</SPAN> 
      <P>  
      <P><SPAN 
      style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><B>答案:</B></SPAN> 

      <P>int main(int argc, char* argv[]) 
      <P>{ 
      <P>&nbsp;&nbsp; #define PI 3.14159 
      <P>&nbsp;&nbsp;&nbsp; 
      <P>&nbsp;&nbsp; int scale = 30; //放大倍数 
      <P>&nbsp;&nbsp; double X,Y; 
      <P>  
      <P>&nbsp;&nbsp; for(float X = 0.0; X &lt;= 2 * PI; X += 0.1) 
      <P>&nbsp;&nbsp; { 
      <P>    // 乘上scale 是为了放大Y值,而加上scale则是为了向右边偏移 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 以保证所有的点都不会跑出屏幕左边。 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y = sin(X) * scale + 
      scale;&nbsp;&nbsp; 
      <P>  
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //前面打空格 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int dx = 0;dx&lt;Y;dx++) 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout 
      &lt;&lt; ' '; 
      <P>  
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; '.' &lt;&lt; endl; 
      <P>&nbsp;&nbsp;&nbsp; } 
      <P>  
      <P>&nbsp;&nbsp; getchar(); 
      <P>  
      <P>&nbsp;&nbsp; return 0; 
      <P>} 
      <P>  
      <P>完整的代码请查代码文件。由于输出画面太长,所以这里不显示结果图。 
      <P>  
      <H4><A name=11.4.5>11.4.5</A> 标准体重计算程序</H4>
      <P>  
      <P>尽管类似输出“九九口诀表”、“等腰三角形”,“正弦曲线”这些题目对锻练大家的编程思维颇为有益,但可能很多人都不会喜欢这种题。 
      <P>嗯,这很多人当中,就有我自已一个。所以,我们来点有趣的题目吧。 
      <P>街上有一种电子称,你站上去一量身高体重,它就会告诉你的身材是否为标准体重。可是有一天我兴冲冲地往上一站,那机器竟怪里怪气地说:“本仪器不适于非洲儿童……”。害得我当众狼狈而逃!</P>
      <P>回去后,我痛下血本,每天大鱼大肉,如此月余,自认为横了一点,很想再测测这回该是哪一洲的儿童。然而由于上次的经历已经对我的造成了极大的心灵伤害,以致于我上街看见那种电子称就腿软。只好自购小站秤一台,米尺一条,不过,如何计算是否标准体重呢?嗯,就是这节课的“标准体重计算程序”了。</P>
      <P> </P>
      <P>计算标准(理想)体重的方法是从网上搜到的:</P>
      <P> </P>
      <P><FONT face=楷体_GB2312>“最近军事科学院还推出一种计算中国人理想体重的方法:</FONT></P>
      <P><FONT face=楷体_GB2312>北方人理想体重=〔身高cm—150〕x0.6十50(kg)</FONT></P>
      <P><FONT face=楷体_GB2312>南方人理想体重=〔身高cm—150〕x0.6十48(kg)”</FONT></P>
      <P> </P>
      <P>(原文请见:<A 
      href="http://www.999.com.cn/Special/disease/fat/200012/5278820001226.htm" 
      target=_blank>三九健康网</A>)</P>
      <P> </P>
      <P>考虑到女性一般要比男性轻,所以如果是女性,我们还需要将标准体重减去2公斤。</P>
      <P> </P>
      <P>可见,要计算一个人的标准体重,必须知道是男人女人,是北方人还是南方人,及他的身高。</P>
      <P>用户还必须输入他的现实体重,这样,在程序计算出标准体重之后,我们计算实际体重在标准体重百分之几的范围之内,作出不同判断。</P>
      <P> </P>
      <P>代码请见例程文件,加有详细的注解。本题事实上没有什么复杂算法,所以比前面的题都要简单--尽管代码看上去长多了。</P>
      <P>试用时请注意: 程序需要输入数字时,如果不小心输入字母并回车,将引起死循环,这是cin的问题所致,请按Ctrl + C 强行退出即可。</P>
      <P> </P>
      <P>在课程的最后,测一下自已的体重与“理想体重”的差距,是个不错的选择……测好了?能告诉我程序对你的身材所作的评价吗?</P></TD></TR></TBODY></TABLE></CENTER>
<P align=center>[<A 
href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#页首">到页首</A>]</P></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -