C ++数组索引

时间:2016-03-10 16:51:32

标签: c++ arrays

所以我在这里有这个简单的程序,我的导师要求进行以下编辑,我看不到它:

  

对不起,您错过了这一点。因为你的所有功能都是   使用从1到n的索引,其中n可以是100,你永远不会使用   数组索引为零的元素。这意味着最大化   您将在数组中使用的值的数量是99.如果用户真的   想要输入100个值,那么你的解决方案将无法正常工作。

     

你能再次修复你的解决方案吗?

 #include <iostream>
using namespace std;
int readnums(int v[]);
void findmaxmin(int v[],int n,int &mi,int &ma);
int findmidsum(int v[],int n,int mi,int ma);
int main()
{
const int ARRAYVALUE=100;
int v[ARRAYVALUE];
int n=readnums(v),mi,ma;
findmaxmin(v,n,mi,ma);
cout<<"Max= "<<ma<<endl;
cout<<"Min= "<<mi<<endl;
cout<<"Middle sum= "<<findmidsum(v,n,mi,ma)<<endl;

}
int readnums(int v[])
{
cout<<"How many numbers to enter: ";
int n=0;

cin>>n;
for(int a=1;a<=n;a++)
{
    cout<<"Enter no. "<<a<<": ";
    cin>>v[a];
}
return n;
}
void findmaxmin(int v[],int n,int &mi,int &ma)
{
ma=v[1];
mi=v[1];
for(int a=1;a<=n;a++)
{
    if(mi>v[a])mi=v[a];
    if(ma<v[a])ma=v[a];
}
}
int findmidsum(int v[],int n,int mi,int ma)
{
int s=0;
for(int a=1;a<=n;a++)
    if(v[a]!=mi && v[a]!=ma)
    s+=v[a];
return s;
}

2 个答案:

答案 0 :(得分:3)

正如我在评论中提到的,您必须从a=0迭代到a<n,而不是从a=1a<=n。但您还必须修改以下行:

ma=v[1];
mi=v[1];

......将成为:

ma=v[0];
mi=v[0];

...或者,正如您所提到的,最大计算中断(因为当数组中只有一个索引时v[1]不存在)。

这是完整的更新代码:

#include <iostream>
using namespace std;
int readnums(int v[]);
void findmaxmin(int v[],int n,int &mi,int &ma);
int findmidsum(int v[],int n,int mi,int ma);
int main()
{
  const int ARRAYVALUE=100;
  int v[ARRAYVALUE];
  int n=readnums(v),mi,ma;
  findmaxmin(v,n,mi,ma);
  cout<<"Max= "<<ma<<endl;
  cout<<"Min= "<<mi<<endl;
  cout<<"Middle sum= "<<findmidsum(v,n,mi,ma)<<endl;
}

int readnums(int v[])
{
  cout<<"How many numbers to enter: ";
  int n=0;

  cin>>n;
  for(int a=0;a<n;a++)
  {
    cout<<"Enter no. "<<a+1<<": ";
    cin>>v[a];
  }
  return n;
}

void findmaxmin(int v[],int n,int &mi,int &ma)
{
  ma=v[0];
  mi=v[0];
  for(int a=0;a<n;a++)
  {
    if(mi>v[a])mi=v[a];
    if(ma<v[a])ma=v[a];
  }
}

int findmidsum(int v[],int n,int mi,int ma)
{
  int s=0;
  for(int a=0;a<n;a++) {
    if(v[a]!=mi && v[a]!=ma)
    s+=v[a];
  }
  return s;
}

您可以在此处测试上述代码:http://cpp.sh/6ogo

答案 1 :(得分:0)

你的数组包含100个int,因此如果输入的n大于99,你的程序可能会崩溃。

int main()
{
const int ARRAYVALUE=101;
int v[ARRAYVALUE];
int n=readnums(v),mi,ma;
findmaxmin(v,n,mi,ma);
cout<<"Max= "<<ma<<endl;
cout<<"Min= "<<mi<<endl;
cout<<"Middle sum= "<<findmidsum(v,n,mi,ma)<<endl;

}
int readnums(int v[])
{
cout<<"How many numbers to enter: ";
int n=0;
Do{
cout << "Enter a number in the range 1 - 100 :" << endl
cin>>n;
}
while (n > 100 || n < 1);
for(int a=1;a<=n;a++)
{
    cout<<"Enter no. "<<a<<": ";
    cin>>v[a];
}
return n;
}

固定解决方案,因此用户可以输入100个值,您的数组包含101个整数。