一个学习C语言时遇到的问题。

来源:百度知道 编辑:UC知道 时间:2024/06/14 17:40:59
编写一段程序如下:
#include<stdio.h>
void main()
{floatc,F;
scanf("%f",&F);
c=5/9*(F-32);
printf("%.2f\n",c);}
为什么执行时我无论输入任何数都输出0.00,而改成c=5*(F-32)/9后就能输出正确值?

首先你要明白这样一个知识点:就是运算符两边的数如果一个是整型,一个是浮点形,那么其值为浮点型,这是系统自动转换的。如:5.0/9其中5.0是浮点型,9是整型,系统会自动将9转换成浮点型,所以其值为0.555555,如果是5/9因为5和9都是整型,其值也是整型,所以5/9为小于0.555555的整数,也就是0(注意,C语言规定是这样的,不能四舍五入)
然后再来说说你这个题:c=5/9*(F-32) 其执行顺序是先算F-32,由于F是浮点型,故其值为浮点型,然后执行5/9,显然5/9为0,所以无论你输入何值,c都为0;c=5*(F-32)/9其执行顺序为先算F-32,因为F为浮点型,所以F-32的值为浮点型,然后执行5*(F-32),因为F-32为浮点型,所以5*(F-32)的值为浮点型,然后再用5*(F-32)的值除以9,因为5*(F-32)为浮点型,所以5*(F-32)/9就为浮点型,其值就能正确输出。
讲了这么多,希望你能明白!

5/9结果取整数部分
所以5/9=0

5/9结果按int型保存为0,再乘任何值都是0。“5*(F-32)/9”中的F为float型,表达式结果就按float型保存了。
解决办法:
(1)c=(float)5/9*(F-32); //强制类型转换
(2)c=5.0/9*(F-32); //5.0表示float型

把5/9=0 改成5/9.0=0

/和*是同级的运算符,/表示的是除后取整,/在前的话,5/9等于0,所以最后结果必为0.00

5.0/9.0