|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
没错,还是那个抓着 独立性检验 不放的我 。今天我把程序完善了一下,
这是第一版:
- #include <stdio.h>
- int main()
- {
- long long int a;
- long long int b;
- long long int c;
- long long int d;
- long long int n;
- float k2;
-
- printf("欢迎使用心鲜旅人自制独立性检验程序!\n");
- printf("请输入a:");
- scanf("%I64d",&a);
- printf("请输入b:");
- scanf("%I64d",&b);
- printf("请输入c:");
- scanf("%I64d",&c);
- printf("请输入d:");
- scanf("%I64d",&d);
-
- 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));
-
- printf("K2 = %.3f\n",k2);
-
- if (k2 >= 0.455 && k2 < 0.708)
- {
- printf("P(%.3f >= 0.455) = 0.50",k2);
- }
- else if (k2 >= 0.708 && k2 < 1.323)
- {
- printf("P(%.3f >= 0.708) = 0.40",k2);
- }
- else if (k2 >= 1.323 && k2 < 2.072)
- {
- printf("P(%.3f >= 1.323) = 0.25",k2);
- }
- else if (k2 >= 2.072 && k2 < 2.706)
- {
- printf("P(%.3f >= 2.072) = 0.15",k2);
- }
- else if (k2 >= 2.706 && k2 < 3.841)
- {
- printf("P(%.3f >= 2.706) = 0.10",k2);
- }
- else if (k2 >= 3.841 && k2 < 5.024)
- {
- printf("P(%.3f >= 3.841) = 0.05",k2);
- }
- else if (k2 >= 5.024 && k2 < 6.635)
- {
- printf("P(%.3f >= 5.024) = 0.025",k2);
- }
- else if (k2 >= 6.635 && k2 < 7.879)
- {
- printf("P(%.3f >= 6.635) = 0.010",k2);
- }
- else if (k2 >= 7.879 && k2 <10.828)
- {
- printf("P(%.3f >= 7.879) = 0.005",k2);
- }
- else if (k2 >= 10.828)
- {
- printf("P(%.3f >= 10.828) = 0.001",k2);
- }
- else if (k2 >= 0 && k2 < 0.455)
- {
- printf("P(%.3f < 0.455) < 0.50(我也只能这样说了)",k2);
- }
- else
- {
- printf("负的???!!你丫的逗我呢!!!");
- }
-
- return 0;
- }
复制代码
最初,用起来还不错,之后又改了一版:
- #include <stdio.h>
- int main()
- {
- unsigned long long int a;
- unsigned long long int b;
- unsigned long long int c;
- unsigned long long int d;
- unsigned long long int n;
- float k2;
-
- printf("欢迎使用心鲜旅人秘制独立性检验小程序!\n");
- printf("请输入a:");
- scanf("%I64u",&a);
- printf("请输入b:");
- scanf("%I64u",&b);
- printf("请输入c:");
- scanf("%I64u",&c);
- printf("请输入d:");
- scanf("%I64u",&d);
-
- 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));
-
- printf("K2 = %.3f\n",k2);
-
- if (k2 >= 0.455 && k2 < 0.708)
- {
- printf("P(K2 >= 0.455) = 0.50");
- }
- else if (k2 >= 0.708 && k2 < 1.323)
- {
- printf("P(K2 >= 0.708) = 0.40");
- }
- else if (k2 >= 1.323 && k2 < 2.072)
- {
- printf("P(K2 >= 1.323) = 0.25");
- }
- else if (k2 >= 2.072 && k2 < 2.706)
- {
- printf("P(K2 >= 2.072) = 0.15");
- }
- else if (k2 >= 2.706 && k2 < 3.841)
- {
- printf("P(K2 >= 2.706) = 0.10");
- }
- else if (k2 >= 3.841 && k2 < 5.024)
- {
- printf("P(K2 >= 3.841) = 0.05");
- }
- else if (k2 >= 5.024 && k2 < 6.635)
- {
- printf("P(K2 >= 5.024) = 0.025");
- }
- else if (k2 >= 6.635 && k2 < 7.879)
- {
- printf("P(K2 >= 6.635) = 0.010");
- }
- else if (k2 >= 7.879 && k2 <10.828)
- {
- printf("P(K2 >= 7.879) = 0.005");
- }
- else if (k2 >= 10.828)
- {
- printf("P(K2 >= 10.828) = 0.001");
- }
- else
- {
- printf("P(K2 < 0.455) < 0.50(我也只能这样说了)");
- }
-
- return 0;
- }
复制代码
可这一版就崩了,算不出来正确答案。
找了半天找不到bug,我就放弃了,反正第一版能用就行啦。
可后来做了个题,是50 1000 75 1500,算出来是0.000,我就又崩溃了。
这不能是取值问题吧,我都用了long long了啊。大神求解 |
|