分类：电脑/网络-软件
问题：又是一道C语言的题有以下程序：#definef(x)x*xmai 
有以下：#define  f(x)    x*xmain( ) {  int i;    i=f(4+4)/f(2+2);    printf("%d\n",i); }  执行后输出结果是   A   。（A）28  （B）22   （C）16  （D）4麻烦您解的详细点啊！谢谢！
回答：不是吧。。。宏定义是忠实的替换！f(4+4)/f(2+2)应该是4+4*4+4/2+2*2+2=4+16+2+4+2=28＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝如果要是把程序写成这样不知道是不是稍微好理解一点：#define f(x) x*x#define x1 4+4#define x2 2+2main( ){ int i;i=f(x1)/f(x2);printf("%d\n",i);}这个和你原来的程序是等价的。先看f(x1)， 它的替换过程：f(x1) -> x1*x1 -> 4+4*4+4（宏定义的替换一定记得不能想当然的加上括号！！其实这一个式子明白了，后面也就迎刃而解了。）f(x2) -> x2*x2 -> 2+2*2+2但是绝对不能用f(x1)的结果除以f(x2)的结果哦~那就又犯了想当然的给计算式加括号的错误了。实际上，f(x1)/f(x2)才是一个整体。把f(x1)忠实的替换成“4+4*4+4”，再把f(x2)忠实的替换成“2+2*2+2”，得到的式子是“4+4*4+4/2+2*2+2”。下面就是简单的计算了。