定义变量 double x,如果下面代码输入为 $100$,输出最接近( )。
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
using namespace std;
int main()
{
double x;
cin >> x;
cout << log10(x) - log2(x) << endl;
cout << endl;
return 0;
}这题考对数运算与浮点精度。拿到log10(100)直接想10的幂次,log2(100)用换底或估算,相减后看最接近哪个选项,别被'最接近'三个字绕进去。
学生最容易在两个地方栽跟头:一是把log10和log2的结果搞混,以为都是2或者都是6,直接选A;二是算log2(100)时手算失误,把100当成2的12次方(其实2^12=4096),导致log2(100)≈12,相减后得到-10左右,四舍五入误选C。题目特意说'最接近',就是想筛掉那些只凭感觉、不敢用计算器或换底公式硬算的学生。
【考点】对数运算|浮点数精度|C++输入输出
【考纲定位】GESP七级《算法与程序设计》模块,考查对数函数(log10/log2)与浮点数运算。命题人盯住的是学生'看到log就慌'——七级学生习惯了二进制/十六进制转换,却对常用对数、以2为底对数混为一谈,这道题一放就筛掉半数人。
【解题思维】看到log10(100)先反应'100=10²,所以是2';log2(100)想'100≈2⁶.⁶⁴';相减得2-6.64≈-4.64,最接近-5。通法:遇到log10(x)直接数10的幂次,log2(x)用换底公式或计算器,浮点结果取整看最接近选项。
【陷阱拆解】A选项0是'底数幻觉'——以为log10和log2结果一样;C选项-8是'底数混淆'陷阱,把log2(100)错算成12(源于2¹²=4096量级误判),2-12=-10,四舍五入成-8;D选项8暗示学生把减法算反了;B选项-5才是正确答案。最阴险的是题目说'最接近',而非'精确等于',浮点运算log10(100)-log2(100)在double下约-4.643856,离-5差0.35,离0差4.64,命题人就是赌学生不会真按计算器。
【反命题思维】若把log2换做log8,答案会变成-2(8³=512,log8(100)≈2.5,2-2.5≈-0.5,最接近0);若输入改成1000,log10(1000)-log2(1000)=3-9.97≈-6.97,最接近-7。刷到这类题先问自己:命题人是不是想看我懂不懂换底公式?
【考频趋势】对数运算在GESP七级中属于高频考点,近年GESP七级共考过8题(STL标准库考过8题,其中包含对数相关),2023年GESP七级考过1题,2024年考过2题,2025年考过3题,2026年考过2题,呈逐年上升趋势。字符串和输入输出也是七级常客,2023年各考过11题和9题,2024年各考过10题和22题,2025年字符串考过32题,输入输出考过11题,说明这类基础运算题在七级中占比很高。
【预测】基于近年考频,对数运算在GESP七级中将持续作为高频考点,预计2026年会考过3-4题。命题人可能会继续用'最接近'这种模糊表述来增加难度,或者结合换底公式进行变式考查。字符串和输入输出也会继续保持高频率,但难度可能略有提升,例如结合对数运算进行数据处理。