《程序设计基础-c语言》杨莉 刘鸿翔
ISBN-978-7-03-032903-5
p112
习题4
3.在一个从小到大排列的数组中查找x,若x存在则将其删除,若不存在则将其添加。使修改后的数组仍然有序,并输出在屏幕上。
/*
基本思想:
定义一个可存储8位数字的数组,实际长度9位
删除数组,只需要把a[i]后一位向前赋值覆盖(用j循环)
输出时a[0]-a[8]
添加数组,先判断x是否比数组中的所有元素大,大,则把x赋值到最后
否则,循环判断(此时用j循环),如果数组其中的一个元素大于x,
就从此时a[j]向后赋值覆盖,循环结束后,再把x赋值给a[i],
最后输出a[0]-a[9]
*/
#include<stdio.h>
int main(void)
{
int a[9]={12,23,34,45,56,67,78,89};//定义一个包含a[0]-a[7]共8位数字的一维数组
int x,i,j;
int flag=0;//判断数组是否需要添加或者删除
printf("输出交换前的数组:");
for(i=0;i<8;i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("输入一个数:");
scanf("%d",&x);
for(i=0;i<8;i++)
{
if(a[i]==x)
{
flag=1;//删除元素
for(j=i;j<8;j++)
{
a[j]=a[j+1];
}
}
}
if(flag==0)// 添加元素
{
if(x>a[7])//如果输入的数字大于a[7]
{
a[8]=x;//把输入的数字放到a[8]
}
else
{
for(i=0;i<8;i++)
{
if(a[i]>=x)
{
for(j=7;j>=i;j--)//i的前一位就是插入点
{
a[j+1]=a[j];//把i到j的j-i个元素向后移一个
}
a[i]=x;
break;
}
}
}
printf("交换后的数组:");
for(i=0;i<9;i++)
{
printf("%d ",a[i]);
}
}
else
{
printf("交换后的数组:");
for(i=0;i<7;i++)
{
printf("%d ",a[i]);
}
}
}