永发信息网

C的运算符问题

答案:4  悬赏:20  手机版
解决时间 2021-04-26 14:54
这里有段代码:#include void main (){ float h,f,x,y; scanf("%f%f",&h,&f); x=2*h-1/2*f; y=f/2.0-h; printf("%f %f\n",x,y);}第六行,x=2*h-1/2*f与 x=2*h-f/2;有什么区别吗,为什么结果不一样?
最佳答案

x=2*h-1/2*f 与 x=2*h-f/2  有区别 先看x是怎么计算的,先是计算2*h,然后计算1/2,再用1/2算的结果*f


问题出在1/2上,这个1/2不是0.5,而是0  为什么是0? 因为1和2都是int型的,int/int=int


x=2*h-1/2*f 就是x=2*h-0*结果就是2*h


而 x=2*h-f/2,结果是x=2*h-f/2 (在f=1的情况下,x=2*h-1/2*f 与 x=2*h-f/2结果相同,但f换成别的值,结果不同,因为x=2*h-f/2表示x=2*h-f/2(取整数部分)

全部回答

暗黑.Cracker回答是对的

问题出在1/2上,这个1/2不是0.5,而是0  为什么是0? 因为1和2都是int型的,int/int=int

x=2*h-1/2*f 就是x=2*h-0*结果就是2*h

对于1/2 你可以写成 1.0/2  或者强制转换类型以后再做运算

#include <stdio.h>

void main () {  float h,f,x,y;  scanf("%f%f",&h,&f);  x=2*h-1/2*f;//这个是运算符优先的问题,*大于/,也就是先算2*f再算/  y=f/2.0-h;  printf("%f %f\n",x,y); }

上楼说的是错的,*和/的优先级是一样高的,且他们都是从左到右开始运算的。只是x=2*h-1/2*f 这里1/2是=0的,因为两个整数运算得到的也是整数。所以这个表达式可以写成x=2*h,而x=2*h-f/2这里的f/2是一个float与int计算,他们都自动转换成double类型,所以最后f/2为double型的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我想知道世界上最恐怖的事情
眼角处黑胎记怎样去除?
关于MP3格式的音乐上传QQ空间。。
拍拍留言问题
健身高手来帮我!怎么让自己的大腿瘦下去!
包一个手机膜多少钱!
加入3GQQ家族后,以后还可以退出家族吗???
QQ农场牧场要麒麟好还是人参娃好?
精美包装我想知道这个在什么地方
天蝎座男生生气了,处女座女生怎么办
有些眼镜架看起来差不多,为什么相差这么大?
怎样才能把QQ群里的人全加为好友?
为什么时间真的能改变一个人啊?
有没有比腾讯还好的聊天软件请推荐给我吧
cf手游黑龙和雷神那个好
推荐资讯
服装生意怎么才能做好啊?
一辈子到底是什么?
益山装修工程有限公司地址在什么地方,想过去
脸上特爱出油怎么办?这个秋季也有好多油喔。
这是一个关于手机充电和USB接口的问题
求 Sorry.Sorry 的歌词(中英都要)
打码赚钱,是干什么呢啊?
七雄争霸中参加过关斩将和勇闯重楼个需要什么
有木有人告诉我这是不是我说的他本人还是??
空间出来新版本了吗?
追溯意思是什么,什么叫全程追溯系统?
VFP中数据完整性规则包括 参照完整性规则 用
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?