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

C語言列印菱形星號圖案:雙迴圈邏輯詳解與通用化公式

     編輯:關於C語言

C語言列印菱形星號圖案:雙迴圈邏輯詳解與通用化公式

列印菱形是迴圈控制、空格與星號數量計算的經典練習。本文以 13 行菱形(上半 7 行、下半 6 行)為例,詳細推導每行空格數與星號數的數學關係,提供通用化參數化實作,並分析常見邊界錯誤。

13 行菱形輸出範例

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

核心實作:分上下兩段處理

#include <stdio.h>

int main() {
    int i, j;
    const int N = 7;  // 上半部行數(含中線),總行數 = 2*N - 1 = 13

    // 上半部:第 1 行到第 N 行
    for (i = 1; i <= N; i++) {
        // 空格數:N - i
        for (j = 1; j <= N - i; j++) {
            printf(" ");
        }
        // 星號數:2*i - 1
        for (j = 1; j <= 2 * i - 1; j++) {
            printf("*");
        }
        printf("\n");
    }

    // 下半部:第 N+1 行到第 2N-1 行(共 N-1 行)
    for (i = 1; i <= N - 1; i++) {
        // 空格數:i
        for (j = 1; j <= i; j++) {
            printf(" ");
        }
        // 星號數:2*(N-i) - 1 = 2*N - 2*i - 1
        for (j = 1; j <= 2 * (N - i) - 1; j++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

數學關係推導表

行號 (i)空格數星號數公式驗證
161空格=N-i=6, 星號=2i-1=1
253空格=5, 星號=3
345空格=4, 星號=5
437空格=3, 星號=7
529空格=2, 星號=9
6111空格=1, 星號=11
7 (中線)013空格=0, 星號=13
8 (下半第1行)111空格=i=1, 星號=2(N-i)-1=11
929空格=2, 星號=9
1037空格=3, 星號=7
1145空格=4, 星號=5
1253空格=5, 星號=3
1361空格=6, 星號=1

通用化函數:任意奇數行菱形

void printDiamond(int totalRows) {
    // 總行數必須為奇數,上半部行數 N = (totalRows + 1) / 2
    if (totalRows % 2 == 0) totalRows++;  // 自動調整為奇數
    int N = (totalRows + 1) / 2;

    // 統一迴圈:行號 1 到 totalRows
    for (int row = 1; row <= totalRows; row++) {
        int spaces, stars;
        if (row <= N) {
            // 上半部
            spaces = N - row;
            stars = 2 * row - 1;
        } else {
            // 下半部:對稱映射
            int mirrorRow = totalRows - row + 1;  // 對應上半部行號
            spaces = N - mirrorRow;
            stars = 2 * mirrorRow - 1;
        }

        // 列印空格
        for (int s = 0; s < spaces; s++) putchar(' ');
        // 列印星號
        for (int s = 0; s < stars; s++) putchar('*');
        putchar('\n');
    }
}

進階變體

  1. 空心菱形:僅列印首尾星號,中間填空格。
    if (starPos == 1 || starPos == stars) putchar('*');
    else putchar(' ');
  2. 字元可配置:printDiamondEx(rows, '*', ' ')。
  3. 旋轉 45 度:改列印直角三角形組合。
  4. 動畫效果:配合 sleep()、system("clear") 逐行顯示。

常見錯誤避坑

  • 總行數硬編碼:改用參數 N 控制,提高復用性。
  • 下半部星號公式錯誤:13 - 2*i 僅適用特定 N,通用公式為 2*(N-i)-1。
  • 迴圈變數重用導致邏輯混亂:內層迴圈另用 j、k 或直接在 for 宣告區域變數。
  • 忘記換行:每行結尾必須 printf("\n") 或 putchar('\n')。

掌握菱形列印的數學建模能力,能舉一反三解決各類幾何圖案列印問題(三角形、平行四邊形、六邊形、數字金字塔等),是鍛鍊迴圈邏輯與數學直覺的最佳練習。

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