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; }