首页 > 试题广场 >

以下程序输出值是?

[问答题]
以下程序输出值是?

#include <stdio.h>
#define f(a,b) a+b
#define g(a,b) a*b
int main(int argc, char **argv)
{
int m;
m=2*f(3,g(4,5));
printf("\n m is %d\n",m);
}

推荐
26
发表于 2018-02-23 18:03:39 回复(1)
26。 #define只是单纯的文本替换,文本替换过来则是: m=2*3+4*5
编辑于 2018-03-13 19:06:26 回复(0)
函数宏定义时记得加括号,不加括号就是简单的文本替换,一般使用
#define f(a,b) ((a)+(b)),题目中不带括号,文本替换如下:

#define f(a,b) a+b
#define g(a,b) a*b
2*f(3,g(4,5))

g(4,5)→4*5
f(3,g(4,5))→3+4*5
2*f(3,g(4,5))→2*3+4*5
2*3+4*5 = 26

发表于 2018-04-24 16:20:09 回复(0)
m is 26
发表于 2018-05-11 15:20:28 回复(0)
26
发表于 2018-03-09 14:14:27 回复(0)
初始:46 正确:26 注意预处理定义的函数带入问题
编辑于 2018-02-25 19:35:35 回复(2)
46
发表于 2022-04-20 15:15:45 回复(0)
宏定义只替换,不做计算, m=2*3+g(4,5) m=2*3+4*5=26
发表于 2022-03-06 19:51:17 回复(0)
m = 2 * f ( 3, 4 * 5 )
= 2 * 3 + 4 * 5
=6 + 20
= 26;
发表于 2021-07-25 09:45:56 回复(0)
#define 简单替换,先替换再运算
发表于 2019-04-09 10:40:23 回复(0)
26
发表于 2018-03-18 18:59:05 回复(0)
m is 26
发表于 2018-03-13 15:25:56 回复(0)
46
发表于 2018-03-12 21:17:57 回复(0)
26
define看做简单的文本替换,替换进去后是2*3+4*5,所以是26
发表于 2018-03-11 15:46:24 回复(0)
g(4,5) = 20; f(3,20) = 23; g(2,23) = 46
编辑于 2018-03-09 11:01:55 回复(0)
46
发表于 2018-03-03 14:48:02 回复(0)
46
发表于 2018-03-02 11:16:58 回复(0)
46
发表于 2018-02-26 16:45:05 回复(0)
 m is 46 
发表于 2018-02-26 10:10:07 回复(0)