编写C语言程序【,从一个已排序的数组中删去某数后,该数组仍然有序】,,必须要可以运行的呀! 5

 我来答
碧海风云

推荐于2017-08-25 · 碧海风的秘密小据点!
碧海风云
采纳数:909 获赞数:10281

向TA提问 私信TA
展开全部

删除数组中的某个元素,可以采取将删除位置之后的元素依次向前移动一位的办法来实现。

#include <stdio.h>

#define LEN 100 /*数组长度*/
#define elemType int /*元素类型*/


/*打印数组*/
void printArr (elemType arr[], int len) {
int i;
for (i=0; i<len; i++)
printf ("%-4d",arr[i]);
putchar ('\n');
}

/*删除index号元素*/
void delElem (elemType arr[], int *len, int index) {
int i;
for (i=index; i<*len; i++)
arr[i]=arr[i+1];
*len-=1;
}

int main (void) {
elemType arr[LEN] = {1,2,3,4,5,6,7,8,9,10};
int len = 10;
int delIndex = 4; /*删除4号元素*/
int i;

puts ("原数组:");
printArr (arr, len);
putchar ('\n');
puts ("================================================================\n");

delElem (arr, &len, delIndex);
printf ("删除%d号元素后数组:\n",delIndex);
printArr (arr, len);
putchar ('\n');

fflush (stdin); /*清除缓冲区*/
getch (); /*屏幕暂留*/
return 0;
}

运行结果

户哲茂5B
2017-08-25 · TA获得超过817个赞
知道小有建树答主
回答量:781
采纳率:59%
帮助的人:133万
展开全部
#include <stdio.h>
void fun(int *arr,int N,int dat)
{
int i,add=0,num=0;

for(i=0;i<N;i++)
{
if(arr[i]==dat)
{

if(add==0) add = i;
num++;
}

}
if(num>0) 
{
memcpy(arr+add,arr+add+num,(N-add-num)*sizeof(arr[0]));
memset(arr+N-num,0,num*sizeof(arr[0]));
}
}
void main(void)
{
int a[20]={1,2,3,3,5,6,7,8,9};
int i;

  for(i=0;i<9;i++)
  printf("%d  ",a[i]);
  printf("\r\n");

 fun(a,9,3);

  for(i=0;i<9;i++)
  printf("%d  ",a[i]);
  printf("\r\n");
}

int类型数组,假如类型是unsigned char的数组,你就得改程序了,

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
limmea
2017-07-21 · TA获得超过229个赞
知道小有建树答主
回答量:150
采纳率:100%
帮助的人:74.7万
展开全部
完成 建一个cpp文件放代码进去就可以了
//从一个已排序的数组中删去某数后,该数组仍然有序,必须要可以运行的呀!
#include"stdio.h"
#include"conio.h"
#define MAX 100

typedef int datatype ;//默认数组类型是int 其他类型修改这里
int count = 0 ;

void sort(datatype*);
void input(datatype*);
void sdelete(datatype*) ;
void out(datatype*) ;

int main(void)
{
datatype a[MAX] = {0} ;

input(a) ;
sort(a) ;

printf("当前数组为:");
out(a) ;
printf("\n\n按任意键进行删除");
getch();

sdelete(a);

return 0 ;
}

void sort(datatype* data)
{
int i = 0 ;
int j = 0 ;
int temp = 0 ;

for (i = count - 1; i > 0; --i){
for (j = 0; j < i; ++j){

if(data[j+1] > data[j])
{
temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
}

void input(datatype* data)
{
int i = 0 ;
char tempc = 'a' ;
int flag = 0 ;
int tempi = 0 ;
int space=0;

printf("请输入数组 以空格隔开 回车结尾:") ;
fflush(stdin) ;

while((tempc=getchar())!='\n'){
if (tempc==' '){
data[space] = tempi ;
count++ ;
space++;

tempi = 0 ;
flag = 0 ;
}

else{
flag = 1 ;
tempi = tempi*10 + (tempc-48) ; // 将字符数字C转换为实际数字C
}
}

if(flag){//如果回车键之前为非空格,则该数也要存入数组
data[space] = tempi ;
count++ ;
}
}

void out(datatype* data)
{
int i = 0 ;
for(i=0;i<count;i++){
printf("%d ",data[i]) ;
}
}

void sdelete(datatype* data)
{
datatype flag ;
int i = 0 ;
int j = 0 ;
while(1){
printf("\n输入删除的数字 输入555退出:");
fflush(stdin) ;

scanf("%d",&flag) ;
if(flag == 555){
break ;
}
for(i=0;i<count;i++){
if(data[i] == flag){
for(j=i; j<count;j++){
data[j] = data[j+1] ;
count -- ;

printf("\n删除后:");
out(data);
}
}
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友67ef131
2012-11-22 · 超过21用户采纳过TA的回答
知道答主
回答量:120
采纳率:100%
帮助的人:58.9万
展开全部
#include<stdio.h>
void main()
{
int array[10]={1,2,3,4,5,6,7,8,9,10};
int i,m,j;
printf("请插入要删除的元素:\n");
scanf("%d",&m);
for(i=0;i<10;i++)
{
if(array[i]==m)
{for(j=i;j<10;j++)
array[j}=array[j+1];];
}
array[10]=0;
break;
}
for(i=0;i<9;i++)
printf("%3d",array[i]);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飒飒英姿2
2012-11-22 · 超过17用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:40.8万
展开全部
从已排序的数组中删除某数之后难道还会乱序吗?不是肯定还是有序的吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式