如圖:要求在控制台項目下使用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"); //每行打印一個換行符。
}
最終的代碼不是關鍵,應該關注看到問題時候的分析過程。