关于C语言的一个简单计算题!!

#defineS(r)10*r*rmain(){inta=10,b=20,s;s=S(a+b);printf("%d",s);}这题详细咋解?为啥答案不是9000而是32... #define S(r) 10*r*r
main()
{
int a=10,b=20,s;
s=S(a+b);
printf("%d",s);
}
这题详细咋解?为啥答案不是9000而是320呢??
展开
 我来答
百度网友c3d51f1fe
2011-05-25 · 超过13用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:29.2万
展开全部
你用的宏定义,这个s=S(a+b);程序是这样执行的:s=10*a+b*a+b;所以结果是320,而不是9000,。用宏最好加括号,如#define S(r) 10*(r)*(r),这样结果就是9000了,当然我建议还是少用宏定义,有的时候会发生意想不到的错误。这里完全可以用一个内联函数代替。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
clitoriscn
2011-05-25 · TA获得超过3628个赞
知道小有建树答主
回答量:3258
采纳率:0%
帮助的人:1632万
展开全部
#define S(r) 10*r*r
这里改成
#define S(r) 10*(r)*(r)

因为宏不是函数,他只是简单的做了一个替换的工作.比如你写的
S(a+b);
就被替换成 10*a+b*a+b
所以一般写宏的时候,都会把变量(就是你这里面的r)用小括号括起来,这样就不会有这样出乎意料的运算了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wgx13
2011-05-25 · TA获得超过128个赞
知道答主
回答量:51
采纳率:0%
帮助的人:0
展开全部
因为define是简单的替换
s=S(a+b);就等于s=10*a+b*a+b;
代码应该改为:
#define S(r) 10*r*r
main()
{
int a=10,b=20,s;
s=S((a+b));
printf("%d",s);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gold_phonix
2011-05-25
知道答主
回答量:29
采纳率:0%
帮助的人:11.3万
展开全部
在c语言中宏定义只是简单的替换s=S(a+b)=10*a+b*a+b=10*10+20*10+20=320
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
杜茂彦rc
2011-05-25 · TA获得超过1144个赞
知道小有建树答主
回答量:1314
采纳率:100%
帮助的人:1310万
展开全部
s=S(a+b); == s= 10 * a+b * a+b = 10 *10+20*10+20 = 100+200+20 = 320;
应该定义S(r) 为 #define S(r) 10* (r) * (r)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式