1

我正在尝试创建一个读取数组的代码,找到该数组中的最小元素,然后从数组中的所有其他元素中减去该最小元素并使用这些元素打印一个新数组。

到目前为止,我编写的代码甚至无法编译。这是我所拥有的:

#include <iostream>
#include <iomanip>

using namespace std;

const int SIZE(25);

void read_list(int a[], int&num_ele);
void print_array(const int a[], const int num_ele);
int find_min(const int a[], const int num_ele);
void array_subtract(int x, int&a[], int num_ele) ;



int main()
{
  int num_ele(0);
  int array[SIZE] ;

  read_list(array, num_ele);

  cout<<"Before list: ("<<num_ele<< " numbers): " <<endl;

  print_array(array, num_ele) ;

  min = find_min(array, num_ele) ;

  cout<<"The minimum value = "<<min<<endl;

  array_subtract(min ,array ,num_ele) ;

  cout<<"After list: ("<<num_ele<< " numbers): " <<endl;

  print_array(array, num_ele) ;


  return 0;
}


void read_list(int a[], int&num_ele)
{
  int x(0);

  cout<<"Enter positive numbers (ints) terminated 0: "<<endl;
  cin>>x;

  while(x!=0 && num_ele <= SIZE)
    {
      a[num_ele] = x ;
      num_ele++;
      cin >> x;
    }
}


void print_array(const int a[], const int num_ele)
{


  for(int i=0; i<num_ele; i++)
    {
      if(i<num_ele-1)
    {cout<<a[i]<<", "; }
      else
    {cout<<a[i]<<"."}
    }
}


int find_min(const int a[], const int num_ele)
{
  int x= a[0];
  for(int k=0; k<num_ele; k++)
    {
      if(a[k] < x)
    { x=a[k] ;}
    }

  return x ;
}

void array_subtract(int x, int&a[], int num_ele)
{
  for(int j=0; j<num_ele; j++)
    {
      a[j] = a[j]-x ;
    }
}

当我去编译时,在行

  cout<<"The minimum value = "<<min<<endl;

我收到大约 100 行错误。

我缺少的代码中是否存在一些巨大的错误?为什么会发生这种情况?我想将代码保持在相同的格式(调用函数以获取最终输出)。

谢谢

4

3 回答 3

2

你有3个问题,纠正这些问题后,至少你没有编译错误。

一世。

你传递数组错误:

void array_subtract(int x, int&a[], int num_ele);
                           ^^^^^^^

像下面一样传递它(删除&

void array_subtract(int x, int a[], int num_ele);

ii.

您正在使用变量min而不声明它。像下面这样声明它:

int min;

iii.

;在 function中遗漏了一个分号print_array

cout<<a[i]<<".";
               ^
于 2013-11-04T21:38:35.840 回答
0

您没有定义变量 min 所以编译器在遇到语句时会报告错误

min = find_min(array, num_ele) ;
于 2013-11-04T21:39:43.550 回答
0

除了其他人解决的编译错误......

不要使用数组,而是使用向量(因为从逻辑上讲,数组的大小从 0-SIZE 可变,而向量是可变大小的数组)...

vector<int> v;

接受整数输入,直到输入 0...

for(int n; cin >> n && n != 0;)
    v.push_back(n);

找到最小元素...

auto min = min_element(begin(v), end(v));

打印可以有多种方式...

cout << "Vector: [";
copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
cout << "]\n";

从元素中减去最小值...

transform(v.begin(), v.end(), v.begin(), [min](int n){ return n-min; });

尽可能尝试使用 C++ 标准库,而不是手动滚动循环。它减少了潜在的错误,并且通常更清晰(但并非总是如此......例如,我在上面发布的印刷品并不完全直观地阅读 IMO)

于 2013-11-04T22:20:28.850 回答