本程式列印實心菱形,條件判斷從「等於邊緣」改為「在邊緣範圍內」:
if (j >= num-i+1 && j <= num+i-1) printf("*");
else printf(" ");
#include <stdio.h>
const int num = 5;
int main()
{
int i, j;
// 上半部
for (i = 1; i < num; i++) {
for (j = 1; j < 2*num; j++) {
if (j >= num-i+1 && j <= num+i-1) printf("*");
else printf(" ");
}
printf("\n");
}
// 下半部(含中間行)
for (i = num; i > 0; i--) {
for (j = 1; j < 2*num; j++) {
if (j >= num-i+1 && j <= num+i-1) printf("*");
else printf(" ");
}
printf("\n");
}
return 0;
}
*
***
*****
*******
*********
*******
*****
***
*
| 類型 | 條件判斷 | 幾何意義 |
|---|---|---|
| 空心 | j==left || j==right | 僅邊界 |
| 實心 | j>=left && j<=right | 區間填滿 |
void printDiamond(int n, int hollow) {
for (int i=1; i<=n; i++) {
int left = n-i+1, right = n+i-1;
for (int j=1; j<=2*n-1; j++) {
if (hollow) putchar((j==left||j==right)?'*':' ');
else putchar((j>=left&&j<=right)?'*':' ');
}
puts("");
}
for (int i=n-1; i>=1; i--) { ... }
}
讀者可嘗試封裝成函式,支援任意大小、空心/實心切換。
