ARRAY - 删除最大负面元素

时间:2013-11-16 12:22:26

标签: c++ arrays for-loop

任务: 给出一个数组C(15)。从数组中删除max negative元素。写下它的索引。显示初始和更改的数组。

注意:此代码写入最小的负数元素,即数组中的“-8”。

需要帮助:我需要更改会写出最大负面元素的内容,即数组中的“-5”。

#include <iostream>

using namespace std;

int main()
{
int c[15]= { 1, 2, 3, 4, 5, 6, -5, 8, 9 , 10, -7, 12, -8, 14, 15};
int nmaxelement = c[0];
int nmaxelementplace;
int i;

cout<<"The array is: \n";
for (i=0; i<15; i++)
{
    cout<<c[i]<<" ";
}

for (int i=0; i<15; i++)
if (c[i]<nmaxelement)
{
     nmaxelement = c[i];
            nmaxelementplace = i;
}


cout<<"\nNegative max element is "<<nmaxelement<<endl;
cout<<"Its place: "<<nmaxelementplace<<endl;

int k=nmaxelementplace;
int n=15;

cout<<"Array with the deleted element: "<<endl;

for (int i=k; i<n; i++)
    c[i]=c[i+1];
    n=n-1;
for (int i=0; i<n; i++)
cout<<c[i]<<" ";


return 0;
}

2 个答案:

答案 0 :(得分:0)

由于这是一个学习练习,我不会编写代码,只是解释:

  • 通常,不保证数组具有负面元素。因此,程序应该准备好看到两个结果 - (a)当至少有一个负面元素时,你可以产生所需的输出,(b)当数组中没有负面元素时。
  • 牢记以上内容,您的第二个循环需要保留当前状态的两个部分:您已经拥有的nmaxelement和您需要引入的bool haveNegatives
  • 在第二次循环之前将haveNegatives设置为“false”
  • 在循环内部,首先检查数字c[i]是否为负数。如果它是非负数,则转到下一个元素(例如,使用continue语句)。
  • 如果数字c[i]为负数,请查看haveNegatives的当前值:如果设置为true,则将c[i]nmaxelement进行比较,如果nmaxelement更大,则更改c[i]的当前值。
  • 如果haveNegativesfalse,请将其设为true,并将haveNegatives设为c[i]

当循环结束时,如果haveNegatives包含数组的最高负数元素,true将设置为nmaxelement;如果数组中没有负数,nmaxelement将保持false

或者,您可以将当前最大负数的索引存储在单个变量中,而不是同时保留值和索引。在这种情况下,您可以在循环之前将该索引设置为-1,并对该索引进行条件化,如下所示:

// Come to this point only when c[i] is negative
if (maxNegativeIndex == -1 || c[i] > c[maxNegativeIndex]) {
    maxNegativeIndex = i;
}

答案 1 :(得分:0)

您展示的代码包含多个错误。例如,变量nmaxelementplace未初始化, 这个循环

for (int i=k; i<n; i++)
    c[i]=c[i+1];

尝试访问数组之外​​的内存。

此外,变量名称与其含义不符。例如在这个循环中

for (int i=0; i<15; i++)
if (c[i]<nmaxelement)
{
     nmaxelement = c[i];
            nmaxelementplace = i;

}

搜索最小元素,但包含最小值的变量名称为nmaxelement。

还要考虑到数组没有负面元素。