C语言程序改错:删除数组中指定元素
C语言程序改错:删除数组中指定元素
**题目:**假定整数数列中的数不重复,并存放在数组中。下列给定程序中函数fun的功能是:删除数列中值为x的元素。变量n中存放数列中元素的个数。
原始代码:
#include <stdio.h>
#define N 20
int fun(int *a,int n,int x)
{
int p=0,i;
a[n]=x;
while( x!=a[p] )
p=p+1;
/***********FOUND***********/
if(p=n)
return -1;
else
{
for(i=p;i<n-1;i++)
/***********FOUND***********/
a[i+1]=a[i];
return n-1;
}
}
main()
{
int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;
n=10;
printf("The original data :
");
for(i=0;i<n;i++)
printf("%5d",w[i]);
printf("
Input x (to delete): ");
scanf("%d",&x);
printf("Delete : %d\n",x);
n=fun(w,n,x);
if ( n==-1 )
printf("***Not be found!***\n\n");
else
{
printf("The data after deleted:\n");
for(i=0;i<n;i++)
printf("%5d",w[i]);
printf("\n\n");
}
}
修改后的程序:
#include <stdio.h>
#define N 20
int fun(int *a, int n, int x)
{
int p = 0, i;
a[n] = x;
while (x != a[p])
p = p + 1;
if (p == n) // 将'='改为'=='
return -1;
else
{
for (i = p; i < n - 1; i++)
a[i] = a[i + 1]; // 将'i+1'改为'i'
return n - 1;
}
}
int main()
{
int w[N] = {-3, 0, 1, 5, 7, 99, 10, 15, 30, 90}, x, n, i; // 将'main()'改为'int main()'
n = 10;
printf("The original data : \n");
for (i = 0; i < n; i++)
printf("%5d", w[i]);
printf("\nInput x (to delete): ");
scanf("%d", &x);
printf("Delete : %d\n", x);
n = fun(w, n, x);
if (n == -1)
printf("***Not be found!***\n\n");
else
{
printf("The data after deleted: \n");
for (i = 0; i < n; i++)
printf("%5d", w[i]);
printf("\n\n");
}
return 0; // 添加返回值
}
修改说明:
- 将
main()函数的返回类型改为int。 - 将
if(p=n)改为if(p==n),修复条件判断的错误。 - 将
a[i+1]=a[i]的i+1改为i,修复元素删除的错误。 - 在
main()函数末尾添加return 0;语句,表示程序正常结束。
代码分析:
- **错误1:**在
fun函数中,if(p=n)语句使用了赋值运算符=,应该使用比较运算符==进行比较,否则会导致逻辑错误。 - **错误2:**在
fun函数中,a[i+1]=a[i]语句将元素向后移动一位,导致最后一个元素没有被覆盖,应该将i+1改为i,将元素向前移动一位,才能正确删除元素。 - 错误3:
main函数没有定义返回值类型,应该将main()改为int main(),并添加return 0;语句表示程序正常结束。
总结:
通过以上分析和修改,我们成功修复了C语言程序中的错误,并实现了删除数组中指定元素的功能。在程序开发过程中,需要注意代码的逻辑和细节,并进行必要的测试,才能保证程序的正确性和可靠性。
原文地址: https://www.cveoy.top/t/topic/pbmD 著作权归作者所有。请勿转载和采集!