凪翎 2024-04-23 00:27 采纳率: 66.7%
浏览 2
已结题

为什么返回的小数部分是0000000


double AMLK(int  x,int  y)
{;
    return x/y ;
}
double main()
{    
    int   a=0 ,b=0;
    scanf("%d%d",&a,&b);
    printf("%f",AMLK(a,b));
    return 0;
}                //为什么当( a)等于(10),(b) 等于(3)时
                //最后输出的结果为 3.000000000 

img

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-04-23 00:28
    关注

    上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    问题描述:

    在给定的代码中,当 a=10,b=3时,函数 AMLK 返回的小数部分为 0.0000000,导致最终输出的结果为 3.000000000。这个问题是什么原因导致的?

    解决方案:

    这个问题是由于在 C/C++ 中,整数除法会向下取整,即结果只保留整数部分,而没有小数部分。因为在函数 AMLK 中, x 和 y 的类型是 int,因此它们的除法结果也是 int 类型,即整数类型。

    要解决这个问题,可以将函数 AMLK 的返回类型改为 double,并在 return 语句中将 x 和 y 强制转换为 double 类型,计算出结果再返回。修改后的正确代码如下:

    double AMLK(int x, int y) {
        return (double)x / (double)y;
    }
    
    int main() {
        int a = 0, b = 0;
        scanf("%d%d", &a, &b);
        printf("%f", AMLK(a, b));
        return 0;
    }
    

    在这个代码中,函数 AMLK 返回的是 double 类型的浮点数,可以保留小数部分。在 return 语句中,x 和 y 被强制转换为 double 类型,才能进行浮点数除法。

    注意事项:

    • 在进行除法计算时,要考虑被除数为 0 的情况,以避免程序运行时出现异常。
    • 在读取输入时,要进行数据类型匹配,以免出现类型错误。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月23日