2016-05-21 67 views
-3

這是我的。我認爲我的代碼是正確的,但是在我給出輸入後它會卡住。但是,如果我刪除除排序和打印升序的其他代碼它的作品。但是,如果沒有,它不起作用。 它堅持在這裏Kolmogrov smirinov test

stuck

#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; 
} 

回答

0

在while循環中,您用於啓動函數d plus和d減去您使用的循環,因爲計數值在循環中沒有變化,所以循環將發生無限循環。它正在進行中並繼續。

+0

感謝Aditya一個愚蠢的錯誤使我的程序失敗。 Thaks爲你提供幫助 –

0

你應該總是從scanf檢查返回值。那就是 - scanf返回匹配項的數目,所以你應該做的:

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; 
      } 
     } 
    } 

等等。

+0

感謝4386427爲您的幫助,但在循環中出現錯誤 –