C语言 获取最小值和最大值

C语言本身没有内置的 min/max 关键字,但可以灵活用宏、inline 函数或 math.h 提供的 fmin/fmax 实现。在处理浮点数时,需要考虑浮点数的精度问题。在比较大量数据时,可以考虑使用更高效的算法,如分治算法。limits.h头文件中还包含,short,long,long long,unsigned类型的最大最小值的宏定义。

1、使用三目运算符宏(经典方式)

在 C 语言中,最简单直接的方法是使用三目运算符定义 minmax宏。为避免宏的副作用(比如 MIN(a++, b++) 导致多次计算),建议把宏参数加括号。

#include <stdio.h>

#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) > (b) ? (a) : (b))

int main() {
    int x = 10, y = 20;
    printf("Min: %d\n", MIN(x, y));  // 输出 10
    printf("Max: %d\n", MAX(x, y));  // 输出 20
    return 0;
}

2、写成内联函数(C99 及以上,避免宏副作用)

C99 之后,可以用 inline 函数代替宏,更安全。

#include <stdio.h>

inline int min(int a, int b) {
    return (a < b) ? a : b;
}

inline int max(int a, int b) {
    return (a > b) ? a : b;
}

int main() {
    int x = 15, y = 9;
    printf("Min: %d\n", min(x, y));
    printf("Max: %d\n", max(x, y));
    return 0;
}

3、使用标准库中的 fmin() 和 fmax() (浮点数)

如操作的是 浮点数(double/float),C99 标准库提供了fmin()fmax()

#include <stdio.h>
#include <math.h>

int main() {
    double a = 5.5, b = 3.3;
    printf("fmin: %f\n", fmin(a, b));  // 3.3
    printf("fmax: %f\n", fmax(a, b));  // 5.5
    return 0;
}

4、找出数组中的最大值和最小值

获取一组数中的最小值和最大值是常见的基础操作,通常通过遍历数组实现。

#include <stdio.h>

int main() {
    int arr[] = {5, 8, 2, 9, 3, 7, 1, 6};
    int n = sizeof(arr) / sizeof(arr[0]);
    int min = arr[0];
    int max = arr[0];

    for (int i = 1; i < n; i++) {
        if (arr[i] < min) {
            min = arr[i];
        }
        if (arr[i] > max) {
            max = arr[i];
        }
    }

    printf("最小值: %d\n", min);
    printf("最大值: %d\n", max);

    return 0;
}

5、封装成函数

封装成函数 查找最小值和最大值,函数复用性强,直接返回最小值和最大值,支持任何整型数组

#include <stdio.h>

void findMinMax(int arr[], int n, int *min, int *max) {
    *min = *max = arr[0];
    for (int i = 1; i < n; i++) {
        if (arr[i] < *min) *min = arr[i];
        if (arr[i] > *max) *max = arr[i];
    }
}

int main() {
    int arr[] = {10, 25, 3, 18, 7, 42, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    int min, max;

    findMinMax(arr, n, &min, &max);

    printf("最小值: %d\n", min);
    printf("最大值: %d\n", max);

    return 0;
}

推荐阅读
cjavapy编程之路首页