Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 平均函数返回nan_C_Arrays_Nan - Fatal编程技术网

C 平均函数返回nan

C 平均函数返回nan,c,arrays,nan,C,Arrays,Nan,我制作了这个程序来对数据集进行排序,并显示最大值、最小值、平均值和中值。最初我把所有的东西都放在主界面上,我决定通过创建函数来清理一下。平均函数是周转基金,但在添加了一些之后,返回的值为'nan'中的平均值。有什么建议吗?提前谢谢各位 #include <stdio.h> int findSize(); double findAverage(int size, double num[]); double findMedian(int size, double num[]); voi

我制作了这个程序来对数据集进行排序,并显示最大值、最小值、平均值和中值。最初我把所有的东西都放在主界面上,我决定通过创建函数来清理一下。平均函数是周转基金,但在添加了一些之后,返回的值为'nan'中的平均值。有什么建议吗?提前谢谢各位

#include <stdio.h>

int findSize();
double findAverage(int size, double num[]);
double findMedian(int size, double num[]);
void findLowtoHigh(int size, double num[]);
void findHightoLow(int size, double num[]);

int main()
{
 while(1)
 {
  int size = findSize();

  if(size <= 1)
  {
   return 0;
  }

  double num[size];
  double holder;
  double lowest;
  double highest;
  double average;
  double median;

  fprintf(stdout, "\n"); 

  for(int i = 0; i <= size - 1; i++)
  {
   int j = i+1;
   fprintf(stdout, "Please enter number %d: ", j);
   fscanf(stdin, "%lf", &num[i]);
  }

  if(size > 1)
  {
   for(int y = 0; y < size - 1; y++)
   { 
    for(int k = 0; k < size - 1; k++)
    {
     if(num[k] > num[k+1])
     { 
      holder = num[k];
      num[k] = num[k+1];
      num[k+1] = holder;
     }
    }
   }
  }

  findLowtoHigh(size, num);

  findHightoLow(size, num);

  average = findAverage(size, num);

  median = findMedian(size, num);

  fprintf(stdout, "\n\nLowest Value: %3.4f", num[0]);
  fprintf(stdout, "\nHighest Value: %3.4f", num[size-1]);
  fprintf(stdout, "\n\nAverage Value: %3.4f\n", average);  
  fprintf(stdout, "Median Value: %3.4f", median);

  fprintf(stdout, "\n");
 }

}

int findSize()
{
 int size;

 fprintf(stdout, "\nPlease enter size of the array: ");
 scanf("%d", &size);

 return size;
}

void findLowtoHigh(int size, double num[])
{
 fprintf(stdout, "\nFrom least to greatest: ");

 for(int x = 0; x <= size - 1; x++)
 {
  fprintf(stdout, "%3.2f ", num[x]);
 }
}

void findHightoLow(int size, double num[])
{
 fprintf(stdout, "\nFrom greatest to least: ");

 int reverse = size - 1;

 while(reverse != -1)
 {
  fprintf(stdout, "%3.2f ", num[reverse]);
  reverse--;
 }
}

double findAverage(int size, double num[])
{
 double average;

 for(int a = 0; a <= size - 1; a++)
 {
  average = average + num[a];
 }

 average = average / size;

 return average;
} 

double findMedian(int size, double num[])
{
 double median;

 if(size % 2 == 0)
 {
  median = (num[size/2 - 1] + num[size/2])/2;
 }
 else
 {
  median = num[size/2];
 }

 return median;
}
#包括
int findSize();
双findAverage(整数大小,双数值[]);
双findMedian(int-size,double-num[]);
void findLowtoHigh(整数大小,双数值[]);
void findHightoLow(整数大小,双数值[]);
int main()
{
而(1)
{
int size=findSize();
如果(大小编号[k+1])
{ 
holder=num[k];
num[k]=num[k+1];
num[k+1]=持有人;
}
}
}
}
findLowtoHigh(大小,数量);
findHightoLow(大小、数量);
平均值=findAverage(大小,数量);
中位数=findMedian(大小,数量);
fprintf(标准输出,“\n\n最小值:%3.4f”,数值[0]);
fprintf(标准输出,“\n最大值:%3.4f”,数值[size-1]);
fprintf(标准值,“\n\n平均值:%3.4f\n”,平均值);
fprintf(标准值,“中值:%3.4f”,中值);
fprintf(标准输出,“\n”);
}
}
int findSize()
{
整数大小;
fprintf(stdout,“\n请输入数组的大小:”;
scanf(“%d”,大小(&S);
返回大小;
}
void findLowtoHigh(整数大小,双数值[])
{
fprintf(标准输出,“\n从最小到最大:”;

对于(int x=0;x您必须初始化
average
。更改为

double average=0;

编译你的程序时,要有(温和的)优化,并且所有合理的警告都已打开(
gcc-O-Wall
是Linux上的一个起点,
clang
类似),然后检查(并修复!)编译器的所有投诉。只有这样,你才允许询问'net.

数组中定义为
array[num]
的元素是
array[0]
数组[1]
,…,
数组[num-1]
。您正在访问数组外的一个元素。您的程序中有未定义的行为。请检查循环条件。谢谢!!这很有效。我将一直开始初始化。我想我是从Java过来的,我想我的手握得太多了。出于好奇,我的其他变量(如中值)也是以同样的方式初始化的,没有引起任何问题任何问题,知道为什么吗?我现在已经初始化了所有问题,以确保安全测量,谢谢!@user3457012,因为您正在使用
平均值
(最初是垃圾值)并添加它。在其他情况下,如
中值
,它们总是被赋值(并且不使用垃圾值)。