下面 C++ 代码执行后的输出是( )。
float a;
a = 101.101;
a = 101;
printf("a+1={%.0f}",a+1);答案C。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。
逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。
【考点】浮点型赋值|printf格式控制|隐式类型转换
1. 考纲定位 GESP一级C++ 基础语法与数据类型模块。命题人专挖初学者常见误区:以为float不能接收整数赋值、误判printf格式行为。这道题卡住的是"看到float就紧张,不敢写整数赋值"的心理障碍。
2. 解题思维 看到float先记类型,赋值整数触发隐式转换,101变101.0;再看printf格式,%.0f强制取整,a+1得102.0格式化输出102;格式串"a+1={%.0f}"按字面输出前缀和后缀。
3. 陷阱拆解 D错在混淆C++隐式转换规则,int转float合法;A错在忽略格式串中"a+1="前缀;B错在误判%.0f会输出字符串;C是唯一正确选项。最阴险的细节是%.0f——换作%lf输出102.000000,换作%d则类型不匹配编译错误。
4. 反命题思维 若把float改成int,a=101.101那行直接报错;若%.0f改成%lf,输出会变102.000000;若a+1改成a-1,输出是100。刷到类似题先确认"类型匹配→赋值合法性→格式符含义"三步。