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

C 語言二次方程求根:修正賦值誤判與全角括號導致的編譯錯誤

     編輯:程式設計綜合問答

代碼存在兩個關鍵錯誤導致邏輯錯誤與編譯失敗:

錯誤一:條件判斷用賦值 = 而非比較 ==

// 錯誤
else if (b*b - 4*a*c = 0)  // 永遠為真(賦值 0 結果為 0 → false,但改變了變量值!)
// 正確
else if (b*b - 4*a*c == 0) // 比較判別式是否為 0

錯誤二:中文全角括號 ( ) 導致編譯器無法識別

// 錯誤:全角括號
#include   // 應為 #include 
printf("輸入abc的值\n") ; // 分號前有全角空格
scanf("%d%d%d",&a,&b,&c); // & 可能被全角字符干擾

// 正確:半角字符
#include 
int main() {
    int a, b, c;
    printf("輸入abc的值\n");
    scanf("%d%d%d", &a, &b, &c);
    // ... 後續邏輯
}

完善後的標準實現

#include 
#include 

void solveQuadratic(int a, int b, int c) {
    if (a == 0) {
        printf("非二次方程 (a=0)\n");
        return;
    }
    double discriminant = b*b - 4.0*a*c;
    if (discriminant > 0) {
        double x1 = (-b + sqrt(discriminant)) / (2*a);
        double x2 = (-b - sqrt(discriminant)) / (2*a);
        printf("兩個實根: x1=%.2f, x2=%.2f\n", x1, x2);
    } else if (discriminant == 0) {
        double x = -b / (2.0*a);
        printf("一個實根(重根): x=%.2f\n", x);
    } else {
        printf("無實根 (判別式 < 0)\n");
    }
}

int main() {
    int a, b, c;
    printf("輸入 a b c: ");
    if (scanf("%d %d %d", &a, &b, &c) == 3) {
        solveQuadratic(a, b, c);
    }
    return 0;
}

避坑清單

  • 編輯器設置「顯示空白字符/全角字符」,或開啟「自動轉換全角標點為半角」。
  • 條件判斷永遠用 ==,賦值 = 僅用於變量賦值語句。
  • 判別式用 double 計算避免整數溢出(b*b 可能超過 INT_MAX)。
  • scanf 返回值檢查輸入是否成功。

細節決定成敗,養成「半角編碼、== 判斷、返回值檢查」三大習慣可消除 80% 低級錯誤。

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