关于#define F(n) (n-1)*n的一点问题,小弟谢了!!

来源:百度知道 编辑:UC知道 时间:2024/05/16 01:43:42
#include < iostream.h>
#define F(n) (n-1)*n
#define F2(n) (n-1)*n*(n+1)
void main()
{
int x=1,y=2;
cout<<F(3+x+y)<<endl;
cout<<F2(3+x+y)<<endl;
}
为什么输出来一个是18,一个是30呢?这是为什么,我本来以为30和210的。请详细点讲给我听,小弟谢了!!!
}
我想问一下,究竟
x=1;
y=2;
(3+x+y-1)*3+x+y*(3+x+y+1)这个式子究竟是用什么运算规则的?我想掌握它的方法,不至于出现
#define F2(n) (n-1)*n*(n+1)*(n+2)*(n+3)我又不知怎么算了。
感谢大家了!!

F(3+x+y)---->(3+x+y-1)*3+x+y=(3+1+2-1)*3+1+2=18
F2(3+x+y)--->(3+x+y-1)*3+x+y*(3+x+y+1)=(3+1+2-1)*3+1+2*(3+1+2+1)=30

因为C语言的宏定义只是简单的字符替换。而不是把F(3+x+y)中括号里的值算出来再去替换求解。所以和你预期的 ((3+x+y)-1)*(3+x+y)的结果是不对应的。如果要得到这样的结果需要宏定义:
#define F(n) ((n)-1)*(n)
#define F2(n) ((n)-1)*(n)*((n)+1)

F(3+x+y)---->(3+x+y-1)*3+x+y=(3+1+2-1)*3+1+2=18
F2(3+x+y)--->(3+x+y-1)*3+x+y*(3+x+y+1)=(3+1+2-1)*3+1+2*(3+1+2+1)=30

因为C语言的宏定义只是简单的字符替换。而不是把F(3+x+y)中括号里的值算出来再去替换求解。所以和你预期的 ((3+x+y)-1)*(3+x+y)的结果是不对应的。如果要得到这样的结果需要宏定义:
#define F(n) ((n)-1)*(n)
#define F2(n) ((n)-1)*(n)*((n)+1)
x=1;
y=2;
(3+x+y-1)*3+x+y*(3+x+y+1)这个式子究竟是用什么运算规则的?我想掌握它的方法,不至于出现
#define F2(n) (n-1)*n*(n+1)*(n+2)*(n+3)

http://zhidao.baidu.com/question/11517354.html?si=2

建议找本基础的书仔细看下

上新浪查