GESP 一级 · GESP 202509 C++ 一级 第 6 题

选择题 · 答案 A · 考点:输入输出、基本数据类型

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

题目

下面的 C++ 代码中变量 N 和 M 都是整型,则执行时如果先输入 10 并输入一个制表符后输入 20 并回车,其输出的数值是( )。

scanf("%d", &N);
scanf("%d", &M);
printf("{%d}", N + M);
答案:A

考点

输入输出基本数据类型

解题思维

答案A。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。

常见错误

逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。

详细解析(节选)

【考点】格式化输入输出|基本数据类型|表达式求值

🎯 考纲定位:本题考查 GESP 一级大纲中的格式化输入输出、基本数据类型、表达式求值三大核心点。命题人把 scanf 放在这里,就是要卡住那些'以为 scanf 会自动跳过空格'的考生——实际上 scanf("%d") 会阻塞等待有效输入,制表符会被自动跳过,但必须确保后续输入是合法的整数。

🧠 解题思维:看到 scanf 要先想'输入格式匹配':%d 匹配十进制整数,空白符(空格、制表符、换行)自动跳过。因此先输入 10 后,制表符被忽略,scanf("%d") 继续读入 20,N 和 M 分别赋值为 10 和 20。printf("{%d}"...) 将 N+M 求和输出,得到 {30}。通法:任何 scanf 序列都要先确认格式说明符与输入流的结构,不能假设'输入一定完整'。

🪤 陷阱拆解:选项 B 是典型'把制表符当成数字'的误区——scanf("%d") 会跳过空白,不会把制表符解析为数字,所以不会输出 1020。选项 C 是'没执行'的陷阱——scanf 只要遇到有效输入就会成功,不会直接跳出。选项 D 更是极端情况,只有在输入流中断或格式错误时才会等待,本题输入完全合法,所以不会 D。最阴险的细节在于 scanf("%d") 的'自动跳过空白'特性,很多考生误以为需要自己处理制表符,其实不需要。

🔄 反命题思维:如果改成 scanf("%d,%d", &N, &M),要求输入'10,20',制表符就不再被跳过,就会变成 D。或者把输出改成分行,答案会变成'{30}\n'。刷到类似题时,先问自己:'scanf 的格式说明符里有没有空白符?'这个细节决定一切。

同考点真题

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