gpt4 book ai didi

c - Rank 测试的空分布

转载 作者:行者123 更新时间:2023-11-30 19:39:02 25 4
gpt4 key购买 nike

我需要计算 C 中检验统计量的分布。检验统计量基于等级。因此,我认为我可以使用自然数以及所有可能的不同组合来进行计算,而不是生成观察结果并对它们进行排名。所以我用 C 编写了一段代码。但它没有显示预期的输出,只是我想的一些符号。当我在在线编译器中运行它时,它显示了段错误。请帮我纠正错误。任何建议将不胜感激。以下是我编写的代码。

#include<stdio.h>
#include<conio.h>
void main()
{
int i1,i2,i3,j1,j2,j3,i,k,p,m1,n1,combo1,combo2,combo3;
int fcombo1=0, fcombo2=0, fcombo3=0;
m1=3;
n1=3;
p=1;
int factorial(int n,int r);
for(i1=1;i1<=6;i1++)
for(i2=i1+1;i2<=6;i2++)
for(i3=i2+1;i3<=6;i3++)
for(j1=1;j1<=6;j1++)
if(j1!=i1&&j1!=i2&&j1!=i3)
for(j2=1;j2<=6;j2++)
if(j2!=i1&&j2!=i2&&j2!=i3&&j2>j1)
for(j3=1;j3<=6;j3++)
if(j3!=i1&&j3!=i2&&j3!=i3&&j3>j2)
{
for(i=1;i<=3;i++)
for(k=0;k<=1;k++)
{
if(i==1)
{
combo1=factorial(i-1,1)*factorial(m1-1,p)*factorial(i1-i,p-k)*factorial(n1-i1+i,p+k+1);
fcombo1=fcombo1+combo1;
}
else if(i==2)
{
combo2=factorial(i-1,p)*factorial(m1-1,p)*factorial(i2-i,p-
k)*factorial(n1-i2+i,p+k+1);
fcombo2=fcombo2+combo2;
}
else if(i==3)
{
combo3=factorial(i-1,p)*factorial(m1-1,p)*factorial(i3-i,p-
k)*factorial(n1-i3+i,p+k+1);
fcombo3=fcombo3+combo3;
}
printf("%3d%3d%3d%3d%3d%3d%3d%3d%3d\n",i1,i2,i3,j1,j2,j3,
fcombo1,fcombo2,fcombo3);
}
}
getch();
}

int factorial(int n,int r)
{
if(n<r)
return(0);
else if(n==r)
return(1);
else if(r==1)
return(n);
else
return(factorial(n-1,r)+factorial(n-1,r-1));
}

输出:

1  2  3  4  5  6  0  0  0                                                                                                                                                     
1 2 3 4 5 6 0 0 0
1 2 3 4 5 6 0 0 0
1 2 3 4 5 6 0 2 0
1 2 3 4 5 6 0 2 0
1 2 3 4 5 6 0 2 4
1 2 4 3 5 6 0 2 4
1 2 4 3 5 6 0 2 4
1 2 4 3 5 6 0 2 4
1 2 4 3 5 6 0 4 4
1 2 4 3 5 6 0 4 8
Segmentation fault

最佳答案

首先,你设计程序的方式使用了 10 层 for 循环,这样做通常是一个糟糕的主意,想想如何重构它。

其次,对于具体问题,它在于factorial函数,如果r小于0,例如对于 factorial(1, 0) 的情况,该函数将无限递归,因为没有一个终止条件匹配。结果,由于函数中的堆栈溢出,程序因段错误而中止。所以根据你需要如何计算,在函数中添加终止条件,例如:

int factorial(int n,int r)
{
if(n<r)
return(0);
else if(n==r)
return(1);
else if(r<=1)
return(n);
else
return(factorial(n-1,r)+factorial(n-1,r-1));
}

or

if (r <= 0) abort(); // this should never happen

关于c - Rank 测试的空分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37066444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com