首页 > 试题广场 >

已知宏定义 #define N 3 #define Y(n)

[单选题]

已知宏定义

#define N 3

#define Y(n) ((N+1)*n)

执行语句 z=2*(N+Y(5+1)); 变量 z 的值是()

  • 42
  • 48
  • 54
  • 出错
推荐
B
define是将该位置完全替换,因此直接将n位置替换为5+1而不是将n替换为6
z=2*(N+Y(5+1))=2*(3+(3+1)*5+1)=2*(3+20+1)=48
编辑于 2017-03-17 23:15:09 回复(1)
define语句只是简单的文本替换,不建议使用define来定义函数
发表于 2017-03-19 20:21:44 回复(1)
B  2*(3+(3+1)*5+1)
发表于 2016-12-11 23:02:39 回复(0)
#define Y(n) ((N+1)*n),里面的n用5+1直接替换,而不是6。
z=2*(N+Y(5+1))
  =2*(3+(3+1)*5+1)
  =2*24
  =48
发表于 2017-06-01 15:52:54 回复(0)
宏做的是"记号替换",不存在"语法元素替换"。 比如(5+1),在函数中5+1作为表达式整体。这里是作为"记号替换而已"
发表于 2019-07-03 21:00:46 回复(0)
Y(5+1) = ((3+1)*5+1)=21
(N+21)=24
z = 2*24=48
发表于 2018-09-01 20:52:04 回复(0)
宏定义在编译时候进行替换,不执行语句。
发表于 2018-04-24 16:03:04 回复(0)
define完全替换,n6位置替换为5+1
发表于 2017-08-30 19:21:02 回复(0)
B,将define定义的代码放进去,不加括号
发表于 2017-03-19 12:57:15 回复(0)
B 答案是48,重点在于理解宏的概念,宏只是做了单独的替换。
发表于 2016-12-21 15:23:49 回复(0)
2*(3+4*6)
发表于 2016-12-20 11:15:20 回复(0)
记号名称N和Y(n)也许从未被编译器看见;也许在编译器开始处理源代码之前就被预处理器置换了。所以真正到编译的时候,记号名称对于编译器来说是它后面的表达式。简而言之就是先替换(预处理),再计算(即编译过程)。
发表于 2016-12-11 13:57:27 回复(0)
Y(5+1)中的5+1不能先计算出来。
宏定义的特点就在于替换完表达式后再计算
发表于 2016-12-09 10:10:18 回复(0)
2×(3+4×5+1)
发表于 2016-12-08 13:25:21 回复(0)