首页 > 试题广场 >

下面程序的运

[单选题]
下面程序的运行结果是:
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
main(){
    printf("%d\n", NUM);
}
  • 4
  • 9
  • 8
  • 6
宏定义只是简单的文本替换,(2+1+1)*2+1/2=8
发表于 2016-12-30 23:03:24 回复(8)
宏定义是简单的字符串替换,也就是说 (M+1)*M/2 中的M都是N+1,所以 NUM 等价于(N+1+1)*N+1/2
带入计算,(2+1+1)*2+1/2 = 4*2+0 = 8
发表于 2019-08-19 19:30:22 回复(0)
1/2,表示用整数1除以整数2,因为两者都是整数,其运算结果为0。
如果想使运算结果为小数,可以使用1.0/2,这样计算的结果就可以自动转换为0.5。
发表于 2017-03-26 22:19:00 回复(0)
宏只是单纯的字符替换,别掉坑了
发表于 2017-03-14 15:45:31 回复(4)
不是(2+1+1)*(2+1)/2=6
而是(2+1+1)*2+1/2=8+0=8
宏定义没有括号。
发表于 2022-03-03 20:31:10 回复(0)
宏定义为什么赋值不用=而是用空格隔开?
发表于 2022-02-12 00:50:22 回复(1)
宏定义为单纯的文字替换,(2+1+1)*2+1/2=8
发表于 2019-02-18 20:10:41 回复(0)
宏定义只是简单的文本替换 提防陷阱
发表于 2018-08-07 19:41:33 回复(0)
不要想当然的加上括号,单纯的把M替换成 N+1
发表于 2017-06-02 21:13:52 回复(0)
12/2=8?
发表于 2025-05-30 11:03:50 回复(0)
宏定义没有没有括号
发表于 2023-09-21 11:33:23 回复(0)
看一样为6果断选D,然后错了。。。
发表于 2023-07-29 11:04:16 回复(0)
掉坑里了
发表于 2022-08-09 00:33:43 回复(0)
这道题我把M=N+1看成是一个整体了,所以计算的时候就把M的值先计算成2+1=3,然后再带入计算的。
发表于 2022-07-10 17:37:19 回复(0)
替换再计算
发表于 2022-01-18 16:43:13 回复(0)
宏定义是直接进行文本替换
发表于 2021-11-04 14:14:06 回复(0)
宏定义只是简单的文本替换,不添加括号,也不改变算术优先级
发表于 2021-05-19 19:59:15 回复(0)
单纯的字符变换
发表于 2020-07-28 19:39:19 回复(0)
我曹 被坑了 mmp
发表于 2017-12-29 15:40:50 回复(0)
啊啊啊啊啊啊掉坑了 原式=(2+1+1)*2+1/2=8
发表于 2017-12-25 19:52:10 回复(0)