编写函数,解决数组元素增删减改等问题

 

这个题的上一个功能对下一个功能有影响吗?比如插入一个元素后,数组就变了,下一个题是按照变化后的数组来处理还是按照原数组来处理?

我按照第一种情况来写的代码(就是插入一个数据后,用新的数组处理下一个功能),如有帮助,请采纳一下。

#include <stdio.h>

//(1)求和
int sum(int a[],int n)
{
	int i;
	int ss = 0;
	for(i=0;i<n;i++)
		ss += a[i];

	printf("所有元素的和=%d\n",ss);
	return ss;
}
//(2)最大元素及其位置
void Max(int a[],int n, int *max,int* index)
{
	int i = 0;
	*max = a[0];
	*index = 0;
	for(i=1;i<n;i++)
	{
		if(a[i] > *max)
		{
			*max = a[i];
			*index = i;
		}
	}
	printf("最大元素%d,位置:%d\n",*max,(*index)+1);
}
//(3)
void Insert(int a[],int *n,int index,int v)
{
	int i;
	*n = (*n) + 1;
	for(i=(*n)-1;i>=index;i--)
		a[i] = a[i-1];
	a[index-1] = v;
	printf("在第%d个位置插入数据%d后:\n",index,v);
	for(i=0;i<*n;i++)
		printf("%d ",a[i]);
	printf("\n");
}
//(4)
void DeleteEle(int a[],int* n,int index)
{
	int i;
	*n = (*n)-1;
	for (i= index-1;i<(*n);i++)
	{
		a[i] = a[i+1];
	}
	printf("删除第%d个位置的元素后:\n",index);
	for(i=0;i<(*n);i++)
		printf("%d ",a[i]);
	printf("\n");
}

//(5)
void DeleteMin(int a[],int* n)
{
	int i;
	int min = a[0];
	int minindex = 0;
	for(i=1;i<*n;i++)
	{
		if(a[i] < min)
		{
			min = a[i];
			minindex = i;
		}
	}
	//删除最小数
	for(i = minindex;i<*n-1;i++)
		a[i] = a[i+1];
	*n = *n -1;
	printf("删除最小元素后:\n");
	for(i=0;i<(*n);i++)
		printf("%d ",a[i]);
	printf("\n");
}

//(6)
void DeleteAllThree(int a[],int *n)
{
	int i,j;
	for (i=0;i<*n;i++)
	{
		if(a[i] == 33)
		{
			for (j=i;j<*n-1;j++)
			{
				a[j] = a[j+1];
			}
			*n = *n -1;
			i--;
		}
	}
	printf("删除所有33的数据后:\n");
	for(i=0;i<(*n);i++)
		printf("%d ",a[i]);
	printf("\n");
}

int main()
{
	int a[10] ={33,68,33,11,77,33,66,33,99};
	int n = 9;
	int max,maxindex;
	sum(a,n);
	Max(a,n,&max,&maxindex);
	Insert(a,&n,4,98);
	DeleteEle(a,&n,5);
	DeleteMin(a,&n);
	DeleteAllThree(a,&n);
	return 0;
}