柯尔莫哥洛夫斯米尔诺夫检验

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 中计数值没有改变等等。