字符串题目求助
#include<stdio.h>int main()
{
int i;
float j;
printf("输入一个华氏度:\n");
scanf("%d",&i);
j=(i-32)*5/9;
printf("转换过来的摄氏度%.2f\n",j);
return 0;
}
为何输出的结果是7.00,而不是7.22 常数在int范围之类的 被默认为int型,也就是说(i-32)*5/9是int型数据之间的运算,得到的结果也会是int 型的值。 可以把常数改成浮点型,整型数与浮点数进行运算操作,就能得到浮点数,像这样 (i-32)*5.0/9,就能得到浮点数的结果了 就是说将i变成浮点型后,J就可以得到浮点型的结果了
因为你赋值号右边是只有int型运算,就是说即使算出来的结果是7.22也把它转换为整型,即7在赋值给j,所以输出为7.00,如果你在后面乘上float型z=1,就变成7.22啦 本帖最后由 前路 于 2018-11-10 01:46 编辑
这是一个好问题,我也遇见过。具体是在这样的:
首先你变量申明是没错的,但是一般不这样,为了避免出现你现在这样的错误或者未知错误:
我们一在进行运算时声明的数据类型尽量让他统一,举个例子:
#include<stdio.h>
int main()
{
float i;
float j;
printf("输入一个华氏度:\n");
scanf("%f",&i);
j=(i-32)*5/9; // j=(i-32)*5/9.0;
printf("转换过来的摄氏度%.2f\n",j);
return 0;
}
请注意这里改动了两个地方float i;scanf("%f",&i); 为什么输入要更改,因为c语言比较笨,不会去知道自动分辨%d和%f,只有你说明他才会执行。
j=(i-32)*5/9;这个运算你会发现(i-32)*5/9,每一个数都是int型的,所以编译器就会认为你这是一个int型的运算,所以得到结果(7);然后因为声明j是float型,所以int型在转换成float型(7—>7.00),其中你也知道int型是4个字节float也是4个字节,但是由于存储处理的不一样,当int转float时会将小数点后的自动舍去,同理float转int时也会将后面的舍去并且不会四舍五入。所以才会出现这种错误,为了纠正编译器,你只需要将(i-32)*5/9其中任何一位数加上小数点和零(32.0 || 5.0 || 9.0),让编译器以为你这是float型运算就好了。 好的,谢谢啦
页:
[1]