第57课 一棵圣诞树
一棵圣诞树(多重循环、变量计算)

运用循环搭建数字阶梯,九个9,八个8,七个7,六个6,五个5,四个4,三个3,二个2,一个1。

使用循环输出数字阶梯。
数字阶梯
根据数字阶梯的样子,分析一番:
一共九层,看来需要一个外层for循环,从1到9。
for(int i=1;i<10;i++){}
然后
第1次循环输出一个1;
第2次循环输出二个2;
第8次循环输出八个8;
第9次循环输出九个9。
发现什么规律了吗?
第i次循环输出i个i,似乎找到了内层循环的规律。
再深入一下,循环的关键是确定次数,第一个i表示外层循环的次数,第二个i是输出的次数也就是内层循环的次数,第三个i是输出的内容。关键就在于第二个i。
重新声明一个循环变量j,从1开始,要循环i次,也就是j<=i。
for(int j=1; j<=i; j++)
输出内容为i最简单了:cout<<i;。

运行程序:
敲黑板
cout<<endl需要放在外层循环内,因为它是在一个内循环结束后才执行分行的。试试输出j会有什么结果。

运行程序:
程序逻辑
第一次外循环i=1,内循环j=1,j<=1,内循环循环1次,输出j为1。
第二次外循环i=2,内循环j=1,j<=2,内循环循环2次,输出j为12。
第八次外循环i=8,内循环j=1,j<=8,内循环循环8次,输出j为12345678。
第九次外循环i=9,内循环j=1,j<=9,内循环循环9次,输出j为123456789。
一颗圣诞树

运行程序:效果分析
圣诞树可以拆成两部分,一部分是三角形的树叶,一部分是长方形的树干。
第一部分:
由*组成,一共10行,数量分别是1,3,5,7,9,11,13,15,17,19。
第二部分:
由*组成,一共10行,每行的数量都是5。
程序逻辑
第一部分输出10行,所以可以设计一个10次的外循环。
for(int i=0;i<10;i++){}
再来输出*,数量遵循奇数递增:
第一行,第一次外循环,输出1个。
第二行,第二次外循环,输出3个。
第九行,第九次外循环,输出17个。
第十行,第十次外循环,输出19个。
外循环次数是i,与输出数字有下面的关系:
i→0 1 2 3 4 5 6 7 8 9
数量→1 3 5 7 9 11 13 15 17 19
它们之间的关系:数量=2×i + 1。
for(int i=0;i<10;i++){
for(int k=0;k<2*i+1;k++){
cout<<'*';}
cout<<endl;}
输出结果:

数一数,每一行有多少个空格?
从9到0个空格,设计一个循环从9到0:
i→0 1 2 3 4 5 6 7 8 9
数量→9 8 7 6 5 4 3 2 1 0
它们之间的关系:数量=9 - i。
for(int j=9-i;j>0;j--){
cout<<'';}

第二部分树干就留给你自己实现了。
巩固练习
(1)根据下面程序的运行结果,完善程序。
程序运行结果:
程序代码:

(2)阅读以下的程序代码,输出结果是()。

A.
B.
C.
D.
(3)改编本课的示例程序,输出如下的一幢小房子。