📄 第11章 循环语句.htm
字号:
<P>
<P> if( ch >= 'A'
&& ch <= 'Z')
<P> cout
<< ch << "是一个大写字母。" << endl;
<P> else if ( ch >= 'a'
&& ch <= 'z')
<P> cout
<< ch << "是一个小写字母。" << endl;
<P> else if( ch >= '0'
&& ch <= '9')
<P> cout
<< ch << "是一个数字字符。" << endl;
<P> else
<P> cout
<< ch << "是一个其它的字符。" << endl;
<P> }
<P>}
<P>
<P>这段代码中,我们用到了getche()库函数,它的声明包含在 conio.h 文件中,所以本例程除了"#include
<iostream.h>"以外,还另需 "#include <conio.h>"。
<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> *
<P> ***
<P> *****
<P> *******
<P> *********
<P><B>分析:</B>
<P>新手刚看这道词可能觉得无从下手,其实,如果把图形改成一个矩形:
<P>
<P> *********
<P> *********
<P> *********
<P> *********
<P> *********
<P>那么就很好解决了:输出5行,其中每行都输出9个* 。
<P>
<P>for(int i=0;i<5;i++)
<P>{
<P> for(int j=0;j<9;j++)
<P> {
<P> cout << '*';
<P> }
<P>}
<P>
<P>对于三角形,程序仍然是这个结构:需要两层循环。同样是要输出5行,所以外层循环不变;不同的地方在于每一行输出的内容。其实三角形同样是输出一个矩形,只不过有些地方要打空格,有些地方要打*,以下我们用“-”表示空格,则三角形实为:
<P>
<P> ----*----
<P> ---***---
<P> --*****--
<P> -*******-
<P> *********
<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 <iostream.h>
<P>int main(int argc, char* argv[])
<P>{
<P> for(int row=1;row<=5;row++)
<P> {
<P> for(int col=1;col<=9;col++)
<P>
{<BR>
if( col-5 > -row && col-5 <
row)<BR>
cout <<
"*";<BR>
else<BR>
cout << " ";<BR>
}<BR><BR> cout << endl;<BR>
}<BR><BR> getchar();<BR><BR> return 0;<BR> }<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> for(int <B>row=0</B>;<B>row<5</B>;row++)
<P> {
<P> for(int
<B>col=0</B>;<B>col<9</B>;col++)
<P>
{<BR>
if( <B>col-4 >= -row</B> && <B>col-4 <=
row</B>)<BR>
cout <<
"*";<BR>
else<BR>
cout << " ";<BR>
}<BR><BR> cout << endl;<BR>
}<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> #define PI 3.14159
<P>
<P> int scale = 30; //放大倍数
<P> double X,Y;
<P>
<P> for(float X = 0.0; X <= 2 * PI; X += 0.1)
<P> {
<P> // 乘上scale 是为了放大Y值,而加上scale则是为了向右边偏移
<P> // 以保证所有的点都不会跑出屏幕左边。
<P> Y = sin(X) * scale +
scale;
<P>
<P> //前面打空格
<P> for(int dx = 0;dx<Y;dx++)
<P> cout
<< ' ';
<P>
<P> cout << '.' << endl;
<P> }
<P>
<P> getchar();
<P>
<P> 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 + -