改正并填空
时间: 2023-07-11 13:10:08 浏览: 59
这段代码存在一个小错误,for循环中删除元素后需要将循环变量i减1以避免漏删。同时,在删除元素后需要将数组长度减1。
改正后的代码如下:
```c++
#include<iostream>
using namespace std;
#define N 10
int main() {
//本题假设数组中顶多存在一个要找的x
int a[N], i, j, x, len = N;
for (i = 0; i < N; i++) //数组赋值
cin >> a[i];
cin >> x; //要删除的数
int flag = 0; //预设标志
for (i = 0; i < len; i++) //依次查找数组中是否有x
if (a[i] == x) //查找
{
flag = 1; //设置找到标志
for (j = i; j < len - 1; j++)
a[j] = a[j + 1]; //后数前移
len--; //数组长度减1
i--; //避免漏删
}
if (flag) //找到了
for (i = 0; i < len; i++)
if (i == 0) cout << a[i];
else cout << " " << a[i];
else //没找到
cout << "Not found " << x;
return 0;
}
```
解释如下:
首先,定义一个长度为N的数组a和循环变量i、j、x、len和标志flag。其中,N表示数组的长度,i和j是循环变量,x是要删除的数,len表示当前数组的长度,flag是一个标志,用于表示是否找到了要删除的数x。
然后,使用for循环依次读入N个数组元素。
再读入要删除的数x,并设置标志flag的初值为0。
接下来,使用for循环依次查找数组中是否存在要删除的数x。如果找到了,就将flag设置为1,然后使用for循环将x后面的元素向前移动一位,最后将数组长度减1并将循环变量i减1以避免漏删。
最后,根据flag的值判断是否找到了要删除的数x。如果找到了,就依次输出删除后的数组元素;如果没找到,就输出提示信息“Not found x”,其中的x是要删除的数。