首页 > 试题广场 > 以下程序的输出结果是() 。
[单选题]
以下程序的输出结果是() 。
          # define  ADD ( x )   x + x 
          main ( ) 
          {  int  m = 1 ,  n = 2 ,  k = 3 ,  sum  ;   
 sum = ADD ( m + n ) * k ;  
 printf ( “ sum = %d \n ” ,  sum ) ; 
          }
  • sum = 9
  • sum = 10
  • sum = 12
  • sum = 18
推荐

答案选B

宏定义:原样替换

ADD ( x ) x + x
sum = ADD ( m + n ) * k

替换结果为

把 m+n 作为 x ,替换得到 m+n+m+n*k

将 m = 1 , n = 2 , k = 3带入得:
1+2+1+2*3 = 10

编辑于 2019-11-05 14:28:10 回复(0)

B

#define是C++语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率。

由于宏定义的优先级别高于其它的运算符(包括+ - * /等)

所以在该题中

先调用ADD ( m + n ),即 m + n +  m + n *k。

由m = 1 , n = 2 ,k = 3得该结果为10,

综上所述,故选B

对于楼上说的printf也会替换成prlong longf是不会的
因为这个#define只会整体的替换
编辑于 2019-11-05 12:19:57 回复(0)
#define宏定义实际上是一种编译命令,类似于替换
因此为m+n+m+n*k=sum=10
故选B
若要(m+n)*k
应为
#define ADD(x) ((x)+(x))
/*
没有
#include<cstdio>
Compile Error
*/
编辑于 2019-11-05 08:10:45 回复(2)
本来以为是D,亲测发现是B。惊!
define ,无脑替换,不进行运算
发表于 2019-11-09 17:00:36 回复(1)
选B。该题考察的带参宏定义的求值。
根据题目宏调用时:用m+n代替宏定义中的x,所以结果ADD(m+n)结果m+n+m+n*3值为sum=1+2+1+2*3=10
编辑于 2019-11-05 06:03:23 回复(4)
B

SUM=m+n+n*k=10
发表于 2019-11-06 11:33:56 回复(0)