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

C 一元二次方程求根:scanf 缺少 & 取址符導致輸入失敗

     編輯:程式設計綜合問答

原始碼 scanf("%f%f%f", a, b, c); 缺少 & 取址符,導致變數無法接收輸入值,運算結果全為 0 或亂碼。

修正

scanf("%f %f %f", &a, &b, &c);

完整健壯版

#include <stdio.h>
#include <math.h>
int main() {
    double a, b, c;
    if (scanf("%lf %lf %lf", &a, &b, &c) != 3) return 1;
    double disc = b*b - 4*a*c;
    if (disc < 0) {
        puts("無實根");
    } else if (disc == 0) {
        printf("%.4f\n", -b / (2*a));
    } else {
        double sq = sqrt(disc);
        printf("%.4f\n%.4f\n", (-b + sq) / (2*a), (-b - sq) / (2*a));
    }
    return 0;
}

關鍵點

  • scanf 格式字串加空格分隔,讀取更穩健。
  • 使用 double + %lf 提高精度。
  • 判別式 disc 獨立變數避免重複計算。
  • 分母 (2*a) 加括號確保優先級正確。

**「scanf 必須傳址」**是 C 語言鐵律,漏寫 & 會導致不可預期的行為。

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