首页 > 试题广场 >

以下程序的输出结果是() 。

[单选题]
以下程序的输出结果是() 。
#include <stdio.h>
#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 回复(3)

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)
选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)
本来以为是D,亲测发现是B。惊!
define ,无脑替换,不进行运算
发表于 2019-11-09 17:00:36 回复(1)
define是整体替换不是函数
发表于 2022-02-25 07:34:33 回复(0)
宏不参与计算
发表于 2023-03-09 18:47:52 回复(0)
ADD ( m + n ),即 m + n + m + n *k。
发表于 2022-12-27 18:48:21 回复(0)

B

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

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

所以在该题中

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

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

综上所述,故选B
发表于 2022-06-05 16:12:00 回复(0)
define 宏定义
直接替换在代码中

#define ADD(x) x + x
 int m = 1, n = 2, k = 3, sum;
sum = ADD(m + n) * k;
替换为:
sum=m+n+ m+n * k
     = 1 + 2 + 1+2*3
 = 10

发表于 2022-01-30 16:52:12 回复(0)
m+n+m+n*3
发表于 2022-01-20 22:19:46 回复(0)
答案选B。 宏可以简单理解为替换,题目中的x全部被替换成了m+n m+n+m+n*3=10
发表于 2022-01-13 10:07:37 回复(0)
单纯替换~
发表于 2021-04-03 17:39:20 回复(0)
define,就是蠢蠢的原样替换,定义成替换成什么样就什么样放上去,不做任何运算
发表于 2020-06-12 10:50:44 回复(0)
终于做对了
发表于 2020-04-26 00:12:53 回复(0)

'Define. 无脑使用不进行运算

发表于 2020-04-12 11:14:31 回复(0)
B

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