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

C語言實作楊輝三角:新手也能輕鬆看懂的完整教學與代碼詳解

     編輯:程式設計綜合問答

前言

楊輝三角(Pascal's Triangle)是經典的程式設計練習題目,許多初學者在接觸 C 語言時都會被要求印出這個數學結構。本文將從基本概念出發,詳細解析如何用 C 語言印出 7 行楊輝三角,並提供完整的代碼註解,幫助新手理解陣列操作與迴圈邏輯。

什麼是楊輝三角?

楊輝三角是一個由數字排成的三角形幾何圖形。其特性是:

  • 每行的第一個和最後一個數字都是 1
  • 其他位置的數字等於上一行同位置與前一位置的數字之和
  • 第 n 行有 n 個數字(從 0 開始計數)

楊輝三角示意圖

核心演算法邏輯

我們使用二維陣列 a[N][N] 來儲存三角形的值,其中 N = 7:

  1. 初始化邊界:將每行的第一個元素 a[i][0] 和對角線元素 a[i][i] 設為 1
  2. 填充內部值:從第 3 行開始(i=2),計算 a[i][j] = a[i-1][j-1] + a[i-1][j]
  3. 格式化輸出:依行印出,每行元素數量遞增

完整代碼實現(含詳細註解)

#include <stdio.h>
#define N 7

int main() {
    int a[N][N];        // 宣告 7x7 二維陣列儲存楊輝三角
    int i = 0, j = 0;   // 迴圈控制變數

    // 步驟 1:初始化每行首尾為 1
    for (i = 0; i < N; i++) {
        a[i][0] = 1;    // 每行第一個元素
        a[i][i] = 1;    // 每行最後一個元素(對角線)
    }

    // 步驟 2:計算內部元素值(從第 3 行開始)
    for (i = 2; i < N; i++) {        // i=2 代表第 3 行(索引從 0 開始)
        for (j = 1; j < i; j++) {    // j 從 1 到 i-1,跳過首尾
            a[i][j] = a[i-1][j-1] + a[i-1][j];  // 核心公式:上左 + 上右
        }
    }

    // 步驟 3:格式化輸出三角形
    for (i = 0; i < N; i++) {
        for (j = 0; j <= i; j++) {   // 第 i 行有 i+1 個元素
            printf("%d ", a[i][j]);
        }
        printf("\n");                // 換行,形成塔狀結構
    }

    return 0;
}

執行結果展示

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 

新手常見問題 Q&A

Q1:為什麼陣列大小定義為 [N][N] 而不是 [N][N/2]?

A:雖然實際用到的空間是三角形,但二維陣列必須是矩形。定義 [7][7] 方便索引計算,浪費的空間在現代電腦中可忽略不計。

Q2:第二層迴圈為什麼從 j=1 開始?

A:j=0 和 j=i 的位置已在初始化階段設為 1,內部計算只需處理中間的元素。

Q3:如何修改程式讓使用者自行輸入行數?

A:將 #define N 7 改為變數,並加入 scanf("%d", &N) 即可,但需注意陣列大小限制或改用動態記憶體配置。

進階延伸:優化空間複雜度

觀察發現:計算第 i 行只需要第 i-1 行的資料。我們可以用一維陣列 int a[N] 從右向左更新,將空間複雜度從 O(N²) 降為 O(N)。有興趣的同學可以嘗試實作!

總結

楊輝三角是理解陣列操作、巢狀迴圈與數學規律轉化為程式邏輯的絕佳練習。掌握「邊界初始化 → 內部遞推 → 格式輸出」這三步驟,不僅能解決此題,更能舉一反三應用於其他動態規劃問題。

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