輸出 5 行、每行 5 個星號的矩形,但每行開頭縮進遞增 2 個空格:
*****
*****
*****
*****
*****
i = 0..4。i 行前導空格數 = 2 * i(或 (i+1)*2 視首行是否縮進)。#include <stdio.h>
int main() {
const int ROWS = 5;
const int STARS_PER_ROW = 5;
const int SPACE_STEP = 2; // 每行遞增空格數
for (int i = 0; i < ROWS; i++) {
// 打印前導空格
for (int s = 0; s < i * SPACE_STEP; s++) {
putchar(' ');
}
// 打印星號
for (int k = 0; k < STARS_PER_ROW; k++) {
putchar('*');
}
putchar('\n');
}
return 0;
}
| 技巧 | 說明 |
|---|---|
putchar vs printf | 單字符輸出 putchar 更輕量、無格式解析開銷 |
| 常量定義 | 用 const int 或 #define 避免魔術數字,易維護 |
| 迴圈邊界 | i < ROWS 而非 i <= ROWS-1,符合 C 慣用法 |
| 空格計算 | i * SPACE_STEP 直接對應行號,清晰無誤 |
void print_staggered_rect(int rows, int cols, int star_w, int space_step) {
for (int i = 0; i < rows; i++) {
for (int s = 0; s < i * space_step; s++) putchar(' ');
for (int k = 0; k < cols; k++) {
for (int w = 0; w < star_w; w++) putchar('*');
}
putchar('\n');
}
}
// 調用:print_staggered_rect(5, 1, 5, 2); // 原題
// print_staggered_rect(3, 2, 3, 4); // 3行,每行2組星,每組寬3,縮進4
i=0 應打印 2 空格,公式改為 (i+1)*SPACE_STEP。putchar('\n') 或 printf("\n")。printf 和 putchar:緩衝區刷新順序可能導致輸出亂序,統一用 putchar 或統一 printf。星號圖案本質是 「行號 → 空格數/星號數」的映射關係。掌握 for (行) { for (空格) ... for (星號) ... 換行 } 這一「三層嵌套」模板,配合常量參數化,即可輕松應對金字塔、菱形、帕斯卡三角等所有幾何圖案打印題。