GESP 二级 · GESP 202306 C++ 二级 第 18 题

判断题 · 答案 A · 考点:函数

← 整套速查表 GESP 二级 全部真题

题目

在使用 C++ 语言编写程序时,不能使用 sqrt、abs 等数学函数,包含 <cmath> 或 <math.h> 头文件后就能够使用了。

答案:A

考点

函数

解题思维

这题考的是C++标准库函数的调用规则,核心就是头文件包含的强制性。拿到题别被绝对词忽悠,直接想:这个函数名是不是编译器自带的?是不是在某个头文件里声明的?只要不是内置函数,没include肯定报错。

常见错误

很多初学者容易把‘函数名’当成语言自带的全局符号,以为写了就能用,或者觉得include只是‘建议’而非‘必须’。还有的人会混淆函数声明和定义,认为只要代码里写了逻辑就能调用,忽略了编译期符号查找的机制。更隐蔽的坑是,有些同学只记住了sqrt在cmath里,却忘了abs既在cmath也在cstdlib(C++17前)或cmath(C++17后),导致在不同环境下编译报错,误以为题目说法不严谨。其实命题人就是想卡这个‘必须include’的绝对性,谁要是觉得‘偶尔能跑就没事’,谁就掉坑里了。

详细解析(节选)

【考点】C++标准库|头文件包含|函数声明

考纲定位:本题考查的是C++标准库中数学函数的使用规则,属于《C++编程》基础章节中‘头文件包含’与‘函数声明’的交叉点。命题人特别喜欢在这个环节挖坑,因为初学者往往只关注函数‘怎么写’,却忽略了‘怎么让编译器知道有这回事’。这道题用‘不能使用’这种绝对化的表述,就是为了检验你是否真正理解编译期符号查找的机制——不include,符号就不存在,调用必然报错。

解题思维:看到题干里列举sqrt、abs这些函数,第一反应应该是:它们不是C++语言内置的(比如printf是内置的,但sqrt不是),它们属于标准库。标准库里的函数,编译器不会自动帮你加载,必须显式include对应的头文件。所以‘包含头文件后就能用’这个逻辑链条是完整的,答案自然是A。

陷阱拆解:选项B若被选中,说明考生可能混淆了‘函数定义’和‘函数声明’的概念,或者误以为某些函数名是全局预定义的。实际上,sqrt、abs这些函数名只是标识符,没有头文件保护,它们在编译期根本查不到定义,直接调用会报‘undefined reference’或‘no matching function’。更深层的坑在于,有些同学会想:‘我在主函数里写了abs,难道编译器不生成调用吗?’——错,编译器只负责语法检查,不负责去别的地方找实现,除非你include了。

反命题思维:如果题目改成‘使用sqrt只需include <cmath>即可’,答案还是A;如果改成‘不include也能调用’,那就变成错题了。这类题的刷法很简单:遇到‘函数是否可用’的判断题,先问自己‘它依赖什么头文件或符号表?’。GESP二级虽然简单,但这类概念题是高频考点,也是C++入门的必经之路。

考频趋势:从题库数据看,‘函数定义与调用’这一知识点在2023年考了15题,2024年考了17题,2025年更是达到了23题,呈现明显的上升趋势。其中GESP二级虽然只考了2题,但属于基础概念,往往以单选题形式出现,用来卡‘include是否必须’这种细节。‘函数与递归’相关考点在2023年也考了13题,说明函数类题目在近年来的考试中占比越来越大,尤其是GESP四级、五级、六级中,函数相关题目更是重头戏。

预测:基于2023-2025年的数据,函数相关考点(包括标准库函数、函数声明/定义、递归等)在未来两三年内仍将是GESP二级、三级乃至四级的必考内容。命题人可能会继续用‘绝对化句式’或‘混淆声明与定义’的方式挖坑,也可能出现更复杂的‘头文件冲突’或‘函数重载’类题目。因此,学生不仅要记住sqrt、abs在哪个头文件,更要理解‘为什么’必须include,这样才能应对各类变式题。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断