8.C++双层循环
8.1 双层 for 循环
掌握了for循环或while循环之后,如果让你打印N个 ' * ' ,相信你很快就能完成任务。下面我们做一个更具有挑战性的任务。
1.打印下面由'*'构成的直角三角形。
***************
观察上面的直角三角形你会发现:图案一共有5行,其中第1行有1颗星,第2行有2颗星,第3行有3颗星,第4行有4颗星,第5行有5颗星。
不知道你发现没有,每一行星星的数量与这一行的行号之间有个规律...
数量与行号是相同的!
找到这个规律又该如何打印出这个图案呢?
下图是一个双层for循环的嵌套写法,一共用到2个循环结构,每个for循环的作用都不一样:外层for循环控制要打印的行号,内层for循环控制每一行打印星星的数量。每一行打印结束之后必须要换行。这个写法中的关键之处在于内层for循环中的判断条件:j<=i。 这个表达式控制了每一行的星星数量。
2.如果你已经完成了上面这个任务可以再来试试下面这个,打印下面这个图案,这次每一行星星的数量是逐行递减的。
***************
上面的三角形中隐藏的规律你是否发现了呢?可以先动手验证一下你的想法是否正确。
下图中我们只是在内层的for循环中做了一些改变,首先 j 的初始值由0变为5,判断条件也相应的发生了变化,最后让 j 每一行递减1来控制每一行星星的数量。
怎么样,这个任务没难住你吧?
3.下面再提高一些难度挑战一下自己,三角形图案变成了右对齐:
要想完成这个任务,需要换个思路,我们可以把每一行看成是几个空白字符+几个星星组成的。比如第一行是4个空格+1颗星星,第二行是3个空格+2颗星星...,我们只需要通过循环去控制空白字符的数量和星星的数量就可以了。我们可以分别用一个for循环打印空白字符,用另一个for循环打印星星。
4.最后我们来做一个有趣的任务,打印九九乘法口诀表:
首先观察乘法口诀表找到其中的规律:1.每一行中乘号左边的数字依次递增,但始终小于乘号右边的数字。2.每一行乘号右边的数字不变,并且等于每一行的行号。
只要理解并掌握这个规律你就可以轻松完成这个任务了:
一次没有完成也没关系,多动手练习相信你就可以发现其中的规律并掌握它。
8.2 双层 while 循环
上面的4道例题,也可以用双层while循环来完成,怎么样有没有兴趣试一下?