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];
}
}
现在您将获得数组中的最小值和最大值。
我正在编写一个程序,它将计算输入到 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];
}
}
现在您将获得数组中的最小值和最大值。