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

從零開始寫算法:用 C 語言印出各種星星圖案

     編輯:關於C語言

前言

學習程式語言時,「印星星」幾乎是繞不開的經典練習。透過巢狀迴圈控制行數與每行星號數量,可以印出正三角形、倒三角形、菱形、楊輝三角等圖案。這不僅能熟悉 for 迴圈、條件判斷、字元輸出等基礎語法,更能訓練「由抽象邏輯推導具體輸出」的思維。本文整理六種常見星星圖案的 C 語言實作,附上完整代碼與邏輯解析。

核心模式:外層控制行,內層控制列

所有圖案的共同骨架:

for (int row = 起始; row 條件; row 遞增/遞減) {
    for (int col = 起始; col 條件; col 遞增/遞減) {
        printf("* ");  // 或印空格、數字
    }
    printf("\n");  // 換行
}

關鍵在於根據行號 row 動態決定內層迴圈的範圍(印幾顆星、印幾個空格)。

六大經典圖案實作

1. 正三角形

第 i 行印 i 顆星(i 從 1 到 9)。

void star_1() {
    for (int outer = 1; outer < 10; outer++) {
        for (int inner = 1; inner <= outer; inner++) {
            printf("* ");
        }
        printf("\n");
    }
}

2. 倒三角形

第 i 行印 10 - i 顆星(i 從 9 遞減到 1)。

void star_2() {
    for (int outer = 9; outer >= 1; outer--) {
        for (int inner = 1; inner <= outer; inner++) {
            printf("* ");
        }
        printf("\n");
    }
}

3. 左對齊等腰三角形(含空格補齊)

利用 abs() 讓行號對稱分佈(-4 到 4),星號數 = 5 - abs(row),剩餘寬度補空格。

void star_3() {
    for (int outer = -4; outer <= 4; outer++) {
        for (int inner = 1; inner <= 5 - abs(outer); inner++) {
            printf("*");
        }
        for (; inner <= 5; inner++) {
            printf(" ");
        }
        printf("\n");
    }
}

4. 右對齊等腰三角形

前面印 abs(row) 個空格,再印 5 - abs(row) 顆星。

void star_4() {
    for (int outer = -4; outer <= 4; outer++) {
        for (int inner = 1; inner <= abs(outer); inner++) {
            printf(" ");
        }
        for (; inner <= 5; inner++) {
            printf("*");
        }
        printf("\n");
    }
}

5. 垂直菱形

結合左右空格與星號:每行先印前導空格,再印星號。空格數 = abs(row) - 5(負值時不印),星號數 = 5 - abs(row)。

void star_5() {
    for (int outer = -4; outer <= 4; outer++) {
        for (int inner = -4; inner <= abs(outer) - 5; inner++) {
            printf(" ");
        }
        for (; inner <= 5 - abs(outer); inner++) {
            printf("*");
        }
        printf("\n");
    }
}

6. 水平菱形

外層 outer 從 -9 到 0,內層先印 -outer 個空格,再印 9 - outer + 1 顆星。

void star_6() {
    for (int outer = -9; outer <= 0; outer++) {
        for (int inner = outer; inner < 0; inner++) {
            printf(" ");
        }
        for (; inner <= 9; inner++) {
            printf("*");
        }
        printf("\n");
    }
}

7. 附贈:楊輝三角風格數字三角(非標準楊輝三角)

原碼中為 outer * inner,實際楊輝三角需用組合數 C(n,k) 計算。此處保留原碼邏輯供參考。

void star_7() {
    for (int outer = 1; outer < 10; outer++) {
        for (int inner = 1; inner <= outer; inner++) {
            printf("%3d ", outer * inner);
        }
        printf("\n");
    }
}

練習建議

  • 嘗試修改參數(如高度、字元),觀察輸出變化。
  • 挑戰:印出空心三角形、雙色菱形、帕斯卡三角(真正的楊輝三角)。
  • 思考:如何用遞迴實現同樣圖案?

結語

「印星星」看似簡單,實則蘊含迴圈邊界控制、對稱性利用、狀態管理等核心程式設計能力。熟練掌握這些模式,對後續學習演算法、圖形處理、遊戲開發都大有裨益。願每位初學者都能在星星間找到編程的樂趣與節奏。

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