首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言指標實現求最大值最小值:經典教學範例

     編輯:關於C語言

代碼實現

[c]
#include 

int u, v; // 全域變數存放結果

// 找出陣列中最大值 u 與最小值 v
void find_u_v(int *p, int n) {
    int *q;
    u = v = *p; // 初始化為第一個元素
    for (q = p; q < p + n; q++) {
        if (u < *q) u = *q;      // 更新最大值
        else if (v > *q) v = *q; // 更新最小值
    }
}

int main() {
    int i, num[10];
    printf("input 10 numbers\n");
    for (i = 0; i < 10; i++)
        scanf("%d", &num[i]);
    find_u_v(num, 10);
    printf("\n\n u=%d; v=%d\n", u, v);
    return 0;
}

關鍵點解析

  1. 指標遍歷:q = p; q < p + n; q++ 利用指標算術逐元素訪問,無需索引變數。
  2. 初始化策略:以首元素 *p 初始化 u、v,避免假設數值範圍 (如 INT_MIN/INT_MAX)。
  3. 單次遍歷雙更新:if-else if 結構確保每輪最多兩次比較,平均 1.5 次/元素。
  4. 全域變數回傳:教學簡化用法;工程建議改為輸出參數 void find_u_v(int *p, int n, int *max, int *min)。

進階改進版

[c]
#include 

void find_min_max(const int *arr, size_t n, int *pmin, int *pmax) {
    if (!arr || n == 0 || !pmin || !pmax) return;
    int min = INT_MAX, max = INT_MIN;
    for (size_t i = 0; i < n; i++) {
        if (arr[i] < min) min = arr[i];
        if (arr[i] > max) max = arr[i];
    }
    *pmin = min; *pmax = max;
}
  • 使用 const、size_t、INT_MIN/MAX、輸出參數、錯誤檢查,更符合工業規範。
  • 可進一步展開為 兩兩比較法 (每次取兩元素比較後再與極值比),比較次數從 2n 降至 1.5n。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved