還記得大一《C 語言程式設計基礎》的經典作業——列印聖誕樹嗎?本文提供兩個版本的完整原始碼,支援使用者輸入任意行數動態生成樹形,並附上編譯後的執行檔下載連結,讓你輕鬆重溫經典或直接拿來當作教學示範。
#include <stdio.h>
int main() {
int rows, i, j, k, l, m;
int starNo, spaceNo;
printf("請輸入聖誕樹的行數: ");
scanf("%d", &rows);
for (i = 1; i <= rows; i++) {
starNo = i * 2 - 1; // 星號數:1, 3, 5, ...
spaceNo = rows - i; // 前導空格數
// 印空格
for (j = 0; j < spaceNo; j++) printf(" ");
// 印星號
for (k = 0; k < starNo; k++) printf("*");
printf("\n");
}
// 印樹幹(固定 2 行,置中)
for (l = 0; l < 2; l++) {
for (m = 0; m < (rows * 2 - 1) / 2; m++) printf(" ");
printf("||\n");
}
return 0;
}
#include <stdio.h>
int main() {
int rows, i, j, k, l, m;
int starNo, spaceNo;
START:
printf("請輸入聖誕樹的行數 (0 結束): ");
scanf("%d", &rows);
if (rows == 0) goto END;
for (i = 1; i <= rows; i++) {
starNo = i * 2 - 1;
spaceNo = rows - i;
for (j = 0; j < spaceNo; j++) printf(" ");
for (k = 0; k < starNo; k++) printf("*");
printf("\n");
}
for (l = 0; l < 2; l++) {
for (m = 0; m < (rows * 2 - 1) / 2; m++) printf(" ");
printf("||\n");
}
goto START;
END:
return 0;
}
*
***
*****
*******
*********
||
||
goto 版本僅為展示流程控制,實務開發建議使用 while 或 do-while 迴圈,結構更清晰。快拿去跑跑看,感受字元繪圖的樂趣吧!