我正在尝试学习 C,并且正在尝试编写一段代码来执行以下操作:
- 接受用户输入的自然数 n
- 获取用户输入的 n 个元素并将它们存储在数组 x
- 删除数组x中的所有负数
- 打印新数组,长度为n - 删除元素的数量
这是我的代码:
#include <stdio.h>
int main(void)
{
int n, i, count=0;
double x[1000];
scanf("%d", &n);
for (i=0; i<n; i++)
scanf("%lg", &x[i]);
for (i=0; i<n; i++)
{
if (x[i] < 0)
{
count++;
continue;
};
x[i-count]=x[i];
};
n -= count;
for (i=0; i<n; i++)
printf("%d: %g\n", i, x[i]);
return 0;
}
有人告诉我应该用以下代码替换我的第二个 for 循环:
int j=0
...
for (i=0; i<n; i++)
{
if (x[i] < 0)
{
count++;
continue;
};
if (i > j)
x[j] = x[i];
j++;
};
谁能解释一下为什么后面的代码更好?
最佳答案
如果 i==j
,那么您就是在将一个元素分配给它自己:不是错误,而是(小)浪费精力。
如果你真的想改进这一点,首先要避免将负值放在数组中。
关于c - C语言删除数组中多个元素的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26804057/