返回带有void函数的排序数组以查找中位数

时间:2015-02-01 20:15:54

标签: c++ arrays unix void median

所以我正在编写这个程序,将用户输入读入数组,然后找到均值和中位数。我有三个不同的文件,我将在unix中一起编译:
1)stats.h,其中包含我为平均值,中位数和排序函数给出的原型 2)stats.cpp,我应该实现这三个功能,和 3)main.cpp,具有我的主要功能。

到目前为止,我的main()运行正常。我有两个主要问题:

1)我想确保我正在将数组[]及其大小正确地传递给三个函数中的每一个(我在传递数组时有点生疏)。
2)我得到了三个函数的原型(包括void Sort函数),并且我被告知在Median函数中调用Sort函数。

如果我无法在Sort函数中返回已排序的数组(如果有意义的话),我真的不明白如何在Median函数中更新旧数组。

所以这是我的三个文件: 1)stats.h

//not sure if I need to include anything at top
float Mean (const int* array, size_t size);
float Median (int* array, size_t size);
void Sort (int* array, size_t size);

2)stats.cpp

#include <stats.h>  //only include header file with prototypes?
//function to find the mean that should be called by
main()                                         
float Mean (int NewArray[], size_t size)
{                                                                    
   float sum, mean = 0.0;          

   for (int i = 0; i < size; i++)
   {                           
      sum += NewArray[i];                                
   }                                         
   mean = ((float)sum)/size;

   return mean;                                   
}

//function to find median that should be called by main()
float Median (int NewArray[], size_t size);
{//not sure how to call sort (void) function and return new sorted array to median function

    if(size % 2 == 0)                                            
    {                      
      median = (NewArray[size/2] + NewArray[size/2-1])/2.0f;
    }                                               
    else            
    {                                                  
      median = NewArray[size/2];                        
    }                                                                      
 return median;  //return median to main()                 
} 

// void function to sort array in ascending order and called by median()
Sort(int NewArray[], size_t size)                    
{                                               
   for (i = 0; i < size; i++)
   {                                                    
      for(int j = 0; j < size-1; j++)                          
      {                           
         if(NewArray[j] > NewArray[j+1])             
         {
             int temp = NewArray[j+1];                  
             NewArray[j+1] = NewArray[j];            
             NewArray[j] = temp;               
          }
       }
    }
}

3)和main()

#include <iostream>                                
#include <stats.h>                           
#include <stats.cpp>                  

int main()                                      
{                                              
    int input, sum, NumberOfEntries = 0;     
    const int SIZE = 100                      

    int array[SIZE];                               

    std::cout << "Please enter integers ('x' to quit): ";

    for (int i = 0; i < SIZE; i++)    
    {                            
       if (std::cin >> array[i])               
       {                                             
       }
       else                                        
       {                                      
          NumberOfEntries = i;                  
          break;                                    
       }                                                    
    }                                             

    std::cout << "Data as entered: ";                
    for (int i = 0; i < NumberOfEntries; i++)     
       std::cout << array[i] << " ";    

    std::cout << "Mean: " << float Mean (array[SIZE], NumberOfEntries);

    std::cout << "Median: " << float Median (array[SIZE], NumberOfEntries);

    std::cout << "Data after sort: "; //would print out sorted array 

    return 0;                                    
}

1 个答案:

答案 0 :(得分:0)

您应该为数组创建一个同义词(这使得传递更容易):

typedef int DataArray[/* Some size constant*/];

(见StackOverflow question about array typedef

您可以将您的职能声明为:

double Calculate_Mean(const Data_Array array, unsigned int size);
double Calculate_Median(const Data_Array array, unsigned int size);

顺便说一句,除非您需要节省空间,否则请使用double,而不是浮动。 C ++中使用浮点的大多数库都使用double类型。它更准确。

另外,对数量使用unsigned int。我还没有看到一个长度为-5的数组。 unsigned关键字将帮助编译器检查分配给索引和数量的负值(嗯,您可以购买-5个苹果吗?)。