c 语言函数求绝对值主要有两种实现方式,第一种是直接调用标准库自带绝对值函数,第二种是自己编写自定义函数实现绝对值计算,绝对值的数学含义就是数字去掉负号,正数和零保持不变,负数转换成对应的正数。整数求绝对值使用 abs 函数,浮点数求绝对值使用 fabs 函数,abs 定义在 stdlib.h 头文件,fabs 定义在 math.h 头文件,调用的时候注意区分类型,把 int 传给 fabs 或者把 double 传给 abs 会出现类型不匹配,计算结果出错,这是实验作业高频错误。如果是课程作业要求自己写函数,就不能直接调用库函数,需要自定义函数,在函数内部判断参数是否小于零,如果小于零就返回相反数,大于等于零直接返回原值,这种写法简单,也是实验报告最常考的题目,同时要留意整数最小值溢出问题,int 类型最小负数取绝对值之后会超出 int 可以表示的范围,出现溢出异常。
内置库函数介绍
abs 整数绝对值,原型 int abs (int n),头文件 stdlib.h
fabs 双精度浮点数绝对值,原型 double fabs (double x),头文件 math.h
fabsf 单精度 float 绝对值
fabsl 长双精度 long double 绝对值
自定义函数实现思路
函数接收一个数值参数
判断参数是否小于 0
如果小于 0,返回参数乘以负号
如果大于等于 0,直接返回原数值
使用完整步骤
第一步 确定是整数还是浮点数,选择对应的库函数
第二步 引入对应头文件,abs 引入 stdlib.h,fabs 引入 math.h
第三步 准备变量,调用函数,接收返回结果
第四步 如果作业要求自定义函数,先声明函数,主函数调用自定义求绝对值函数
第五步 编译运行,测试正数负数零三组数据
对比表格
项目 abs fabs 自定义函数
适用类型 整数 浮点数 可自定义类型
头文件 stdlib.h math.h 不需要额外头文件
特点 系统库实现 系统库实现 课程作业手写实现
注意点 最小 int 负数溢出 gcc 编译 fabs 需要链接 lm
重点注意事项
第一 abs 只能处理 int 整数,不要拿浮点数直接传入 abs
第二 fabs 是浮点数版本,gcc 环境编译使用 fabs 需要加 lm 链接数学库
第三 自定义函数如果使用 int 类型,INT_MIN 这个最小值取绝对值会溢出,属于边界隐患
第四 零的绝对值还是零,测试数据一定要包含零
第五 自定义函数需要提前声明或者把函数写在 main 函数前面,否则编译器找不到函数
【常见问题】
问题 1 c 语言函数求绝对值里面 abs 和 fabs 有什么区别
回答 1 c 语言函数求绝对值中 abs 是整数绝对值函数,头文件 stdlib.h,fabs 是浮点数绝对值函数,头文件 math.h,二者适用数据类型不一样,不能混用。
问题 2 c 语言函数求绝对值作业能不能直接调用 abs 库函数
回答 1 c 语言函数求绝对值如果题目要求自己编写函数,就不能直接调用 abs 库函数,需要自定义判断正负返回相反数,题目没有限制才可以直接使用 abs。
问题 3 c 语言函数求绝对值为什么 fabs 编译提示链接错误
回答 1 c 语言函数求绝对值里 fabs 属于数学库函数,gcc 编译的时候需要在编译命令末尾添加 lm 参数链接数学库,缺少这个参数就会报链接错误。
【免责申明】
本文内容仅用于 c 语言基础知识学习参考,整数存在溢出边界问题,实际开发请根据数值范围选择合适数据类型,因类型选择或者编码错误造成计算异常,相关风险由使用者自行承担。


