【发布时间】:2011-11-30 07:43:59
【问题描述】:
这是从一门 C++ 课程开始,不涉及年级,因为我只是在多年后继续努力记住东西。该类已经到了我们使用指针和动态数组的地步。我试图将数组(或指针)传递给与整数列表上的各种计算有关的不同函数。一些功能正在工作,而另一些则没有。但是我以同样的方式传递它们,我也以同样的方式称呼它们。由于一些函数返回垃圾值,感觉就像我实际上并没有指出我认为我在哪里并且正在工作的函数只是偶然地工作。
在有人有用地建议我应该使用向量而不是数组之前,练习的重点是使用动态分配的数组。
到目前为止,这是我的代码。返回垃圾的是findavg() 和findmedian()。
#include <iostream>
#include <iomanip>
using namespace std;
void getarray(int *a, int &l)
{
int input = 0;
//-1 is not important here, just to make the while loop run
while(input != '-1')
{
cout << "Enter length of the list of numbers: ";
if(!(cin >> input))
{
cout << "Please enter numeric characters only." << "\n";
//show error if they don't enter a number
cin.clear();
//get rid of invalid characters
cin.ignore(10000,'\n');
}
else if(input <= 0)
{
cout << "Please enter a number greater than 0." << "\n";
//show error if they enter a non-positive number
cin.clear();
//get rid of invalid characters
cin.ignore(10000,'\n');
}
else
{
l = input; //input is a positive number
break; //got good input, break out of while loop
}
}
int i;
int x;
cout << "Enter " << l << " integers on one line seperated by spaces.\n";
for( i = 0; i < l && cin >> x; ++i)
{
a[i] = x;
}
}
void printarray(int *a, int &l)
{
int i;
cout << "The array of integers is:\n";
for( i = 0; i < l; ++i)
cout << setw(4) << a[i];
cout << "\n";
}
int findmin(int *a, int &l)
{
int min = 0;
min = a[0];
for(int i = 1; i<l; i++)
{
if(a[i] < min)
min = a[i];
}
return min;
}
int findmax(int *a, int &l)
{
int max = 0;
max = a[0];
for(int i = 1; i<l; i++)
{
if(a[i] > max)
max = a[i];
}
return max;
}
float findavg(int *a, int &l)
{
int total = 0;
total = a[0];
for(int i = 1; i<l; i++)
{
total = total + a[i];
}
return static_cast<float>(total/static_cast<float>(l));
}
float findmedian(int *a, int &l)
{
int max = 0;
int min = 0;
max = findmax(a, l);
min = findmin(a, l);
return static_cast<float>((max + min)/2.0);
}
int main()
{
int length = 0;
int *an_array;
an_array = new int[length];
getarray(an_array, length);
printarray(an_array, length);
cout << "Maximum value in list is: "<< findmax(an_array, length) << "\n";
cout << "Minimum value in list is: "<< findmin(an_array, length) << "\n";
printf("Average is: %10.5f", findavg(an_array, length));
cout << "\n";
printf("Median is: %10.5f", findmedian(an_array, length));
cout << "\n";
delete [] an_array;
return 0;
}
【问题讨论】:
-
你了解
std::vector等吗?人。还是您的教授从动态数组开始? -
我不认为median 和你想的一样。
-
length在为数组分配内存时总是为0!!你需要在getarray中分配内存 -
已经用 std::vector 做了一个练习。对于这个练习,我们被明确告知不要使用向量。
-
@John:很好,至少你的 C++ 课程不是垃圾,因为很多都是从动态数组等开始的。人。在展示标准库之前。 :)
标签: c++ arrays function pointers