不同於前幾例的「上下分段」,本程式單一雙重迴圈完成整個等腰三角形列印(底朝上),條件判斷稍顯複雜:
if ((i<num && (j==num-i+1 || j==num+i-1)) ||
(i==num && j>=num-i+1 && j<=num+i-1))
#include <stdio.h>
const int num = 5;
int main()
{
int i, j;
for (i = num; i > 0; i--) { // 從底部往上印
for (j = 1; j < 2*num; j++) {
if ( (i < num && (j == num-i+1 || j == num+i-1)) || // 上方空心行
(i == num && j >= num-i+1 && j <= num+i-1) ) { // 底部實心行
printf("*");
} else {
printf(" ");
}
}
printf("\n");
}
return 0;
}
⚠️ 原始碼中 if((i<num) br="" j="=num+i-1)) 疑為編碼錯誤,已修正。
********* <- 第5行(底)實心
* * <- 第4行空心
* * <- 第3行空心
* * <- 第2行空心
* <- 第1行(頂)單點
i 從 num 遞減至 1,對應從底到頂i==num(底行):列印實心區間 [1, 2*num-1]i<num(上方各行):僅列印左右邊緣兩點複雜條件建議拆解為輔助函式或中間變數,提升可讀性:
int left = num - i + 1;
int right = num + i - 1;
int isBottom = (i == num);
int isEdge = (j == left || j == right);
int isInside = (j >= left && j <= right);
if (isBottom ? isInside : isEdge) printf("*");
else printf(" ");
