【问题标题】:Bubble Sort in C with NAN, INFINITY AND -INFINITY使用 NAN、INFINITY 和 -INFINITY 在 C 中进行冒泡排序
【发布时间】:2017-07-23 12:59:03
【问题描述】:

我一直在试验冒泡排序代码,因为我最近开始了解 C 代码。但是,我无法将 NAN 输入到代码中,以便在构建和运行它时打印出来。我对 INFINITY 和 -INFINITY 有同样的问题。但是,当我运行代码并输入 NAN、INFINITY 和 -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;
}

【问题讨论】:

  • scanf("%d", &n) 读取的字符串与宏非常不同...
  • 将排序分解为一个函数。现在您可以手动设置一个数组并对其进行测试。

标签: c nan infinity


【解决方案1】:

浮点值NAN 相对于其他值是无序的。

如果NAN 值是&lt;&gt;&lt;=&gt;=== 运算符的操作数,则结果将始终计算为假。此外,如果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

【讨论】:

  • 很高兴你回过头来得到这个问题。我已经看到它来了,但上周没有时间处理“打出”问题列表。看,我也倾向于 NAN (当你思考 NAN 代表什么时,这是有道理的)
猜你喜欢
  • 2011-09-08
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
相关资源
最近更新 更多