c语言编程,已经从小到大排好的一维9元素数组在插入一个数,按顺序,怎么写程序?谢谢

如题所述

给你个代码,参考一下吧
#include <stdio.h>
void insert( int *a, int *n, const int num )
{
int i,j;
for( i=0;i<*n;i++ )
{
if ( num < a[i] )
break ;
}

for( j=*n;j>i;j-- )
{
a[j]=a[j-1];
}
a[i]=num;
(*n)++;
}
void show( int *a, int n )
{
int i;
for( i=0;i<n;i++ )
printf("%d ", a[i] );
printf("\n");
}
int main()
{
int a[10]={1,3,5,7};
int n=4;
int i;

insert(a,&n,2);
show(a,n);

insert(a,&n,0);
show(a,n);

insert(a,&n,9);
show(a,n);

return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-26
void main(){
int val[9]={8,10,21,32,35,48,57,70,79];
int num[10];
int a,i,j;
printf("请输入一个数:\n");
scanf("%d",&a);
for(i=0;i<9;i++){
if(val[i]>=a){
num[i]=a;
for(j=i+1;j<10;j++){
num[j]=val[j-1];
}
i=10;
}
else{
if(i==8){
num[i]=val[i];
num[9]=a;
}
else
num[i]=val[i];
}
}
}本回答被网友采纳
第2个回答  2014-10-26
插入数组的新数位置可知吗?追问

比如原来是012356789现在输入四,就成了0123456789

追答

那我理解不是排序问题,是搜索插入点的问题

追问

九个数变成十个

所以,怎么写程序。。

追答

插入新数时,从前向后遍历数组元素,if(x>=a[i] & x <=a[i+1])就插入在i+1这个位置即可

& -> &&

追问

这个元素数变了啊,怎么输出新的数组

怎么写就插入这个位置

追答

严格的考虑这个问题的话,需要考虑,1,所有元素都比插入数小,2,所有元素都等于插入数,3,元素中等于元素个数大于1, 4元素中有一个元素等于插入数,5,数组所有元素都大于插入数

i+1到结尾的元素,按照从后到前的顺序向后移动一个位置,然后把新数插入到i+1

追问

我有思路,没程序

追答

原题发给我,我帮你写

追问

接下来怎么办

追答

只需要输出时把插入数放在合适的位置即可?

追问

追答

看来需要插入进去

然后在输出

追问

所以,程序呢

追答

int x = 0;
int a[10] = {x};
int i;
int n = -1;
//搜索插入位置
for(i=1;i= a[i] && x a[1]){
n = sizeof(a);
}else if(x < a[sizeof(a) - 1]){
n = 0;
}
}
//蒋输入位置前的所有元素前移一个位置
for(i=1; i<sizeof(a); i++){
if(i < n){
a[i-1] = a[i];
}
}
//将新数插入数组
a[i] = x;

//输出所有元素
for(i=0; i<sizeof(a);i++){
printf("%d", a[i]);
}

相似回答