GESP 一级 · GESP 202403 C++ 一级 第 17 题

判断题 · 答案 A · 考点:函数、输入输出

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

题目

C++ 语句 printf("%d#%d&",2,3) 执行后输出的是 2#3&。( )

答案:A

考点

函数输入输出

解题思维

这题就是考printf格式串里‘占位符’和‘普通字符’怎么混着出。拿到题先拆格式串:%d是整数占位,#和&在%前或后都是原样输出。所以%d#%d&展开就是2#3&,直接选A。

常见错误

很多同学会盯着%d死记‘输出整数’,却忘了格式串是逐字符解析的:%前的#、&都是普通字符,原样输出。有人会把#误当成转义符或特殊标记,以为会被吞掉;也有人看到&联想到指针或地址,怀疑输出不完整,从而选B。其实题目最阴险的就是把&放在末尾,没有任何格式化含义,只是普通字符。若只背‘%d输出整数’而不理解整个字符串如何从左到右匹配参数和输出普通字符,就会掉进这个坑,甚至误判为B。

详细解析(节选)

【考点】printf函数|格式字符串解析|输入输出设备(C++一级大纲)

本题考查GESP一级大纲中‘基本输入输出’模块的printf函数用法,命题人专门卡住初学者对格式字符串中占位符与参数对应关系的理解——很多同学会忽略%d和#、&这些非格式化字符的直接输出,误以为它们会被忽略或需要特殊处理,导致输出结果与预期不符,从而选错。

解题关键是识别格式字符串的占位符规则:%d表示输出一个整数,而#、&在%之前或之后都属于普通字符直接输出。因此%d#%d&展开为2#3&,与选项描述完全一致,这是最直接的验证,无需额外思考。

错误选项B的陷阱在于利用初学者对格式符的过度联想——有人会把#误认为转义符、把&当成取地址符,从而认为输出会带额外符号或格式错误。题目最阴险的细节是&放在字符串末尾,它没有任何格式化含义,只是普通字符,但很多考生会下意识认为&代表指针引用,从而怀疑输出不完整。如果你只背‘%d输出整数’而不理解整个字符串逐字符解析,就会掉进这个陷阱,甚至可能误判为B。具体来说,若只关注%d而忽略#和&,会认为输出应为2#3&但认为#被忽略,从而选B。若把&当成指针,会认为输出应为2#3&但认为&被忽略,从而选B。

站在命题人视角,若把格式串改为printf(‘%d#%ds&’,2,3,‘hello’),输出将变为2#3hello&,考察对字符串参数的处理;若改为printf(‘%d#%d&’,2,2),输出仍是2#2&,强调参数数量匹配;若换成cout << 2 << ‘#’ << 3 << ‘&’;,输出同样为2#3&,但考察的是流式输出逻辑。刷到类似题时,先问自己‘命题人想考我什么’——是格式符、参数顺序、还是输出流。若把&换成\n,输出会换行,考察对转义字符的理解;若把printf换成puts,则无法输出数字,考察对函数用法的辨析。若把%d换成%s,则需传入字符串,考察对格式符的扩展理解。若把2换成‘hello’,考察对整数与字符串参数的处理差异。

输入输出是编程最基础也最容易踩坑的模块。GESP一级大纲明确要求掌握printf的基本用法,包括格式控制符、参数匹配以及普通字符的原样输出。命题人常在这些细节上设坑,比如把普通字符和格式符混在一起,或者故意放一个看似有含义的符号在末尾,诱导学生过度联想。因此,复习时要养成‘逐字符拆解格式串’的习惯:从左到右看,遇到%再匹配参数,遇到其他字符直接输出。这样就能稳稳避开B选项的陷阱,准确选出A。

同考点真题

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