回到系列文章的目录——[系列文章目录] 回到本章目录——[第1章目录]
1.5.1 引入循环——输出星号图
例 1.5 编程序,输出8个星号(即'*'),如下图这个容易,也就输出一行信息。
可以写出程序:
//例程ch1-9.cpp #include <iostream> using namespace std; int main() { cout<<"********"<<endl; return 0; }
现在问题变为,输出50个呢?你可以一边输入一边数:1、2、3、4、5……
那要输出500个星号甚至更多呢?聪明的人不做这种重复的事。让计算机会数数。计算机本不会数数。编好了让计算机能数数的程序,计算机也便会数数了。
例1.6 编程序,输出50个星号。
写出的程序是:
//例程ch1-10.cpp #include <iostream> using namespace std; int main() { int i=0; while(i<50) //当i<50成立,重复执行花括号({ })内的语句 { cout<<"*"; i++; } cout<<endl; return 0; }这一个程序的执行结果如下:
如果愿意,可以亲自数一数,计算机是否出错。
我们试着读一读这个包含着循环的程序。
我们数数,1、2、3、4、5……一直下去,在念出下一个数之前,心里(实际上是脑袋里)是记着上一个数的,是在上一个数的基础上,再报出下一个数来的。这件事情做得已经很熟练了,以至于我们常常不再注意。
在编写程序的时候,面对让计算机数数的需要,我们要一个变量来表示出这个数。这是人脑中熟练无比事情要让计算机完成的时候,专业人员必须有意而为一件事。正如用初等方程解决数学问题时,面对“一列火车从甲地开往乙地,每小时行90千米,行到一半时耽误了12分钟,当着列火车每小时加快10千米后,恰好按时到了乙地,求甲、乙两站距离?”之类的问题,我们先“设甲、乙两站距离为S千米”一样,在程序中,我们写出了“int i=0”,就是在宣布“用i作计数”。顺便地,前面加一个“int”,是C++的要求,声明i的类型是整数类型,而后面加一个“=0”意味着i的值,就从0开始。
由于初值为0的i的存在,下面7-11行的循环有了筋骨。我们用下面的“人话”转述7-11行C++语句想说的意思:
“当没有数到50(i<50)时,输出一个星号(cout<<"*"),数下一个数(i++)”。
和i++初次见面,介绍一下。可以简单认为,i++相当于i=i+1,即“将i的值赋值为i+1”,或“i值增加1”。i++是C/C++中非常有特色的记号,i++,i加加,i的值增加1,从现在开始,你要喜欢这样的描述。
于是从0开始,输出一个星号,数下一个数1,再输出一个星号,数下一个数2,再输出一个星号,数下一个数3,……数到50时,不再输出了。
也就是说,从数0开始,一直到数至49,都要输出星号。心眼里转一转,恰好输出了50个星号。
i从0开始,当i<50时重复做同样的工作,当i等于50时,就不重复了。从0重复到49,一共是50次。
一直想着是否这个例子中,i的值从1开始,从1重复到50,未尝不可,一样的效果。但学计算机,尤其是学C/C++,习惯于从0开始计数。
这个学程不想过多用语言传递信息,但此处多说了几句,还是违反这个原则了。可以琢磨一下。要看得不爽,影响感受了,继续往下。
下面,给出解决“输出50个星号”这个问题的多种表述方法法,请读者进行对照认识。