关于#define f(x) x*x一道题的理解
#definef(x)x*xmain(){inti;i=f(4+4)/f(2+2);printf(“%d\n”,i);}这道题的答案是多少?改怎么理解,谢谢解答...
#define f(x) x*x
main( )
{ int i;
i=f(4+4)/f(2+2);
printf(“%d\n”,i);
}
这道题的答案是多少?改怎么理解,谢谢解答 展开
main( )
{ int i;
i=f(4+4)/f(2+2);
printf(“%d\n”,i);
}
这道题的答案是多少?改怎么理解,谢谢解答 展开
5个回答
展开全部
我说这是坏脑子的题目,f(x)=x*x
然后告诉学生们,f的变量是不能识别括号的,这是设计者的愚蠢,还给别人学!事实上我们就不 这么用,明知是个坑还去跳,那就不仅仅是设计者的愚蠢了?是盲目跟风的无知。
正常的思路应该是:
((4+4)*(4+4))/((2+2)*(2+2))=4
C++编译器会不会这么干呢?怕是你们想多了,首先f(4+4)里面的+是无法运算的,其二,除以/也是无法运算的,最后运算级也是扯淡的,他考虑了运算级但是把括号干掉了,实际上出来是这玩意:
4+4*4+4/2+2*2+2
我们要合理规避这种运算的错误,而不是盲目跟风,跟着C++编译器设计者跳进这么大一个坑。
然后告诉学生们,f的变量是不能识别括号的,这是设计者的愚蠢,还给别人学!事实上我们就不 这么用,明知是个坑还去跳,那就不仅仅是设计者的愚蠢了?是盲目跟风的无知。
正常的思路应该是:
((4+4)*(4+4))/((2+2)*(2+2))=4
C++编译器会不会这么干呢?怕是你们想多了,首先f(4+4)里面的+是无法运算的,其二,除以/也是无法运算的,最后运算级也是扯淡的,他考虑了运算级但是把括号干掉了,实际上出来是这玩意:
4+4*4+4/2+2*2+2
我们要合理规避这种运算的错误,而不是盲目跟风,跟着C++编译器设计者跳进这么大一个坑。
Sievers分析仪
2025-01-06 广告
2025-01-06 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准...
点击进入详情页
本回答由Sievers分析仪提供
展开全部
#define f(x) x*x //宏定义 f(x)=x*x
main( )
{ int i;
i=f(4+4)/f(2+2);
printf(“%d\n”,i);
}
i=f(4+4)/f(2+2);按定义的宏定义展开,但是此宏定义展开时不能自行加括号!
所以 i=4+4*4+4/2+2*2+2;
如果还不能理解 就看下面
按数学方法展开 i=(4+4)*(4+4)/(2+2)*(2+2);
按程序展开
此宏定义展开时不能自行加括号
所以把 i=(4+4)*(4+4)/(2+2)*(2+2);
中括号去掉
即为 i=4+4*4+4/2+2*2+2;
main( )
{ int i;
i=f(4+4)/f(2+2);
printf(“%d\n”,i);
}
i=f(4+4)/f(2+2);按定义的宏定义展开,但是此宏定义展开时不能自行加括号!
所以 i=4+4*4+4/2+2*2+2;
如果还不能理解 就看下面
按数学方法展开 i=(4+4)*(4+4)/(2+2)*(2+2);
按程序展开
此宏定义展开时不能自行加括号
所以把 i=(4+4)*(4+4)/(2+2)*(2+2);
中括号去掉
即为 i=4+4*4+4/2+2*2+2;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将式子用宏展开
i=4+4*4+4/2+2*2+2;
按照先乘除后加减的允许按规则,从左到右计算结果为:
28
i=4+4*4+4/2+2*2+2;
按照先乘除后加减的允许按规则,从左到右计算结果为:
28
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我刚刚才看懂,c语言好反人类,流弊了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是吗?我还以为和函数一样用,回去运行下先。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询