首页 > 试题广场 >

设float x=2.5,y=4.7;int a=7;pri

[单选题]
对于代码段
float x = 2.5, y = 4.7;
int a = 7;
printf("%.1f", x+a%3*(int)(x+y)%2/4);
的结果为()
  • 2.5
  • 2.8
  • 3.5
  • 3.8
首先,判断运算顺序,乘,除,取余是同级运算,并且顺序是从左到右。
x+a%3*(int)(x+y)%2/4
       2.5+7%3*(int)(2.5+4.7)%2/4
   = 2.5+1*(int)(7.2)%2/4
   =2.5+1*7%2/4                                 // (int)(7.2)强制转换成7
   =2.5+7%2/4
   =2.5+1/4
   =2.5
发表于 2022-03-26 10:30:59 回复(1)
后面强制将float转换为int,/和%和*优先级相同,结合方向为自左向右,后面值为0,所以最后结果为x
发表于 2018-05-24 10:17:37 回复(3)
int a = 7;
float x = 2.5;
float y = 4.7;
cout << "(int)(x + y):" << (int)(x + y) << endl;
cout << a % 3 << " -> " << a % 3 * (int)(x + y)
    << " -> " << a % 3 * (int)(x + y) % 2
    << " -> " << a % 3 * (int)(x + y) % 2 / 4
    << " -> " << x + a % 3 * (int)(x + y) % 2 / 4
        << endl;
/*
Dev-C++ TDM-GCC 4.9.2 64-bit
Result:
(int)(x + y):7
1 -> 7 -> 1 -> 0 -> 2.5
*/

关于这题为什么是2.5可以从打印看出来,运算部分全部是int型的数据,最后1/4时自然就变成了0,所以最后结果是x+0。

发表于 2018-08-07 12:58:16 回复(2)
强制类型转换的运算优先级比乘除高
发表于 2019-11-28 20:02:28 回复(0)
整型数据相除,还是整型数据。不会有浮点数。
发表于 2019-01-08 16:24:09 回复(0)
后面一波操作猛如虎,因为整型转换,最后其实就是0~所以也就是前面有数值而已啦
发表于 2021-03-29 09:01:26 回复(0)
最后的2.5+1/4,对于1/4为什么没有进行数据类型转换呢
发表于 2023-04-03 20:19:23 回复(0)
最后那块:1/4之后,得到的是0
发表于 2023-01-04 13:34:00 回复(0)
不是2.5加上0.25然后四舍五入的等于2.8吗

发表于 2023-07-16 18:40:04 回复(0)
inta = 7;
floatx = 2.5;
floaty = 4.7;
cout << "(int)(x + y):"<< (int)(x + y) << endl;
cout << a % 3<< " -> "<< a % 3* (int)(x + y)
    << " -> "<< a % 3* (int)(x + y) % 2
    << " -> "<< a % 3* (int)(x + y) % 2/ 4
    << " -> "<< x + a % 3* (int)(x + y) % 2/ 4
        << endl;
/*
Dev-C++ TDM-GCC 4.9.2 64-bit
Result:
(int)(x + y):7
1 -> 7 -> 1 -> 0 -> 2.5
*/

关于这题为什么是2.5可以从打印看出来,运算部分全部是int型的数据,最后1/4时自然就变成了0,所以最后结果是x+0。

发表于 2018-08-07 12:58:16
发表于 2022-09-28 20:18:37 回复(0)
考查运算符优先级
x+a%3*(int)(x+y)%2/4
其中,int强制类型转换 > "%", "/", "*" > “+”
最终为x+0
输出结果保留1位小数,故为2.5
发表于 2021-07-22 23:09:37 回复(0)
主要考察运算符的优先级,特别是算术运算符
发表于 2019-11-27 11:44:33 回复(0)
搞不懂,要看下浮点数运算规则
发表于 2018-08-01 23:58:40 回复(0)