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

C語言打印數字菱形圖案:雙層循環邏輯詳解

     編輯:C 語言問答

數字菱形打印:行數、空格、數字三要素控制

目標圖案 (n=4)

   1
  121
 12321
1234321
 12321
  121
   1

核心邏輯分解

每行由三部分組成:前導空格 + 遞增數字 + 遞減數字。

  • 上半部分 (第 1 到 n 行):行號 i (1-based)。
    • 空格數:n - i
    • 遞增:1 到 i
    • 遞減:i-1 到 1
  • 下半部分 (第 n+1 到 2n-1 行):行號 i 從 n-1 遞減到 1,邏輯同上半部分。

標準實現

#include <stdio.h>

void print_diamond(int n) {
    // 上半部含中線
    for (int i = 1; i <= n; ++i) {
        for (int s = 0; s < n - i; ++s) putchar(' ');
        for (int j = 1; j <= i; ++j) printf("%d", j);
        for (int j = i - 1; j >= 1; --j) printf("%d", j);
        putchar('\n');
    }
    // 下半部
    for (int i = n - 1; i >= 1; --i) {
        for (int s = 0; s < n - i; ++s) putchar(' ');
        for (int j = 1; j <= i; ++j) printf("%d", j);
        for (int j = i - 1; j >= 1; --j) printf("%d", j);
        putchar('\n');
    }
}

int main() {
    int n;
    printf("輸入菱形行數 (建議 1-9): ");
    scanf("%d", &n);
    if (n > 0) print_diamond(n);
    return 0;
}

關鍵點

  1. putchar/printf 混用:單字符用 putchar 更高效;數字用 printf("%d", j) 自動處理多位數(但會破壞對齊,n>9 時需定寬 %2d)。
  2. 邊界條件:遞減循環 j = i-1; j >= 1; --j,中間行 i=1 時不執行。
  3. 變量作用域:循環變量在 for 內聲明 (C99),避免汙染外層。

變體擴展

  • 字符菱形:將 printf("%d", j) 改為 putchar('A' + j - 1)。
  • 空心菱形:只打印首尾字符,中間填空格。
  • 帕斯卡三角形:利用組合數性質 C(n,k) = C(n,k-1)*(n-k+1)/k 逐行計算。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved