一个C语言的初级问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 00:13:53
#include<stdio.h>

int main()
{
float a,b=1;
a=1/6;
printf("%2.3f",a);
}
我想要计算1除以6的值,如果写a=1/6;那结果就是0。000,如果写a=b/6;结果就正确,请问这是什么原因?

那是因为编译将1和6保存为int型,而int/int的返回值是int型的。
对本题而言就是1/6=0.1666取整就是0,然后赋值给a,由于a是float型所以类型转换后就是0.000。
而b/6是float/int,其返回值是float型就是0.1666,这样结果就正确了。

相关知识点
参与运算类型 返回值类型
int/int int
int/float float(VC中是double)
int/double double
int/unsigned int int
对于int/long这类就留给楼主自己验证吧。

你定义b这个变量是float类型的
在计算机计算时候会把b=1转换成b=1.000,6也会转换成6.000,然后把算出的表达式b/6的结果赋给a,进行输出
如果你写1/6那就是2个整数相除,计算后虽然是一个小数,但是计算机会自动靠0取整,然后赋给a,进行输出

1除以6结果是小数,但分子与分母均是整形,所以计算机会将小数点后的数砍掉,变为0,但又要将0赋值给a,而a是浮点数,只好是0.00了

编译器是根据乘除算式中最前面一个的的类型确定结果的类型的,这很重要的

写成1.0/6就好了

1.0/6