整型和浮点数之间的转换问题


#include<stdio.h>

int main() {

    printf("%f", 11/ 3);

    return 0;
}

上面这段代码为什么输出0.000000啊,我直觉认为是3.00000.
11/3得到3,然后转换为浮点数3.000000
请问结果为什么是0.00000啊
感谢


#include<stdio.h>
 
int main() {
 
    printf("%d", 11/ 3);
 
    return 0;
}

或者


#include<stdio.h>
 
int main() {
 
    printf("%f", (float)(11.0/ 3));
 
    return 0;
}

该回答引用gpt
在这段代码中,11和3都是整型(int)变量,所以11/3的结果也是整型,即3。接着,printf函数中使用了%f格式符输出3,但是3是整型,当它被传递给printf函数时,会被自动转换为浮点型(double),所以实际上输出的是3.000000的浮点型值,但是由于%f格式符是用来输出浮点型变量的,所以在输出整型值时需要使用%d格式符,同时需要将3强制转换为浮点型,如下所示:

#include<stdio.h>
 
int main() {
 
    printf("%f", (float)11/ (float)3);
 
    return 0;
}

这样就能正确输出3.666667了。

供参考:

#include<stdio.h>
int main() {

    printf("%f\n", 11 / 3); // 11 3 是两个整数, / 符对两个整数做整除运算,得到的也是个整数,所以格式符需用 %d 才有输出
    printf("%d\n", 11 / 3);
    
    printf("\n");

    printf("%f\n", (float)11 / 3); // 两个整数整除通过强制类型转换输出实数结果
    printf("%f\n", 11.0 / 3);// 或者将其中一个整数写成实数的类型
    printf("%f\n", 11 / 3.0);
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^