以 7 列上半部、6 列下半部(共 13 列)為例:
#include#include int main() { int i, j, k; // 上半部(含中線) for (i = 0; i <= 6; i++) { for (j = 0; j <= 5-i; j++) printf(" "); for (k = 0; k <= 2*i; k++) printf("*"); printf("\n"); } // 下半部 for (i = 0; i <= 5; i++) { for (j = 0; j <= i; j++) printf(" "); for (k = 0; k <= 10-2*i; k++) printf("*"); printf("\n"); } return 0; }
#includevoid print_diamond(int n) { // n 為上半部行數(含中線),總行數 = 2n-1 // 上半部 for (int i = 1; i <= n; i++) { for (int s = 0; s < n - i; s++) putchar(' '); for (int s = 0; s < 2*i - 1; s++) putchar('*'); putchar('\n'); } // 下半部 for (int i = n-1; i >= 1; i--) { for (int s = 0; s < n - i; s++) putchar(' '); for (int s = 0; s < 2*i - 1; s++) putchar('*'); putchar('\n'); } } int main() { int rows; printf("請輸入菱形上半部行數: "); scanf("%d", &rows); print_diamond(rows); return 0; }
| 部分 | 行號 i (1~n) | 前導空格 | 星號數 |
|---|---|---|---|
| 上半部 | i | n - i | 2*i - 1 |
| 下半部 | i (n-1 ~ 1) | n - i | 2*i - 1 |
下半部可視為上半部鏡像,故公式相同,只需反向迴圈。
void print_hollow_diamond(int n) {
for (int i = 1; i <= n; i++) {
for (int s = 0; s < n - i; s++) putchar(' ');
for (int s = 0; s < 2*i - 1; s++)
putchar((s == 0 || s == 2*i-2) ? '*' : ' ');
putchar('\n');
}
for (int i = n-1; i >= 1; i--) {
for (int s = 0; s < n - i; s++) putchar(' ');
for (int s = 0; s < 2*i - 1; s++)
putchar((s == 0 || s == 2*i-2) ? '*' : ' ');
putchar('\n');
}
}
列印菱形是迴圈巢狀與幾何邏輯轉換的經典練習。關鍵在於:
掌握此模式,即可輕鬆擴展為三角形、平行四邊形、空心圖形等變體。