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,是不是错的。怎么算的 展开
#define A 55
#define B(x) A*x*x
main()
{
int a=1,b=2;
printf("%f",B(a+b));
}
答案是9.5,是不是错的。怎么算的 展开
4个回答
展开全部
答案没有意义,或者说程序就没有意义。
#define实现的宏不是函数,只是相当于复制黏贴而已。
本体里面 B(a+b)实际上等于 A * a + b * a + b = 59
而这里再用双精度浮点数输出(printf里面没有lf,只有f对应double,float类型会提升为double进行输出),其实是格式不匹配,具体会输出什么完全看机器内部的浮点数存储形式和编译器实现,也就是说结果是未定义的,所以答案是错误的。
我的机器32位Win7用GCC编译运行,输出结果是乱码-1.#QNANO
#define实现的宏不是函数,只是相当于复制黏贴而已。
本体里面 B(a+b)实际上等于 A * a + b * a + b = 59
而这里再用双精度浮点数输出(printf里面没有lf,只有f对应double,float类型会提升为double进行输出),其实是格式不匹配,具体会输出什么完全看机器内部的浮点数存储形式和编译器实现,也就是说结果是未定义的,所以答案是错误的。
我的机器32位Win7用GCC编译运行,输出结果是乱码-1.#QNANO
展开全部
答案应该是59吧
预处理器不进行计算,只是x替换成a+b,这点和函数是有区别的;
所以在下面B(a+b)=55*1+2*1+2=59
预处理器不进行计算,只是x替换成a+b,这点和函数是有区别的;
所以在下面B(a+b)=55*1+2*1+2=59
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
宏引用:易搞错,替换后是没有括号的:
55*a+b*a+b
=55*1+2*1+2=59
结果59 ,
但 %f 就不对了, 栈参数就乱了。
55*a+b*a+b
=55*1+2*1+2=59
结果59 ,
但 %f 就不对了, 栈参数就乱了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是什么破程序,我一运行就崩溃
有明显的错误啊,%f是%d才行
改掉之后输出59
%f的会崩溃
有明显的错误啊,%f是%d才行
改掉之后输出59
%f的会崩溃
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询