首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言打印星號圖案:雙重 for 迴圈與空格控制

     編輯:C 語言問答

題目需求

輸出 5 行、每行 5 個星號的矩形,但每行開頭縮進遞增 2 個空格:

  *****
    *****
      *****
        *****
          *****

邏輯分析

  • 外層迴圈控制行數 i = 0..4。
  • 第 i 行前導空格數 = 2 * i(或 (i+1)*2 視首行是否縮進)。
  • 內層迴圈打印空格,再打印固定 5 顆星 + 換行。

標準實現

#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

常見錯誤與調試

  1. 空格數 off-by-one:首行是否縮進?題目說「第一行開頭有兩個空格」,則初始 i=0 應打印 2 空格,公式改為 (i+1)*SPACE_STEP。
  2. 星號數硬編碼:改需求時到處改,應提取常量。
  3. 缺少換行:內層迴圈結束後必須 putchar('\n') 或 printf("\n")。
  4. 混用 printf 和 putchar:緩衝區刷新順序可能導致輸出亂序,統一用 putchar 或統一 printf。

總結

星號圖案本質是 「行號 → 空格數/星號數」的映射關係。掌握 for (行) { for (空格) ... for (星號) ... 換行 } 這一「三層嵌套」模板,配合常量參數化,即可輕松應對金字塔、菱形、帕斯卡三角等所有幾何圖案打印題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved