2017-03-03 12 views
1

최근에 C 코드에 대한 지식을 얻기 시작하면서 버블 정렬 코드를 실험 해 왔습니다. 그러나 그것을 구축하고 실행할 때 NAN을 코드에 입력 할 수 없습니다. 나는 INFINITY AND -INFINITY와 같은 문제를 안고있다. 그러나 코드는 코드를 실행하고 NAN, INFINITY 및 -INFINITY를 정수 중 하나로 입력 할 때 작동합니다. 덕분에 도움을 주실 수 있습니다.버블 정렬 in C, Nothing, INFINITY AND -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!= 연산자의 피연산자 인 경우 결과는 항상 true입니다. 이로부터 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

당신이 돌아 서서이 질문을 받았다 니 기쁘다. 나는 그것이 왔음을 알았지 만, 지난 주 질문의 '펀치 아웃 (punch-out)'목록에서 일할 시간이 없었습니다. 그리고, 나는'NAN'에 관해서 뭔가 배웠습니다. ('NAN'이 무엇을 나타낼지를 생각할 때 말이죠.) –