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型的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯