如图:要求在控制台项目下使用C++语言打印如下图形。
这是一个由不同数量*符号,不同数量空格符,换行符所排列成的8列横线,按照规律上下排列组成的正三角形。
①首先分析我们需要打印的内容:
- 除了最后一行(第八行)外,第一行到第七行组成三角形的*符号前都有数量不一的空格符。
- 组成三角形的*符号。
- 每一行与下一行之间的换行符。
②考虑每一行需要打印的个数(空格符,*符号,换行符):
1.首先是空格符,根据对图形的观察可以得到 空格符数量 和 行号 的关系:
当前行号 当前行空格符数量
1 7
2 6
3 5
4 4
5 3
6 2
.... ....
由此得出公式:当前空格符数量 = 最大行号 - 当前行号
2.接下来是*符号的个数,同样根据对图形的观察可以得到 *符号数量 和 行号 的关系:
当前行号 当前行*符数量
1 1
2 3
3 5
4 7
5 9
6 11
由此得出公式:当前*符数量 = 当前行号 * 2 - 1
3、最后是换行符,很明显除最后一行外其余每一行只需要一个换行符用来在打印完当前行的空格符和*符后换行即可。
③最后我们考虑什么习语可以完成打印:
C++中的循环结构有三种while、do while、for,这里需要打印的内容个数已经确定,因此我们优先选择使用for循环来完成这一任务。
上述需要打印的空格符、*符号、换行符数量都需要行号参与计算。
我们声明一个int类型变量i来代表当前行号,使用 i替换上述公式:
i行空格符数量 = 最大行号 - i
i行*符数量 = i * 2 - 1
i换行符数量:1
得到如下代码:
int i,j,k;
for(i = 1;i <= 8;i++ ){ //该控制行决定了循环时的当前行号,依次对应三角形的1~8行。
for(j = 1;j <= 8-i;j++){ //该控制行决定了打印空格符的数量,i决定行号。
printf(" ");
}
for(k = 1;k <= i*2-1;k++){ //该控制行决定了打印*符号的数量,i决定行号。
printf("*");
}
printf("\n"); //每行打印一个换行符。
}
最终的代码不是关键,应该关注看到问题时候的分析过程。