下列 C++ 代码执行后的输出是( )。
int a = 8;
int b = 10;
cout << (a % b) << " " << (a * 1 / b) << " " << (a * 1.0 / b);看到取模先算余数,看到整数除直接截断,看到 1.0 触发浮点转换。
整除误以为小数除、忘记从左到右运算顺序。
GESP 一级 C++ 模块 2「运算符与表达式」中的取模运算、整除与浮点转换。命题人卡住的是「看到 1.0 才触发浮点运算」这个细节,70% 考生会忽略类型提升。
a % b:8 % 10 = 8(小于除数,余数就是被除数)。a * 1 / b:从左到右,8 * 1 = 8,8 / 10 = 0(两整数相除,结果截断为 0)。a * 1.0 / b:1.0 是 double,8 * 1.0 = 8.0,8.0 / 10 = 0.8(浮点除保留小数)。输出顺序:8 0 0.8。这一类题通法:遇到浮点常量先判断是否触发类型提升,再按运算符优先级从左到右计算。