在螢幕上列印菱形是控制迴圈與數學規律結合的經典練習。本文展示從固定 13 行菱形到動態行數的完整演進。
#include <stdio.h>
int main() {
int i, j, k;
// 上半部:第 0-6 行(共 7 行)
for (i = 0; i < 7; i++) {
// 列印前導空格
for (j = 0; j < 6 - i; j++) printf(" ");
// 列印星號:2*i+1 個
for (k = 0; k < 2 * i + 1; k++) printf("*");
printf("\n");
}
// 下半部:第 7-12 行(共 6 行)
for (i = 7; i < 13; i++) {
for (j = 0; j < i - 6; j++) printf(" ");
for (k = 0; k < 2 * (13 - i) - 1; k++) printf("*");
printf("\n");
}
return 0;
}
#include <stdio.h>
int main() {
int lines;
int i, j, k;
printf("請輸入菱形上半部行數(建議 3-20): ");
if (scanf("%d", &lines) != 1 || lines < 1) {
printf("輸入無效\n");
return 1;
}
// 上半部(含中線)
for (i = 0; i < lines; i++) {
// 空格數:lines - 1 - i
for (j = 0; j < lines - 1 - i; j++) printf(" ");
// 星號數:2*i + 1
for (k = 0; k < 2 * i + 1; k++) printf("*");
printf("\n");
}
// 下半部(不含中線)
for (i = lines - 2; i >= 0; i--) {
for (j = 0; j < lines - 1 - i; j++) printf(" ");
for (k = 0; k < 2 * i + 1; k++) printf("*");
printf("\n");
}
return 0;
}
| 行號 (0-based) | 前導空格數 | 星號數 |
|---|---|---|
| 上半部第 i 行 | lines - 1 - i | 2*i + 1 |
| 下半部第 i 行 | lines - 1 - i | 2*i + 1 |