“-1。#J”:C程序中的奇怪输出

时间:2013-12-01 06:23:27

标签: c output

有些事情我应该说:这是我第一次在这里提问。通常,当我对某些事情有疑问时,我发现它在某处得到了解答(包括我在这个网站上找到了很多答案)。但这一次,我找不到答案,所以如果有,我没有找到,我很抱歉提出已经提出的问题(我知道你们不喜欢它,但我保证我已经搜索过了。

我通过帮助引起另一个人的怀疑来解决这个疑问。好吧,我不知道怎么用英语说这个,但我相信它是:“标准偏差”Standard Deviation on Wikipedia)。这就是该计划的目的。

一个人提出了一个问题,如何做到这一点,它没有工作......我不知道计算标准偏差的公式,但他给了我。但他给的那个是错的。我将展示程序的代码:PasteBin of My Standard Deviation Code

我现在用这种方式似乎正在工作,但我不确定。我把这个解决方案提供给了我求助的人。该计划是对的吗?

但我真正的问题不在于该计划是否正确。代码中有这部分:

sum += pow(v[i] - m,2);

当他给我错误的公式时,它是:

sum += v[i] - m;

你们可以编译错误的代码吗?根据您输入的数字,输出为 -1。#J 。为什么?这是什么意思?

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

int main (void)
{
    int n = 10, i;
    double d, m = 0.0f, sum = 0.0f, v[10];

    for (i = 0; i < n; i++)
    {
        printf ("Inform a real number: ");
        scanf ("%lf",&v[i]);
        m += v[i];
    }

    m /= n;

    for (i = 0; i < n; i++)
        sum += pow(v[i] - m,2);

    d = sqrt (sum/(n-1));

    printf ("The standard deviation of vector v is = %.2lf\n\n",d);

    return 0;
}

3 个答案:

答案 0 :(得分:1)

1.#JMicrosoft's strange way of displaying infinity。这是一个特殊的浮点值,它除以零或数字溢出。

但是,我无法弄清楚为什么你会得到它。您输入了哪些输入会给您带来奇怪的输出?

答案 1 :(得分:0)

m /= n;这是平均值

d = sqrt (sum/(n-1));但为什么这个地方使用n -1,我认为它应该是n

现在为什么输出为-1.#j: 这是因为您输入的浮点数不对(我的意思是您的输入不是浮点数),例如您输入ad,我认为如果输入错误,输出是随机的。

答案 2 :(得分:0)

如果你没有在C99 / 11模式下编译你的程序,那么程序的行为是未定义,你可以得到任何东西。使用double格式说明符打印%f类型数据。

printf ("The standard deviation of vector v is = %.2lf\n\n",d);  
                                                     ^
                                                     | Wrong specifier  

7.21.6格式化输入/输出功能:

  

如果转换规范无效,则行为未定义.282)如果任何参数不是相应转换规范的正确类型,则行为未定义。
  也改变

double d, m = 0.0f, sum = 0.0f, v[10];  

行到

double d, m = 0.0, sum = 0.0, v[10];   

msum属于double类型,无需强制f强制它为float类型。