C中数组的最小值和最大值的问题

Issues with min and max of array in C

我正在编写一个程序,它将计算输入到 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;
}

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

根据@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

您没有为变量赋值(在其他语言中通常实例化为 0)。在像 C 这样的语言中,它是从 RAM 中分配的。 我的想法是,你在一个房间里得到了一些 space,但你不知道现在在哪里,也不知道里面有什么。只需一些 space,您就知道 space 的数量是正确的!。这不完全正确,但作为初学者,它可以很好地理解正在发生的事情。 (至少对我来说)

仔细检查代码,如果在代码开头将 min 设置为 3,您会发现它在逻辑上是正确的。

您可以做的两件事是:

min = inf
max = -inf

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

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

初始化后

即最大=最小=num​​[0];

你需要做一些零钱 IE 在for循环中加入if smaller than 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];
    }
}

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