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

C 語言求三數最大值:邏輯錯誤與語法錯誤雙重修正

     編輯:程式設計疑難解答

原代碼問題

// ❌ 語法錯誤:C 不支持鏈式比較 c > b > a
if (c > b > a) return c; 

// ❌ 邏輯錯誤:僅判斷 c > b > a 一種情況,漏掉其他 5 種排列

正確實現

方案一:逐步比較法(推薦,易讀、通用)

int max(int a, int b, int c) {
    int m = a;           // 假設 a 最大
    if (b > m) m = b;    // b 更大則更新
    if (c > m) m = c;    // c 更大則更新
    return m;
}

方案二:標準庫函數(C++/C11)

// C++ 
#include <algorithm>
int max = std::max({a, b, c});

// C11 可用 fmaxf/fmax 但需嵌套
#include <math.h>
int max = fmax(fmax(a, b), c);

方案三:三元運算符(單行黨)

int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);

完整可運行程序

#include <stdio.h>

int max(int a, int b, int c) {
    int m = a;
    if (b > m) m = b;
    if (c > m) m = c;
    return m;
}

int main() {
    int a, b, c;
    printf("請輸入三個整數: ");
    scanf("%d %d %d", &a, &b, &c);
    printf("最大值是: %d\n", max(a, b, c));
    return 0;
}

測試用例

輸入輸出說明
3 5 25中間最大
10 1 110首個最大
-5 -2 -8-2負數
7 7 77全等

擴展:N 個數求最大值

int maxArray(int arr[], int n) {
    if (n <= 0) return INT_MIN; // 需 #include 
    int m = arr[0];
    for (int i = 1; i < n; i++) {
        if (arr[i] > m) m = arr[i];
    }
    return m;
}

總結

  • ❌ c > b > a 是**語法錯誤**(C 語言無鏈式比較)且**邏輯不全**
  • ✅ **逐步比較法**:m = a; if(b>m)m=b; if(c>m)m=c; —— 正確、高效、易擴展
  • 💡 核心思想:**假設第一個最大,依次挑戰者更新最大值**
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved