请高手解答C语言问题,谢谢!

#defineX5#defineYX+1#defineZY*X/2main(){inta;a=Y;printf("Z=%d,a=%d\n",Z,a);}执行结果为:... #define X 5
#define Y X+1
#define Z Y*X/2
main( )
{int a; a=Y;
printf("Z=%d, a=%d\n", Z, a);
} 执行结果为:
展开
 我来答
yjftgzj
2012-02-20
知道答主
回答量:4
采纳率:0%
帮助的人:6992
展开全部
Z = Y*X/2 = X+1*X/2 = 5+1*5/2 = 5 + 2 = 7
a = Y; a = X + 1 = 6;
注意:
1.如果之前有了宏定义,那么在预处理的时候,只是进行简单的替换。
在这里 Y 被替换为 X+1;其实在宏定义的时候,很容易影响到后面的计算顺序,一个好的习惯就是在宏定义的时候加上(),比如 这里 如果 #define Y (X+1) 那么 Z的值就是 (X+1)*X/2;
2.printf("Z=%d\n",Z); 这里Z 是整形,因此在计算 1*5/2 的时候,计算的结果会舍去小数部分,1*5/2 的结果为 2.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huihzhou
2012-02-20
知道答主
回答量:24
采纳率:0%
帮助的人:28.9万
展开全部
printf第二个Z被替换为X+1*X/2,X是5,所以值为7,而a=6,所以输出为:
Z=7,a=6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28b4182
2012-02-20 · TA获得超过7224个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:2242万
展开全部
#define是宏替换,运行之前是先替换,然后执行的
#define X 5
#define Y X+1
#define Z Y*X/2
main( )
{
int a; a=Y;//a=Y=X+1=5+1=6
printf("Z=%d, a=%d\n", Z, a);
}
Z换成Y*X/2=X+1*X/2=5+1*5/2=5+2=7
输出7,6
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
驀然回首時
2012-02-20 · TA获得超过515个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:185万
展开全部
Z = Y*X/2 = X+1*X/2 = 5+1*5/2 = 7

a = Y = X+1 = 5+1 = 6

记住一点,宏定义只是单纯的替换,所以Y*X/2 = X+1*X/2 != (X+1)*X/2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1009014116123
2012-02-20
知道答主
回答量:24
采纳率:0%
帮助的人:9.8万
展开全部
应该是 Z=7,a=6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式