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; // 添加返回值
}

修改说明:

  1. main()函数的返回类型改为int
  2. if(p=n)改为if(p==n),修复条件判断的错误。
  3. a[i+1]=a[i]i+1改为i,修复元素删除的错误。
  4. main()函数末尾添加return 0;语句,表示程序正常结束。

代码分析:

  1. **错误1:**在fun函数中,if(p=n)语句使用了赋值运算符=,应该使用比较运算符==进行比较,否则会导致逻辑错误。
  2. **错误2:**在fun函数中,a[i+1]=a[i]语句将元素向后移动一位,导致最后一个元素没有被覆盖,应该将i+1改为i,将元素向前移动一位,才能正确删除元素。
  3. 错误3:main函数没有定义返回值类型,应该将main()改为int main(),并添加return 0;语句表示程序正常结束。

总结:

通过以上分析和修改,我们成功修复了C语言程序中的错误,并实现了删除数组中指定元素的功能。在程序开发过程中,需要注意代码的逻辑和细节,并进行必要的测试,才能保证程序的正确性和可靠性。

C语言程序改错:删除数组中指定元素

原文地址: https://www.cveoy.top/t/topic/pbmD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录