C++数组索引

C++ Array indexes

本文关键字:索引 数组 C++      更新时间:2023-10-16

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

对不起,你错过了重点。由于您的所有功能都是 使用从 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;
}

正如我在评论中提到的,您必须从a=0迭代到a<n,而不是从a=1迭代到a<=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

您的数组包含 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 个整数。