任务: 给出一个数组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;
}
答案 0 :(得分:0)
由于这是一个学习练习,我不会编写代码,只是解释:
nmaxelement
和您需要引入的bool haveNegatives
。haveNegatives
设置为“false”c[i]
是否为负数。如果它是非负数,则转到下一个元素(例如,使用continue
语句)。c[i]
为负数,请查看haveNegatives
的当前值:如果设置为true
,则将c[i]
与nmaxelement
进行比较,如果nmaxelement
更大,则更改c[i]
的当前值。haveNegatives
为false
,请将其设为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。
还要考虑到数组没有负面元素。