本程式根據使用者輸入的奇數 n,列印一個高度為 n 行的菱形圖案。上半部含中線共 (n/2)+1 行,下半部 n/2 行。程式支援連續輸入直到輸入 0 結束。
假設 n=7(中線第 4 行):
行號 i (0-based) | 星號範圍 [L, R] | 星號數
0 (頂點) | [3, 3] | 1
1 | [2, 4] | 3
2 | [1, 5] | 5
3 (中線) | [0, 6] | 7
4 | [1, 5] | 5
5 | [2, 4] | 3
6 (底點) | [3, 3] | 1
j >= n/2 - i && j <= n/2 + i
j > i && j < n - i - 1 (i 為下半部行索引 0~n/2-1)
#include <stdio.h>
int main()
{
int i, j, n;
while(scanf("%d", &n), n != 0)
{
// 上半部含中線
for(i = 0; i <= n/2; i++)
{
for(j = 0; j < n; j++)
{
if(j >= n/2 - i && j <= n/2 + i)
printf("*");
else if(j < n/2 - i)
printf(" ");
}
printf("\n");
}
// 下半部
for(i = 0; i < n/2; i++)
{
for(j = 0; j < n; j++)
{
if(j > i && j < n - i - 1)
printf("*");
else if(j <= i)
printf(" ");
}
printf("\n");
}
}
return 0;
}


只在邊界印 *,內部印空白:
// 上半部
if(j == n/2 - i || j == n/2 + i) printf("*");
else printf(" ");
// 下半部
if(j == i+1 || j == n-i-2) printf("*");
else printf(" ");
n/2 為基準計算左右邊界。while(scanf(...), n!=0) 實現多測資處理。