
关于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呢?? 展开
main()
{
int a=10,b=20,s;
s=S(a+b);
printf("%d",s);
}
这题详细咋解?为啥答案不是9000而是320呢?? 展开
6个回答
展开全部
你用的宏定义,这个s=S(a+b);程序是这样执行的:s=10*a+b*a+b;所以结果是320,而不是9000,。用宏最好加括号,如#define S(r) 10*(r)*(r),这样结果就是9000了,当然我建议还是少用宏定义,有的时候会发生意想不到的错误。这里完全可以用一个内联函数代替。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#define S(r) 10*r*r
这里改成
#define S(r) 10*(r)*(r)
因为宏不是函数,他只是简单的做了一个替换的工作.比如你写的
S(a+b);
就被替换成 10*a+b*a+b
所以一般写宏的时候,都会把变量(就是你这里面的r)用小括号括起来,这样就不会有这样出乎意料的运算了.
这里改成
#define S(r) 10*(r)*(r)
因为宏不是函数,他只是简单的做了一个替换的工作.比如你写的
S(a+b);
就被替换成 10*a+b*a+b
所以一般写宏的时候,都会把变量(就是你这里面的r)用小括号括起来,这样就不会有这样出乎意料的运算了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在c语言中宏定义只是简单的替换s=S(a+b)=10*a+b*a+b=10*10+20*10+20=320
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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)
应该定义S(r) 为 #define S(r) 10* (r) * (r)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询