首页 > 试题广场 >

设有以下宏定义,则执行语句:z=2*(N+Y(5+1));后

[单选题]

设有以下宏定义:

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

则执行语句:

z=2 * (N + Y(5 + 1)) ;
后, z 的值为:


  • 38
  • 42
  • 48
  • 54
推荐
答案:选C
先预处理 z = 2*(N + ((N + 1)*5 + 1)),把N = 3带入得出48
编辑于 2015-01-02 11:30:20 回复(2)
#define N 3
#define Y(n)((N+1)*n)//【注意此处n没有加括号】,所以后面的n并不是(5+1)
z=2*(N+Y(5+1)) =2*(N+(N+1)*5+1)=2*(3+4*5+1)=48
发表于 2015-06-27 19:34:04 回复(7)
宏处理,直接将后面的符号替代前面的符号。
#define N 3
#define Y(n)((N+1)*n)
上面的代码中有两个宏定义,那么直接替换:
z=2*(N+Y(5+1))
=2*(N+(N+1)*5+1)
=2*(3+4*5+1)
=48
这里主要出现错误就是,将5+1提前算出5+1=6,从而将6带进式子中, 导致运算顺序出现错误。因此本体选项为48.这里也提醒我们,如果使用宏定义的话,一定要注意括号!一定要注意括号!一定要注意括号!
编辑于 2017-03-01 09:31:28 回复(3)
宏处理,简单粗暴的替换
发表于 2016-08-18 17:54:17 回复(0)
宏定义直接代替,不能先运算再代替
发表于 2021-03-18 11:57:14 回复(0)
z=2*(N+Y(5+1)) Y只接收了5,所以z=2*(3+5*(3+1)+1) =48 如果z=2*(N+Y((5+1))) =54
发表于 2019-09-17 22:06:44 回复(0)
宏定义=替换位置
发表于 2017-07-21 17:16:58 回复(0)
2*(3+Y(5+1))

Y(5+1) = ((3+1)*5+1)

2*(3+((3+1)*5+1)) = 48
发表于 2017-02-04 15:46:53 回复(0)
<p>淦,脑子里刚开始想着没括号后面算的时候又加上去了</p>
发表于 2021-09-21 23:53:44 回复(0)
先处理y ,Y(5+1)=((N+1)*5+1)
发表于 2021-02-24 13:46:10 回复(0)
注意此处5+1不等价于6
发表于 2020-08-20 21:59:11 回复(0)
<p>n没有带括号所以B不对</p>
发表于 2020-06-18 08:13:48 回复(0)

5+1 代替n

发表于 2019-12-23 19:54:38 回复(0)
带参数的宏定义,要很直接得带入,不要加任何括号
发表于 2019-05-16 08:26:00 回复(0)
n为5+1,替换到表达式中是不会主动加括号的
发表于 2018-12-26 17:37:50 回复(0)
不知道为啥,已经屏蔽好几道这种题,但是还是出现了😞
发表于 2018-07-08 18:13:50 回复(0)