C

时间:2016-06-07 01:34:39

标签: c arrays max min

我制作的程序会计算输入array的数字的平均值,同时打印输入array的最小和最大数字,然后计算标准偏差。

我认为我的平均值和标准偏差部分正常工作但是在运行最终测试时我注意到当在数组中输入我的数字时,任何3以上的数字都不会显示在最小数字打印中。

所以例如我可以进入 11,12,13,14,15,16,17,18,19,20 我最多可得到20分,最低分为3分。

知道我为什么会这样做的任何想法。我猜是某些东西限制了这个变量,但我无法看到。

对不起,如果这是一个愚蠢的问题。

谢谢,

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

int main(void)
{
    //variables
    float num[100];
    float average=0;
    float var=0;
    float stand=0;
    float sum=0; 
    float sum1=0;
    int i=0;
    int n=10;
    int min;
    int max;

    //ask user to enter numbers
    printf("Enter 10 numbers\n",n);
    for(i=0; i<n; i++)
    {
        scanf("%f", &num[i]);
    }

    //find average of numbers
    for(i=0; i<n; i++)
    {
        sum = sum + num[i];
    }
    average = sum /(float) n;

    for(i=0; i<n; i++)
    {
        //if greater than max
        if(num[i]>max)
        {
            max = num[i];
        }
    }

    //if smaller than min
    if(num[i]<min)
    {
        min = num[i];
    }

    //calculate standard deviation
    for(i=0; i<n; i++)
    {
        sum1 = sum1 + pow((num[i] - average),2);
    }

    stand = sqrt(sum1/n);

    //print results      
    printf("Average of all numbers  = %.2f\n", average);
    printf("Maximum number          = %d\n", max);
    printf("Minimum number          = %d\n", min);
    printf("Standard deviation      = %.2f\n", stand);

    system("PAUSE");
    return 1;
}

3 个答案:

答案 0 :(得分:2)

此代码不应编译。考虑到它正在运行,我猜你最初是将它们初始化为低于或大于数组中值的值。

基于@samgak在评论中所说的内容:

将此部分代码更改为:

printf("Enter 10 numbers\n",n);
for(i=0; i<n; i++)
{
     scanf("%f", &num[i]);
}
max = min = num[0];   //ADD THIS LINE TO INITIALIZE YOUR MAX AND MIN

答案 1 :(得分:1)

您不能为变量赋值(在其他语言中通常将其实例化为0)。在像C这样的语言中,它是从RAM分配的。 我想到的方式是,你在一个房间里得到了一些空间,但你现在还不知道它在哪里或者里面有什么。只是一些空间,你知道空间的大小是正确的!这并不完全正确,但作为初学者,它很好地掌握了发生的事情。 (至少对我而言)

如果在代码开头将min设置为3,那么请仔细检查代码,并且您认为它在逻辑上是正确的。

您可以做的两件事情是:

min = inf
max = -inf

另一种解决方案是使用您已经知道的值

min = num[0]
max = num[0]

答案 2 :(得分:1)

初始化后

即max = min = num [0];

你需要做一些小改动 即 在for循环中添加if小于min逻辑

例如: 而不是这段代码

for(i=0; i<n; i++)
{
    //if greater than max
    if(num[i]>max)
    {
        max = num[i];
    }
}

//if smaller than min
if(num[i]<min)
{
    min = num[i];
}

使用此代码

for(i=0; i<n; i++)
{
    //if greater than max
    if(num[i]>max)
    {
        max = num[i];
    }

    //if smaller than min
    if(num[i]<min)
    {
        min = num[i];
    }
}

现在,您将获得数组中的最小值和最大值。