C语言高手进,一个简单的C语言问题?

来源:百度知道 编辑:UC知道 时间:2024/05/16 18:02:13
有一个C语言题目,程序基本上是这样的:
# define N 3
# define Y(n) ((N+1)*n)
则执行语句:z=2*(N+Y(5+1));后,
z的值为48.
请问:为什么z的值等于48?
(在TC上运行,结果等于48,而且答案也是48)
程序如下:
#include <stdil.h>
#define N 3
#define Y(n) ((N+1)*n)
void main()
{ int z;
z==2*(N+Y(5+1));
printf("%d\n",z);
}

z=2*(3+Y(5+1)),又
Y(5+1)=(3+1)*5+1=21//关键在这里,用"5+1"直接取代(不加括号)n的位置
故z=48
___________
需要注意的是用宏定义的方法是把"5+1"用n取代,而不是想当然的用"(5+1)" 的和取代。课本上相应的部分会有相似的例子。

# define N 3 //定义 N=3
# define Y(n) ((N+1)*n) 定义一个函数Y(n)=((3+1)*n)
z=2*(N+Y(5+1));

z= 2 * ( 3 + Y(6))
= 2 * ( 3 + (3+1)*5+1))
= 2 * ( 3 + 21)
= 48

# define是定义语句,就是定义N=3
下面的是定义 Y(n)=((N+1)*n)
n是变量
z=2*(N+Y(5+1))是计算结果的,Y(5+1)就是n=6了,那么Y(5+1)=(3+1)*6=24
z=2*24=48
就是这样计算出来的,很简单的,明白吧,不明白的话加我QQ
435992251

一、Y(n) ((N+1)*n)
二、z==2*(N+Y(5+1))
问题在于这两行语句。
第一行,Y里面的n是指函数里面的n,注意,函数里面的n并没有打括号,那么,在第二行里面,Y(5+1)就代替了 ((N+1)*5+1),所以结果就是48~ 如果想改变这个结果,就要在第一行的函数里面的n上面加一个括号改变运算顺序.

这个句子根本就是错的!~我用C语言试都试不出来!~一定那里错了!~

请你把完整的题贴出来行吗? 这样怎么看..