www.jbmf.net > #DEFinE A(x) x*x A(A(1+1))*2 ,怎么分析??

#DEFinE A(x) x*x A(A(1+1))*2 ,怎么分析??

#define A(x) x*x A(A(1+1))*2这个形式??这个宏函数在C/C++中无法使用吧?中间带空格,并且带递归,虽然定义没问题,可预处理无法完成这样的递归替换吧.如果后面的是调用,这个就很简单了吧,因为宏定义没有括号,那么#define A(x) x*x A(A(1+1))*2就会扩展为:1+1*1+1*1+1*1+1*2结果为6

#include<stdio.h>//#define P(x) x*x*x+1#define P(x) ((x) * (x) *(x)+1) int main() { int a=2; printf("%d\n",P(2));///P(x) x * x *x+1 就是将x替换成2 所以 p(2) = 2*2*2+1 =9,你要是想计算x的立方加1的话就加上括号: ///P(x) ((x) * (x) *(x)+1) 这样,即使是

嗯,对的,失误,我不是高手,只是学过而已,现在看到资料能想起来,嘿嘿!答案为:f(1+2)=1+2*1+2=53. 在宏定义中的形参是标识符,而宏调用中的实参可以是表达式. #define SQ(y) (y)*(y) main(){ int a,sq; printf("input a number: "); scanf

这是一个函数的宏定义,定义INDEX函数:INDEX(A,B)=A & (1 评论0 0 0

#define m(x) x*x*(x+1) main() {int a=2,b=3; printf("%d\n",m(a+b)); } 那么结果是26m(a+b)的展开式是a+b*a+b*(a+b+1),结果是26#define m(x) (x)*(x)*(x+1) main() {int a=2,b=3; printf("%d\n",m(a+b)); } 那么结果是150m(a+b)展开式是(a+b)*(a+b)*(a+b+1)结果是5*5*6=150你的程序中宏定义是错误的,应该是输入时不小心造成的

ma(1+a + b) = 1+ a + b * (1+a +b -1) = 1+1+2 * (1+1+2-1); = 8 宏就是简单替换,用 1+a + b 去替换x#define ma(x) x*(x-1) int main() { int a=1, b=2; printf("%d\n", ma(1+a+b)); return 0; }结果:

上面给的答案是错的,如果你拿到机器上运行一下(我用的是VS2010),结果应该是8!!!MA(1+a+b) = 1+a+b*(1+a+b-1) = 1+1+2*(1+1+2-1) = 2+2*(3) = 2 + 6 = 8

这道题要小心啊,你的宏没加括号,可能得不到你的结果.要想得到值,展开就是啊.m(a+b)等价于a+b*a+b,所以结果等价于a+b*a+b/a+b*a+b = 3+2*3+2/3+2*3+2=17

sum(x)>>>>x+x sum(i)>>>>i+i sum(j)>>>>j+j sum(i)/sum(j)>>>>i+i/j+j a+=sum(i)/sum(j)=>>>>a=a+sum(i)/sum(j)>>>>a=a+i+i/j+j>>>>6+1+1/2+2=6+1+0+2=9

#define是直接替换啊,就是 x直接换成a+1 而不是 (a+1),因为#define中没有(),所以不要任意添加f(a+1) = a+1*a+1*a+1

相关搜索:

网站地图

All rights reserved Powered by www.jbmf.net

copyright ©right 2010-2021。
www.jbmf.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com