所以我正在编写这个程序,将用户输入读入数组,然后找到均值和中位数。我有三个不同的文件,我将在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;
}
答案 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个苹果吗?)。