C++绝对值函数 abs
中等34用 abs 把负数“掐掉”负号 – C++ 绝对值函数入门
你有没有遇到过这样的情况:你和同桌的考试成绩,一个考了92分,一个考了76分。老师要计算“成绩差距”,你会直接做减法 92 - 76 = 16,没问题。但假如问你“76分和92分相差多少分”,如果写成 76 - 92 = -16,得到的却是负数。这时候我们说“差16分”,而不是“差负16分”。距离从来不会为负数,这就是“绝对值”在做的事:去掉数的符号,只保留大小。
在C++编程里,abs 函数就是专门干这个的。不管你给它正数还是负数,它都返回这个数的“正数版本” —— 绝对值。
怎么理解绝对值?用“距离”来想
- 数轴上的点
5离原点0的距离是5。 - 数轴上的点
-5离原点0的距离也是5。
所以 abs(5) = 5,abs(-5) = 5。绝对值就等于“不带正负号的数值”,永远非负。
abs 怎么用?
1. 写代码前的准备
abs 函数在 C++ 中有两个常见的“头文件”可以引入:
#include <cstdlib>(主要用于整数,比如int、long)#include <cmath>(主要用于整数和浮点数,但新版 C++ 推荐用这个)
大多数编译器两种都支持,保险起见,你可以直接写 #include <cmath>。
2. 基本用法
#include <iostream>
#include <cmath> // 提供abs函数(整数/浮点数)
using namespace std;
int main() {
int scoreDiff = -16; // 成绩差为负(同桌比你低16分)
int absDiff = abs(scoreDiff); // 去掉负号,变成16
cout << "实际差距: " << absDiff << "分" << endl;
double temperature = -5.5; // 零下5.5度
double absTemp = abs(temperature); // 变成5.5
cout << "温度的绝对值: " << absTemp << "度" << endl;
return 0;
}
运行结果:
实际差距: 16分
温度的绝对值: 5.5度
注意:
abs可以同时处理整数和浮点数(double),因为<cmath>中有多个重载版本。
3. 其他常见类型
| 数据类型 | 对应函数(在 <cmath> 中) | 例子 |
|---|---|---|
int | abs() | abs(-10) → 10 |
long | labs() | labs(-100000L) → 100000 |
long long | llabs() | llabs(-9999999999LL) |
float | fabsf() | fabsf(-3.14f) → 3.14 |
double | fabs() 或 abs() | fabs(-2.718) → 2.718 |
对于中小学编程,只用 abs() 和 fabs() 就足够了。fabs 专门用于浮点数,需要 #include <cmath>。
生活中的例子:用 abs 算零花钱变化
假设你每周零花钱是30元,今天妈妈多给了你8元,变成38元。如果妈妈少给了8元,变成22元。你想知道“变化了多少元”,不管多给还是少给,都只关心“变化大小”,而不是“增加还是减少”。
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int original = 30; // 原零花钱30元
int now = 22; // 今天只拿到22元
int change = now - original; // 变化量 = 22-30 = -8
int absChange = abs(change); // 绝对值 = 8
cout << "零花钱变化了 " << absChange << " 元(不管增还是减)" << endl;
return 0;
}
运行结果:
零花钱变化了 8 元(不管增还是减)
新手常犯的错误
错误1:忘记包含头文件
// 缺少 #include <cmath>
int main() {
cout << abs(-5); // 编译报错:'abs' was not declared
return 0;
}
解决:在文件开头加上 #include <cmath>。
错误2:用 abs 计算浮点数,却只引入了 <cstdlib>
#include <cstdlib> // 只声明了整数的abs
double x = -3.14;
cout << abs(x); // 可能只取整部分:输出3(把小数丢了!)
解决:用 fabs(x) 或包含 <cmath> 后直接用 abs(x)(新版C++支持)。
错误3:认为 abs 会改变原变量的值
int a = -10;
abs(a); // 这样写不会改变a,a还是-10
int b = abs(a); // 必须把结果赋值给新变量,b才是10
解决:abs 返回新值,原变量保持不变。
错误4:取绝对值后溢出(较少遇到,但值得了解)
int 能表示的最小负数是 -2147483648,它的绝对值 2147483648 超出了 int 最大值 2147483647,会导致错误结果。通常不用担心,但尽量不要对 INT_MIN 取绝对值。
完整示例:计算两个城市温度差的绝对值
小明的城市今天最高温8°C,最低温-3°C。小红的城市最高温5°C,最低温-7°C。谁的城市温差更大?
#include <iostream>
#include <cmath> // abs函数
using namespace std;
int main() {
int highX = 8; // 小明城市最高温
int lowX = -3; // 小明城市最低温
int diffX = highX - lowX; // 8 - (-3) = 11
int absDiffX = abs(diffX);// 已经是正数,但习惯性取绝对值
int highY = 5; // 小红城市最高温
int lowY = -7; // 小红城市最低温
int diffY = highY - lowY; // 5 - (-7) = 12
int absDiffY = abs(diffY);
cout << "小明城市温差: " << absDiffX << "°C" << endl;
cout << "小红城市温差: " << absDiffY << "°C" << endl;
if (absDiffX > absDiffY)
cout << "小明城市温差更大" << endl;
else
cout << "小红城市温差更大" << endl;
return 0;
}
运行结果:
小明城市温差: 11°C
小红城市温差: 12°C
小红城市温差更大
延伸学习
fabs– 专门给浮点数(float、double)用的绝对值函数,包含在<cmath>中。sqrt– 平方根,比如sqrt(16)返回4。pow– 幂运算,比如pow(2, 3)返回8(2的3次方)。ceil/floor– 向上取整 / 向下取整,可以配合绝对值一起使用。
如果你想知道更多数学函数,可以在网上搜索“C++ cmath 常用数学函数”。记得多用 abs 来避免负数带来的麻烦,它就像一把“去负号”的小剪刀,帮你把一切距离、差值、变化量都变成正数。
例题精讲
在C++中,要使用 abs 函数计算整数的绝对值,应该包含哪个头文件?
在C++中,abs(-5) 和 abs(5) 的返回值都是 5。
以下程序计算两个整数的差的绝对值,请补全代码。
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
int a = 10, b = -3;
int diff = ___(a - b);
cout << diff << endl;
return 0;
}下列哪个表达式可以正确计算整数 x 的绝对值?
以下代码输出 -8 的绝对值,请补全。
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
int num = -8;
int result = ___(num);
cout << "| -8 | = " << result << endl;
return 0;
}