C语言题目

#include<stdio.h>#defineA55#defineB(x)A*x*xmain(){inta=1,b=2;printf("%f",B(a+b));}答案是... #include <stdio.h>
#define A 55
#define B(x) A*x*x
main()
{
int a=1,b=2;
printf("%f",B(a+b));
}
答案是9.5,是不是错的。怎么算的
展开
 我来答
岁月哪曾斑驳
推荐于2017-10-03 · TA获得超过742个赞
知道小有建树答主
回答量:278
采纳率:50%
帮助的人:350万
展开全部
答案没有意义,或者说程序就没有意义。

#define实现的宏不是函数,只是相当于复制黏贴而已。

本体里面 B(a+b)实际上等于 A * a + b * a + b = 59

而这里再用双精度浮点数输出(printf里面没有lf,只有f对应double,float类型会提升为double进行输出),其实是格式不匹配,具体会输出什么完全看机器内部的浮点数存储形式和编译器实现,也就是说结果是未定义的,所以答案是错误的。

我的机器32位Win7用GCC编译运行,输出结果是乱码-1.#QNANO
Freedog_
2013-02-15 · 超过30用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:71.5万
展开全部
答案应该是59吧
预处理器不进行计算,只是x替换成a+b,这点和函数是有区别的;
所以在下面B(a+b)=55*1+2*1+2=59
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ycsxm
2013-02-15 · TA获得超过3.3万个赞
知道大有可为答主
回答量:1.4万
采纳率:0%
帮助的人:7881万
展开全部
宏引用:易搞错,替换后是没有括号的:
55*a+b*a+b
=55*1+2*1+2=59
结果59 ,
但 %f 就不对了, 栈参数就乱了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
l521088816
2013-02-15 · TA获得超过1772个赞
知道小有建树答主
回答量:780
采纳率:0%
帮助的人:1054万
展开全部
这是什么破程序,我一运行就崩溃
有明显的错误啊,%f是%d才行
改掉之后输出59
%f的会崩溃
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式