鱼C论坛

 找回密码
 立即注册
查看: 2187|回复: 5

字符串题目求助

[复制链接]
发表于 2018-11-9 21:18:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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

为什么结果不是7.22

为什么结果不是7.22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-9 21:38:08 | 显示全部楼层
常数在int范围之类的 被默认为int型,  也就是说(i-32)*5/9是int型数据之间的运算,得到的结果也会是int 型的值。 可以把常数改成浮点型,整型数与浮点数进行运算操作,就能得到浮点数,像这样   (i-32)*5.0/9,就能得到浮点数的结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-9 21:50:59 | 显示全部楼层
就是说将i变成浮点型后,J就可以得到浮点型的结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-9 22:11:28 | 显示全部楼层
因为你赋值号右边是只有int型运算,就是说即使算出来的结果是7.22也把它转换为整型,即7在赋值给j,所以输出为7.00,如果你在后面乘上float型z=1,就变成7.22啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-10 01:42:45 | 显示全部楼层
本帖最后由 前路 于 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型运算就好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-10 09:41:16 | 显示全部楼层
好的,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-2 22:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表