以下关于 C++ 中 abs() 函数的描述,正确的是( )
答案A。函数必须有函数名。函数可以没有参数,可以没有返回值(void类型),定义可以在调用之后(需提前声明)。
函数必须有名称,但可以有默认参数。参数默认以值传递(传值)。函数未被调用时参数不占内存。
【考点】C++ 库函数 abs 行为|头文件包含规则|浮点数类型转换
本题考查 C++ 标准库函数 abs 的行为特征,定位在 GESP 三级大纲"模块一:编程基础"第 3 条"常用库函数"。命题人专挑初学者易混淆点——把 abs 当成四舍五入工具、误以为它能截断小数,以此筛掉只背"绝对值函数"四个字却不懂类型转换的考生。
解题链条:先看函数名 abs 锁定"绝对值"语义,再核对头文件——<cmath>提供 std::abs支持所有类型,<cstdlib>的 abs专用于 int;接着检查参数个数与类型,abs是单目函数,传入两个参数直接编译错误;最后回归 C++ 类型规则,函数不会自动转换,浮点输入输出浮点结果。
拆解选项:B 错在偷换概念,abs(3.14)返回 3.14,四舍五入需用 std::round;C 错在违反语法,abs 只接受一个参数,abs(-1, -2)非法;D 错在忽视类型保持,abs(-2.5)结果是 2.5,截断是强制类型转换行为而非函数特性;A 正确,int 绝对值在<cmath>或<cstdlib>均有定义。
若把 abs 换成 std::round,B 就变正确;若改成 std::abs 并加 std 前缀,C 的非法调用依旧报错;若题目问 fabs,D 的浮点截断说法才接近真相。刷到这类题,先问自己:"命题人是不是在考类型转换还是函数语义?"