写了一个独立性检验方程,可计算结果的小数都是0,为啥自己取整了呢?
代码如下#include <stdio.h>
int main()
{
int a;
int b;
int c;
int d;
int n;
float k2;
a = 10;
b = 50;
c = 20;
d = 30;
n = a + b + c + d;
k2 = n * (a * d - b * c) * (a * d - b * c) / ((a + b) * (c + d) * (a + c) * (b + d));
printf("K2 = %.3f",k2);
return 0;
} 因为 a b c d n 全是整数啊 这样就行了:
#include <stdio.h>
int main()
{
float a;
float b;
float c;
float d;
float n;
float k2;
a = 10;
b = 50;
c = 20;
d = 30;
n = a + b + c + d;
k2 = n * (a * d - b * c) * (a * d - b * c) / ((a + b) * (c + d) * (a + c) * (b + d));
printf("K2 = %.3f", k2);
return 0;
} 本帖最后由 major_lyu 于 2020-2-26 22:50 编辑
因为a,b,c,d,n都是整型数据,因此在计算看k2等号右边时是按照整型数据计算的,小数位已经被舍弃了。只是在赋值的时候进行了默认类型转换,所以小数位是0啊。
在等号后面的表示之前加一个1.0*,告诉编译表达式的计算采用浮点运算就可以了
#include <stdio.h>
int main()
{
int a;
int b;
int c;
int d;
int n;
float k2;
a = 10;
b = 50;
c = 20;
d = 30;
n = a + b + c + d;
k2 = 1.0 * n * (a * d - b * c) * (a * d - b * c) / ((a + b) * (c + d) * (a + c) * (b + d)); //在前边加一个1.0*, 强制将后面的运算转换成浮点数运算就行了
printf("K2 = %.3f",k2);
return 0;
}
页:
[1]