首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言中带有NAN、INFINITY和-INFINITY的冒泡排序

C语言中带有NAN、INFINITY和-INFINITY的冒泡排序
EN

Stack Overflow用户
提问于 2017-03-03 20:07:46
回答 1查看 789关注 0票数 1

我一直在试验冒泡排序代码,因为我最近开始学习C代码的知识。但是,我无法将NAN输入到代码中,以便在构建和运行它时打印出来。对于INFINITY和-INFINITY,我也遇到了同样的问题。但是,当我运行代码并将NAN、INFINITY和-INFINITY作为整数之一输入时,代码可以正常工作。感谢你的帮助,谢谢。

代码语言:javascript
复制
/* 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;
}
EN

回答 1

Stack Overflow用户

发布于 2017-03-10 22:16:18

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

如果NAN值是<><=>===运算符的操作数,则结果将始终计算为false。此外,如果NAN!=运算符的操作数,则结果始终为真。由此可以得出NAN != NAN为真,NAN == NAN为假。

因此,尝试对包含NAN的浮点数列表进行排序不会得到任何有意义的结果。您需要使用isnan函数检查此值,然后忽略它或要求用户输入一个不同的数字。

但是,值-infinf是有序的。您可以对包含这些值的列表进行排序。

使用您现有的代码,我们可以看到inf-inf得到了正确处理:

代码语言:javascript
复制
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并非如此:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42578497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档