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

C 語言計算次方函數:if 判斷寫成賦值導致結果永遠為 1

     編輯:程式設計綜合問答

初學者編寫 power 函數計算 n 的 p 次方時,發現無論輸入何值,回傳結果皆為 1。程式碼片段如下:

double power(double n, int p) {
    double pow;
    int i;
    if (n = 0)   // 錯誤:這是賦值,非比較
        pow = 0;
    if (p = 0)   // 錯誤:同理
        pow = 1;
    for (pow = 1, i = 1; i <= p; i++)
        pow *= n;
    return pow;
}

錯誤分析

C/C++ 中 if (n = 0) 是將 0 賦值給 n,運算式值為 0(假),導致 if 區塊不執行;但 n 已被改為 0,後續迴圈 pow *= n 使結果歸零。同理 if (p = 0) 將 p 改為 0,迴圈條件 i <= p 直接不成立,pow 保持初值 1 返回。

正確寫法

if (n == 0)   // 使用 == 進行比較
    return 0;
if (p == 0)
    return 1;

建議:比較運算永遠用 ==,並養成 if (0 == n) 「耶達寫法」習慣,編譯器會在誤寫成 = 時報錯。

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