永发信息网

C的运算符问题

答案:4  悬赏:20  手机版
解决时间 2021-04-26 14:54
  • 提问者网友:末路
  • 2021-04-26 04:05
这里有段代码:#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;有什么区别吗,为什么结果不一样?
最佳答案
  • 五星知识达人网友:躲不过心动
  • 2021-04-26 05:40

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(取整数部分)

全部回答
  • 1楼网友:佘樂
  • 2021-04-26 08:46

暗黑.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  或者强制转换类型以后再做运算

  • 2楼网友:七十二街
  • 2021-04-26 07:07

#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); }

  • 3楼网友:鸽屿
  • 2021-04-26 06:53
上楼说的是错的,*和/的优先级是一样高的,且他们都是从左到右开始运算的。只是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型的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯