C++最大值与最小值 max/min
中等21C++最大值与最小值 max/min:轻松找出谁大谁小
在学习和生活中,我们经常需要比较大小——比如比身高、比分数、比零花钱。C++里有两个特别方便的函数:max 和 min,它们就像一把“快速比较尺”,能立刻告诉你两个数中哪个更大(max)或哪个更小(min)。
这两个函数住在 <algorithm> 头文件里,可以帮我们比较整数、小数、字符,甚至字符串(按字母顺序)。你只要把两个要比较的值放进括号里,它就会把“赢家”或“输家”返回给你。
比比谁更大 —— max 和 min 的用法
想象一下,体育课上测跳远:小明跳了3.2米,小红跳了2.8米。谁跳得更远?当然是小明。在代码里,我们就可以用 max(3.2, 2.8) 来得到3.2这个结果。
max(a, b) 返回 a 和 b 中较大的那个值,min(a, b) 返回较小的那个值。两个参数的类型要一致(都是整数、或都是小数、或都是字符等)。
看一个简单的学生成绩比较例子:
#include <iostream>
#include <algorithm> // 引入max和min函数
using namespace std;
int main() {
int score1 = 85, score2 = 92; // 两个同学的成绩
int highest = max(score1, score2); // 最高分
int lowest = min(score1, score2); // 最低分
cout << "最高分: " << highest << endl;
cout << "最低分: " << lowest << endl;
return 0;
}
运行结果:
最高分: 92
最低分: 85
是不是很直观?就像老师直接告诉你答案一样。
还可以比较三个数吗?—— 嵌套使用
如果要从三个数里找最大值,可以用两次 max:max(a, max(b, c))。原理是先把后两个数比出大的那个,再和第一个数比。同样,找最小值要用两次 min。
贴近生活的例子:三个朋友小明、小红、小刚的钱分别是10元、20元、5元。谁的钱最多?我们就用 max(10, max(20, 5)) 来算。
int a = 10, b = 20, c = 5; // 三个人的零花钱(单位:元)
int biggest = max(a, max(b, c)); // 钱最多的那个人有多少?答案是20
int smallest = min(a, min(b, c)); // 钱最少的呢?答案是5
如果还想找第四个数,可以继续嵌套:max(a, max(b, max(c, d)))。这样层层比较,就像淘汰赛一样,最终决出冠军。
还能比字符和字符串?
是的!字符比较的是它们的 ASCII 码值。比如 'A' 是65,'B' 是66,所以 max('A', 'B') 返回 'B'。字母顺序和字典序一致,所以 max("apple", "banana") 返回 "banana"(因为b在a后面)。
char char1 = 'X', char2 = 'M'; // 两个字母
char bigger_char = max(char1, char2); // 'X'的ASCII码88 > 'M'的77,所以是'X'
cout << "较大的字母是: " << bigger_char << endl;
新手容易犯的错误
-
参数类型不匹配
max(10, 3.5)中一个是int,一个是double,编译器会报错或警告。一定要保持类型一致,比如统一用double:max(10.0, 3.5)。 -
忘记包含头文件
如果没写#include <algorithm>,编译器就不认识max和min,会报“未定义的标识符”错误。别忘了在程序最前面加上它。 -
误用成
max和min作为变量名
有些同学可能会写int max = 5;,这样就把函数名覆盖了,后面再想用max(a,b)就会出错。建议不要用maxmin当变量名。 -
比较三个数时括号写错
max(a, max(b, c))是正确的,但有人写成max(a, b, c)—— 这是错误的,因为max一次只能比较两个数。三个数要像套娃一样嵌套。
完整可运行的示例:运动会成绩统计
假设学校运动会三个项目:跳远(米)、跑步(秒,越小越好)、掷铅球(米)。我们想输出每个项目的最好成绩和最差成绩。
#include <iostream>
#include <algorithm> // 使用max和min
using namespace std;
int main() {
// 三人的跳远成绩(米)
double longJump1 = 3.2, longJump2 = 2.8, longJump3 = 4.1;
double bestJump = max(longJump1, max(longJump2, longJump3)); // 最好成绩
double worstJump = min(longJump1, min(longJump2, longJump3)); // 最差成绩
cout << "跳远最好成绩: " << bestJump << " 米" << endl;
cout << "跳远最差成绩: " << worstJump << " 米" << endl;
// 三人的100米跑秒数(越小越好)
double run1 = 12.5, run2 = 13.2, run3 = 11.8;
// 注意:跑步是时间越短越好,但max/min只比较数值大小
// 这里我们用 min 找最快(时间最小),用 max 找最慢(时间最大)
double fastest = min(run1, min(run2, run3)); // 最快成绩(最小秒数)
double slowest = max(run1, max(run2, run3)); // 最慢成绩(最大秒数)
cout << "跑步最快时间: " << fastest << " 秒" << endl;
cout << "跑步最慢时间: " << slowest << " 秒" << endl;
// 三人的铅球成绩(米)
double ball1 = 8.5, ball2 = 7.2, ball3 = 9.0;
double bestBall = max(ball1, max(ball2, ball3));
double worstBall = min(ball1, min(ball2, ball3));
cout << "铅球最好成绩: " << bestBall << " 米" << endl;
cout << "铅球最差成绩: " << worstBall << " 米" << endl;
return 0;
}
运行结果:
跳远最好成绩: 4.1 米
跳远最差成绩: 2.8 米
跑步最快时间: 11.8 秒
跑步最慢时间: 13.2 秒
铅球最好成绩: 9 米
铅球最差成绩: 7.2 米
相关指引
- 想自己写比较逻辑?可以学学条件语句
if-else,或用三目运算符a>b ? a : b。 - 如果要从一组数(比如数组)里找最大最小值,可以用循环配合
max,或者直接用*max_element和*min_element(也在<algorithm>中)。 - 学完基础比较,可以挑战排序(
sort函数),把一堆数字按顺序排好。
掌握了 max 和 min,以后遇到“谁最高、谁最低”的问题,写一行代码就搞定啦!
例题精讲
已知 int x = 10, y = 20; 则 max(x, y) 的返回值是?
max 和 min 函数只能用于 int 类型的变量。
以下程序从键盘输入两个整数,输出较小的数。请填空。
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << ___(a, b);
return 0;
}哪个头文件包含了 max 和 min 函数?
以下程序输出三个整数中的最大值,请填空。
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int a=10, b=25, c=18;
int m = max(a, ___(b, c));
cout << m;
return 0;
}