C语言:有一个已排好序的数组,要求删除一个数后,还按原来的规律排好

如题所述

#include"stdio.h"
void del(int *a,int x,int n)//删除数组a中第x个数,n是数组大小
{
int i;
for(i=0;i<n;i++)
{
if((i+1)==x)
{
for(int j=i;j<n-1;j++)
a[j]=a[j+1];
break;
}
}
}
void main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int i;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
del(a,4,10);
for(i=0;i<9;i++)
printf("%d ",a[i]);
printf("\n");
}

追问

能不能弄的一行一行的,这样看起来有点乱。

追答

什么一行一行的?

追问

就是往电脑上不太好输

追答

你是要输代码么?直接复制就可以了

追问

嗯,输代码

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-31

/*

12 23 34 45 56 67 78 89 90

12 34 45 56 67 78 89 90

Press any key to continue

*/

#include <stdio.h>
#include <stdlib.h>

//删除第一个等于Num的数组元素,成功返回1,否则返回0
int EraseNum(int a[],int n,int num) {
int i,j;
for(i = 0; i < n; ++i) {
if(a[i] == num) {
for(j = i; j < n - 1; ++j)
a[j] = a[j + 1];
return 1;
}

}
return 0;
}

void Show(int a[], int n) {
int i;
for(i = 0; i < n; ++i)
printf("%d ",a[i]);
printf("\n");
}

int main(void) {
int a[] = {12,23,34,45,56,67,78,89,90};
int n = sizeof(a)/sizeof(a[0]);
Show(a,n);
int res = EraseNum(a,n,23);
if(res) --n;
Show(a,n);
return 0;
}

第2个回答  2013-05-31
查找可以二分查找,找到后删除,然后后面的往前移动