这个题的上一个功能对下一个功能有影响吗?比如插入一个元素后,数组就变了,下一个题是按照变化后的数组来处理还是按照原数组来处理?
我按照第一种情况来写的代码(就是插入一个数据后,用新的数组处理下一个功能),如有帮助,请采纳一下。
#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;
}