如下 C++ 代码执行后,其输出是( )。
int a = 3;
int b = 4;
printf("%d#%d\n", a, b);3
4看到 printf 就要想到格式化字符串,每个占位符对应一个参数,非占位符字符原样输出。代入 a=3, b=4,得到"3#4",末尾换行符可能影响显示但选项里没有体现换行。所以输出是 B。
A 把 # 当成空格,C 在 # 前后加空格,D 以为需要 return 才输出。这些错误选项利用了学生对格式化输出的常见误区:把非占位符字符误认为分隔符,或者忽略占位符与参数的对应关系。
本题考查《GESP 考试大纲》一级"C++ 语言基础”模块中的函数调用与格式化输出(printf 占位符使用)。命题人卡住的是绝大多数考生对"printf 占位符与参数一一对应、非占位符原样输出”这一基本规则的掌握——很多人看到#号就下意识当成空格或分隔符,而不是把它当作普通字符。
看到 printf 先定位格式化字符串:"%d#%d\n"。
%d 是整数占位符,对应第一个参数 a=3 → 输出"3"# 不是占位符,是普通字符,原样输出 → 输出"#"%d 是整数占位符,对应第二个参数 b=4 → 输出"4"\n 是换行符,输出后光标移到下一行,但选项中没有"换行"这个考点把各部分按顺序拼接:3 + # + 4 = "3#4",末尾换行不影响看到的文本内容。因此选 B。