首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一道二级考试题,该如何解决

2012-02-23 
一道二级考试题下面程序由源程序文件t4.h和t4.c组成,程序编译运行的结果是_______t4.h源程序如下:#defineN

一道二级考试题
下面程序由源程序文件t4.h和t4.c组成,程序编译运行的结果是_______
t4.h源程序如下:
#define   N   10
#define   f2(x)   (x*N)
t4.c源程序如下:
#include   "stdio.h "
#define   M   8
#define   f(x)   ((x)*M)
#include   "t4.h "
main()
{int   i,j;
i=f(1+1);   j=f2(1+1);
printf( "%d   %d ",i,j);
getch();
}
我算得16,20           答案是16,11
我怎么也想不明白才来问的,请指点一下.

[解决办法]
这个貌似你算错了,呵呵
i=f(1+1);
就是i= (1+1)*8;
j=f2(1+1);
则是j= (1+1*10);
结果当然就是16 11了
[解决办法]
注意看宏定义时的括号
#define f2(x) (x*N)
#define f(x) ((x)*M)
编译时把整个x表达式原封不动搬进去,而不是计算x结果之后才搬进去
[解决办法]
t4.h源程序如下:
#define N 10
#define f2(x) (x*N) /*把这改一下 ((x)*N), 就是楼主想得到的结果*/
[解决办法]
直接用1+1代替x,展开:
f2(1+1) (1+1*N)
f(1+1) ((1+1)*M)
[解决办法]
t4.h源程序如下:
#define N 10
#define f2(x) (x*N)
其实是这样计算的:f2(1+1) 到 (1+1*N) 得到 11

热点排行