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

C語言實現楊輝三角:常見錯誤與正確寫法詳解

     編輯:程式設計綜合問答

問題背景

有初學者嘗試用 C 語言打印楊輝三角,但程序輸出不正確。以下是原始代碼片段:

int a[10][10];
int i, j, h;
scanf_s("%d", &h); // 想打印的行數
for (i = 0; i < 10; i++)
    for (j = 0; j < 10; j++)
        if (j > i) a[i][j] = 0; // 對列大於行的元素清零
for (i = 0, j = 0; i < 10; i++) a[i][0] = 1; // 把第一列全部變成1
for (i = 0; i < 10; i++)
    for (j = 0; j < 10; j++)
        if (j = i) a[i][j] = 1; // 這裡用了賦值而非比較
for (i = 0; i < 10; i++)
    for (j = 0; j < 10; j++)
        if (i > 0 && j > 0) a[i][j] = a[i-1][j] + a[i-1][j-1];
for (i = 0; i < h+1; i++) {
    for (j = 0; j < h+1; j++) {
        if (i >= j) printf("%d", a[i][j]);
    }
    printf("\n");
}

主要錯誤分析

  1. 賦值與比較混淆:`if (j = i)` 應為 `if (j == i)`,否則會將 `i` 賦值給 `j`,導致邏輯錯誤。
  2. 數組初始化不完整:未對 `a` 進行整體初始化,可能導致未賦值的元素為隨機值。
  3. 循環邊界固定為 10:應根據輸入的行數 `h` 動態調整,避免越界或多餘計算。
  4. 打印格式:建議使用 `\t` 分隔,使三角形對齊更美觀。

修正後的完整代碼

#include <stdio.h>
int main() {
    int a[10][10] = {0}; // 整體初始化為0
    int i, j, h;
    scanf("%d", &h); // 輸入行數
    // 設置第一列為1
    for (i = 0; i <= h; i++) a[i][0] = 1;
    // 設置對角線為1
    for (i = 0; i <= h; i++) a[i][i] = 1;
    // 填充內部元素
    for (i = 2; i <= h; i++) {
        for (j = 1; j < i; j++) {
            a[i][j] = a[i-1][j] + a[i-1][j-1];
        }
    }
    // 打印楊輝三角
    for (i = 0; i <= h; i++) {
        for (j = 0; j <= i; j++) {
            printf("%d\t", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

關鍵點總結

  • 區分 `=`(賦值)與 `==`(比較),這是 C 語言初學者最常犯的錯誤之一。
  • 二維數組建議在定義時初始化,如 `int a[10][10] = {0};`。
  • 循環邊界應根據實際需求(如輸入行數)動態確定,而非硬編碼常數。
  • 打印時使用 `\t` 可使列對齊,輸出更直觀。

通過以上修正,程序即可正確打印指定行數的楊輝三角。建議初學者多練習邊界條件與初始化,養成良好的編碼習慣。

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