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

C語言打印菱形圖案:雙循環控制空格與星號的經典實現

     編輯:C 語言問答

問題本質

菱形圖案由上半部分正三角形和下半部分倒三角形組成。核心難點:每行前導空格數與星號數的數學規律。

規律分析 (以高度4為例)

行號(i)  空格數(4-i)  星號數(2*i-1)  視覺效果
1           3             1             "   *"
2           2             3             "  ***"
3           1             5             " *****"
4           0             7             "*******"
5           1             5             " *****"
6           2             3             "  ***"
7           3             1             "   *"

通用算法推導

方法一:分兩階段循環 (固定高度)

#include 

void print_diamond_fixed(int n) {  // n 為上半部分行數
    // 上半部分 (含中線)
    for (int i = 1; i <= n; i++) {
        for (int s = 1; s <= n - i; s++) printf(" ");  // 空格
        for (int s = 1; s <= 2 * i - 1; s++) printf("*");  // 星號
        printf("\n");
    }
    // 下半部分
    for (int i = 1; i <= n - 1; i++) {
        for (int s = 1; s <= i; s++) printf(" ");
        for (int s = 1; s <= 2 * (n - i) - 1; s++) printf("*");
        printf("\n");
    }
}

int main() {
    print_diamond_fixed(4);
    return 0;
}

方法二:統一公式 (任意奇數行)

#include 
#include   // abs()

void print_diamond_unified(int rows) {  // rows 必須為奇數
    int mid = rows / 2;  // 中線索引 (0-based)
    for (int i = 0; i < rows; i++) {
        int spaces = abs(mid - i);
        int stars = rows - 2 * spaces;
        for (int s = 0; s < spaces; s++) printf(" ");
        for (int s = 0; s < stars; s++) printf("*");
        printf("\n");
    }
}

int main() {
    int n;
    printf("輸入菱形行數(奇數): ");
    scanf("%d", &n);
    if (n % 2 == 1) print_diamond_unified(n);
    else printf("請輸入奇數!\n");
    return 0;
}

方法三:單循環 + 條件判斷

void print_diamond_single_loop(int n) {
    for (int i = 1; i <= 2 * n - 1; i++) {
        int spaces = (i <= n) ? n - i : i - n;
        int stars = (i <= n) ? 2 * i - 1 : 2 * (2 * n - i) - 1;
        for (int s = 0; s < spaces; s++) putchar(' ');
        for (int s = 0; s < stars; s++) putchar('*');
        putchar('\n');
    }
}

空格輸出關鍵技巧

  1. printf(" ")或putchar(' ')輸出單個空格
  2. 空格數由行號與總行數的幾何關係決定
  3. 本質是左右對稱:第i行與第(2n-i)行空格數相同

進階變體

空心菱形

void print_hollow_diamond(int n) {
    for (int i = 1; i <= 2 * n - 1; i++) {
        int spaces = abs(n - i);
        int stars = 2 * (n - spaces) - 1;
        for (int s = 0; s < spaces; s++) putchar(' ');
        for (int s = 0; s < stars; s++) {
            if (s == 0 || s == stars - 1) putchar('*');
            else putchar(' ');
        }
        putchar('\n');
    }
}

字符菱形 (指定字符)

void print_char_diamond(int n, char ch) {
    for (int i = 1; i <= 2 * n - 1; i++) {
        int spaces = abs(n - i);
        int chars = 2 * (n - spaces) - 1;
        for (int s = 0; s < spaces; s++) putchar(' ');
        for (int s = 0; s < chars; s++) putchar(ch);
        putchar('\n');
    }
}

調試建議

  1. 先打印行號、空格數、星號數驗證邏輯:printf("i=%d sp=%d st=%d\n", i, spaces, stars);
  2. 用'.'替換空格可視化對齊:putchar('.')
  3. 從小規模(n=2,3)開始測試

菱形打印是循環嵌套、數學建模、格式化輸出的綜合訓練。掌握「找規律→建公式→寫循環」的思維,可舉一反三解決各類幾何圖案打印問題。

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