2017-03-03 37 views
1

我一直在嘗試使用氣泡分類代碼,因爲我最近開始學習C代碼。但是,我無法將NAN輸入到代碼中,以便在構建和運行它時打印出來。我有無限和無窮的問題。但是,該代碼在我運行代碼並將NAN,INFINITY AND -INFINITY作爲整數之一輸入時起作用。幫助將不勝感激,謝謝。用NAN,INFINITY和-INFINITY分類的C中的氣泡

/* Bubble sort code */ 

#include <stdio.h> 
#include <math.h> 

int main() 
{ 
    float array[100], swap; 
    int c, d, n; 

printf("Enter number of elements\n"); 
scanf("%d", &n); 

    printf("Enter %d integers\n", n); 

    for (c = 0; c < n; c++) 
     scanf("%f", &array[c]); 

    for (c = 0; c < (n - 1); c++) 
    { 
     for (d = 0; d < n - c - 1; d++) 
     { 
      if (array[d] > array[d + 1]) /* For decreasing order use < */ 
      { 
       swap = array[d]; 
       array[d] = array[d + 1]; 
       array[d + 1] = swap; 
      } 
     } 
    } 

    printf("Sorted list in ascending order:\n"); 

    for (c = 0; c < n; c++) 
     printf("%f\n", array[c]); 

    return 0; 
} 
+0

的scanf( 「%d」,&N)讀取一個字符串這是一個非常不同的宏... –

+0

分類成一個函數。現在您可以手動設置陣列並對其進行測試。 –

回答

1

浮點值NAN相對於其他值是無序的。

如果NAN值是一個操作數的<><=>=,或==運營商,其結果將總是爲false。另外,如果NAN!=運算符的操作數,則結果將始終爲真。由此得出NAN != NAN爲真,並且NAN == NAN爲假。

因此,您將無法獲得任何有意義的結果,試圖對包含NAN的浮點數列表進行排序。您需要使用isnan函數檢查此值,並忽略它或要求用戶輸入不同的數字。

然而,這些值-infinf是有序的。您可以對包含這些值的列表進行排序。

使用現有的代碼,我們可以看到,inf-inf得到妥善處理:

Enter number of elements 
5 
Enter 5 integers 
3.5 
infinity 
2.9 
9 
-infinity 
Sorted list in ascending order: 
-inf 
2.900000 
3.500000 
9.000000 
inf 

NAN是不是:

Enter number of elements 
6 
Enter 6 integers 
8.4 
7.5 
nan 
6.7 
3.5 
4.4 
Sorted list in ascending order: 
7.500000 
8.400000 
nan 
3.500000 
4.400000 
6.700000 
+0

很高興你回過頭來,並得到了這個問題。我看到它過來了,但是上週這個問題沒有時間去處理。看看,我也對「NAN」(當你思考'NAN'代表什麼是有意義的) –