首页 > 试题广场 >

下面程序的输出结果是

[单选题]
下面程序的输出结果是__________。
#include <iostream>
using namespace std;
#define SQR(A) A*A
int main() { 
    int x = 6, y = 3, z = 2; 
    x /= SQR(y + z) / SQR(y + z); 
    cout << x << endl; 
}
  • 5
  • 6
  • 1
  • 0
推荐
D
宏定义是一个很看重括号的东西
1.#define f(x) x*x   这里f(x+y) 就会被翻译成x+y*x+y 为什么,因为你没有添加括号啊宏定义只是简单的替换不会替你加括号
2.#define f(x) (x)*(x) 这里f(x+y) 就会翻译成(x+y)*(x+y) 就是这么回事
回到题上
上述式子等价为 x/=y+z*y+z/y+z*y+z,再加上/=优先级最低,所以x/=3+6+2/3+6+2 所以x=0
编辑于 2016-01-11 11:35:25 回复(3)
宏替换是直接替换。 
x/=SQR(y+z)/SQR(y+z); 相当于:x/=y+z*y+z/y+z*y+z;
而除等(/=)的优先级低于+、-、*、\。所以先计算/=右边的.而x为int型,结果保留整数位,所以为0,选择D。
发表于 2015-09-05 17:52:43 回复(3)
y+z*y+z/y+z*y+z=3+6+2/3+6+2=17+2/3, 6/(17+2/3)=6/(17+0)=0
编辑于 2018-04-24 19:35:25 回复(5)
不清楚宏,不要乱解释啊,大哥们,注意不要有括号   应该是x/=y+z*y+z/y+z*y+z 这里运算顺序都变了
还有一个考点是/=这个符号,什么时候回变成 x=x/这种  
发表于 2015-09-09 14:39:40 回复(0)
宏就是直接替换,若没有括号,则运算也不应该有括号,所以SQR(y+z)/SQR(y+z)运算结果为17。
发表于 2015-09-17 21:29:46 回复(0)
3+6+2/3+6+2
发表于 2020-06-23 21:11:46 回复(0)
6/17=0
发表于 2016-06-09 12:35:44 回复(0)
把宏展开就可以了。看好: x/=SQR(y+z)/SQR(y+z); 相当于:x/=(y+z)*(y+z)/ (y+z)*(y+z) 从左往右计算,6/=5*5/5*5 -------->=0
发表于 2015-09-05 17:17:45 回复(4)
宏替换是直接替换 SQR(y+z) 等价于:y+z*y+z
发表于 2016-10-27 14:47:22 回复(0)
宏是直接替换,注意A*A没有括号,所以等式替换后也不应该有括号,另外/=的优先级低于加减乘除,所以先算右边
发表于 2023-07-25 23:18:24 回复(0)
x=x/[y+z*y+z/y+z*y+z]
发表于 2023-05-12 11:36:34 回复(0)
为啥我算出来是18?
发表于 2023-03-01 11:03:43 回复(0)
2除以3等于0余2。%取余,/除法(整数相除结果为整数) 2/3=0 5/2=2 2%3=2 5%2=1
编辑于 2021-08-25 08:25:33 回复(0)
要拆开
发表于 2019-09-27 15:32:04 回复(0)
看中括号
发表于 2018-10-04 22:09:52 回复(0)
X  ,是 int 类型,切记 。
发表于 2018-05-28 17:05:03 回复(0)
先算右侧,再算除等
发表于 2017-12-16 16:29:01 回复(0)
此处存在类型转换,计算结果为整型,5/15=0
发表于 2017-08-16 22:57:13 回复(0)
宏定义,要注意括号的重要性,避免错误
发表于 2017-04-20 17:26:29 回复(0)
宏定义只是简单替换,记住了
发表于 2017-04-05 17:35:55 回复(0)
这题要注意 / 法很危险
发表于 2016-08-21 16:42:18 回复(0)