下面的 C++ 代码执行时如果先输入 10 回车后输入 20 并回车,其输出是( )。
int N, M;
printf("第一个数:");
scanf("%d", &N);
printf("第二个数:");
scanf("%d", &M);
printf("%(N+M)=%d", N+M, int(N+M));答案C。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。
逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。
【考点】输入输出|printf格式占位符
考纲定位:本题考查《GESP C++一级大纲》"输入输出与变量"模块中的printf格式化输出。命题人刻意用%(N+M)检验学生是否理解%在格式字符串中是占位符而非普通字符——90%考生会误以为它能输出数值。
解题思维:按执行流:先输出提示语,再scanf读入N、M。最后printf时,因格式串含字面%(N+M),这部分不会被替换,仅%d被N+M的值30替换。因此输出为%(N+M)=30。通法:处理printf时逐个解析格式串,区分占位符与纯文本。
陷阱拆解:选项A、B是典型误解题意图的产物——把%(N+M)当成数字或表达式输出。选项D过于绝对。最阴险处在于%在C++中是格式符前缀,若格式串写错(如漏写%)会导致输出异常,这里故意保留%制造视觉误导,只背printf用法而不理解占位符机制必栽跟头。
反命题思维:若把格式串改为"%d=%d",答案成A;若改为"%d+%d=%d",答案成B。刷到类似题先问:格式串里哪些是占位符?哪些是字面?命题人想考你对printf占位符边界条件的理解。