1、使用三目运算符宏(经典方式)
在 C 语言中,最简单直接的方法是使用三目运算符定义 min
和 max
宏。为避免宏的副作用(比如 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;
}