柯尔莫哥洛夫斯米尔诺夫检验
Kolmogrov smirinov test
这是我的。我认为我的代码是正确的,但在我输入后它卡住了。但是,如果我删除除按升序排序和打印之外的其他代码,它就可以工作。但如果不是,那是行不通的。
它卡在这里
#include <stdio.h>
#include <math.h>
float dplus(float num[], int n);
float dminus(float num[], int n);
float larges(float data[], int n);
int main()
{
printf("Kolmogorov Test\n");
int n;
float dvalue1;
//printf("No. of elements should not be greater than 20.\n");
printf("Enter number of elements to compute for tets: \t");
scanf("%d", &n);
float num[n];
float dp, dn;
for(int i=0; i<n; i++)
{
scanf("%f", &num[i]);
}
//sorting in ascending order
for(int i=0; i<n; i++)
{
for(int j=i+1; j<n; j++)
{
if(num[i]>num[j])
{
float temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
printf("\nNumbers in ascending order is: \t");
for(int i=0; i<n; i++)
{
printf("%0.2f\t",num[i]);
}
dp = dplus(&num[n], n);
dn = dminus(&num[n], n);
if(dp>dn)
{
dvalue1 = dp;
}
else
{
dvalue1 = dn;
}
//float dalphas = 0.05;
float dvalue = 0.565;
if(dvalue1 < dvalue)
{
printf("\n Since D is less tha Dalpha so the data is unformily distributed.");
}
else
{
printf("\nSince D is greater than Dalpha so the data is not uniformily distributed.");
}
return 0;
}
float dplus(float num[], int n)
{
float data[n];
int count=1;
for(int i=0; i<n; i++)
{
while(count<=n)
{
data[i] = ((count/n)-num[i]);
}
}
float lar = larges(&data[n], n);
return lar;
}
float dminus(float num[], int n)
{
float data[n];
int count=1;
for(int i=0; i<n; i++)
{
while(count<=n)
{
data[i] = ((count/n)-num[i]);
}
}
float lar;
lar = larges(&data[n], n);
return lar;
}
float larges(float data[], int n)
{
for(int i=1; i<n; i++)
{
if(data[0]<data[i])
data[0] = data[i];
}
float lar = data[0];
// printf("%f",lar);
return lar;
}
您应该始终检查 scanf
中的 return 值。那就是 - scanf
returns 匹配的项目数,所以你应该这样做:
if (1 != scanf("%d", &n))
{
// Add error handling
}
如果要重复直到输入匹配,请执行:
while(1)
{
printf("Enter number of elements to compute for tets: \t");
if (1 == scanf("%d", &n)) break;
printf("\nIllegal input, try again\n");
}
读取浮点值时同样适用。
也就是说,我不认为这是原因,你的程序卡住了。要调试它,只需添加更多的 printf 语句。示例:
printf("Enter number of elements to compute for tets: \t");
scanf("%d", &n);
printf("Got %d\n", n); // DEBUG PRINT
float num[n];
float dp, dn;
for(int i=0; i<n; i++)
{
scanf("%f", &num[i]);
}
printf("Got all floats\n"); // DEBUG PRINT
//sorting in ascending order
for(int i=0; i<n; i++)
{
printf("Got i = %d\n", i); // DEBUG PRINT
for(int j=i+1; j<n; j++)
{
if(num[i]>num[j])
{
float temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
等等。
在你用来启动函数 d plus 和 d minus 的 while 循环中,你使用了 while 循环,这是一个无限循环,因为在 loop.It 中计数值没有改变等等。
这是我的。我认为我的代码是正确的,但在我输入后它卡住了。但是,如果我删除除按升序排序和打印之外的其他代码,它就可以工作。但如果不是,那是行不通的。 它卡在这里
#include <stdio.h>
#include <math.h>
float dplus(float num[], int n);
float dminus(float num[], int n);
float larges(float data[], int n);
int main()
{
printf("Kolmogorov Test\n");
int n;
float dvalue1;
//printf("No. of elements should not be greater than 20.\n");
printf("Enter number of elements to compute for tets: \t");
scanf("%d", &n);
float num[n];
float dp, dn;
for(int i=0; i<n; i++)
{
scanf("%f", &num[i]);
}
//sorting in ascending order
for(int i=0; i<n; i++)
{
for(int j=i+1; j<n; j++)
{
if(num[i]>num[j])
{
float temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
printf("\nNumbers in ascending order is: \t");
for(int i=0; i<n; i++)
{
printf("%0.2f\t",num[i]);
}
dp = dplus(&num[n], n);
dn = dminus(&num[n], n);
if(dp>dn)
{
dvalue1 = dp;
}
else
{
dvalue1 = dn;
}
//float dalphas = 0.05;
float dvalue = 0.565;
if(dvalue1 < dvalue)
{
printf("\n Since D is less tha Dalpha so the data is unformily distributed.");
}
else
{
printf("\nSince D is greater than Dalpha so the data is not uniformily distributed.");
}
return 0;
}
float dplus(float num[], int n)
{
float data[n];
int count=1;
for(int i=0; i<n; i++)
{
while(count<=n)
{
data[i] = ((count/n)-num[i]);
}
}
float lar = larges(&data[n], n);
return lar;
}
float dminus(float num[], int n)
{
float data[n];
int count=1;
for(int i=0; i<n; i++)
{
while(count<=n)
{
data[i] = ((count/n)-num[i]);
}
}
float lar;
lar = larges(&data[n], n);
return lar;
}
float larges(float data[], int n)
{
for(int i=1; i<n; i++)
{
if(data[0]<data[i])
data[0] = data[i];
}
float lar = data[0];
// printf("%f",lar);
return lar;
}
您应该始终检查 scanf
中的 return 值。那就是 - scanf
returns 匹配的项目数,所以你应该这样做:
if (1 != scanf("%d", &n))
{
// Add error handling
}
如果要重复直到输入匹配,请执行:
while(1)
{
printf("Enter number of elements to compute for tets: \t");
if (1 == scanf("%d", &n)) break;
printf("\nIllegal input, try again\n");
}
读取浮点值时同样适用。
也就是说,我不认为这是原因,你的程序卡住了。要调试它,只需添加更多的 printf 语句。示例:
printf("Enter number of elements to compute for tets: \t");
scanf("%d", &n);
printf("Got %d\n", n); // DEBUG PRINT
float num[n];
float dp, dn;
for(int i=0; i<n; i++)
{
scanf("%f", &num[i]);
}
printf("Got all floats\n"); // DEBUG PRINT
//sorting in ascending order
for(int i=0; i<n; i++)
{
printf("Got i = %d\n", i); // DEBUG PRINT
for(int j=i+1; j<n; j++)
{
if(num[i]>num[j])
{
float temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
等等。
在你用来启动函数 d plus 和 d minus 的 while 循环中,你使用了 while 循环,这是一个无限循环,因为在 loop.It 中计数值没有改变等等。