2017-03-03 4 views
1

私はバブルソートコードを実験していますが、最近私がCコードを知り始めました。しかし、それをビルドして実行するときにNANをコードに入力することができません。 INFINITY AND -INFINITYと同じ問題を抱えています。しかし、このコードは、コードを実行してNAN、INFINITY、および-INFINITYを整数の1つとして入力すると機能します。助けていただければ幸いです。バブルソートをC言語でNAN、無限大と-INFINITY

/* 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」が何を表しているかを反映すると意味があります) –

関連する問題