有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。 我哪写错啦,求解~

#include<stdio.h>voidmain(){inti,j;inta[10]={12,23,34,45,56,67,78,89,92};intx;printf(... #include <stdio.h>
void main()
{
int i,j;
int a[10]={12,23,34,45,56,67,78,89,92};
int x;
printf("putin:\n");
for(i=0;i<9;i++)
printf("%4d",a[i]);
printf("\nputin x:");
scanf("%d",&x);
for(i=0;i<9;i++)
if(a[i]>x)
break;
else
continue;
for(j=8;j>=i;j--)
a[j+1]=a[j];
if(i=10)
a[i-1]=x;
else
a[i]=x;
printf("putout:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
}
展开
 我来答
问明6E
高粉答主

2019-05-17 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.9万
展开全部

#include&lt;stdio.h&gt;

void main(){

/*输出数组各元素*/

int i,key,loc;

int a[10]={1,3,6,9,10,15,16,22,30};

for(i=0;i&lt;9;i++){

printf("%d",a&lt;i&gt;);

}

/*寻找插入位置*/

printf("\n\nPlease intput key:");

scanf("%d",&key);

loc=0;

for(i=0;i&lt;9;i++){

if(a&lt;i&gt;&gt;=key)break;

}

loc=i;

/*逆序向后移动每一个元素,然后插入新元素*/

for(i=8;i&gt;=loc;i--){

a[i+1]=a&lt;i&gt;;//

}

a[loc]=key;

/*输出新数组各元素*/

printf("\nNew array is-----\n");

for(i=0;i&lt;10;i++){//插入一个元素,组数长度增1

printf("%d",a&lt;i&gt;);

}

printf("\n");

}

输入12,输出结果如下:

总结:一组数组,直到找到大于或等于输入数的时候,找到插入数的下标,a[i+1]=a&lt;i&gt;意思是将a&lt;i&gt;的值给a[i+1],往后移一个(插入一个数,后面元素依次往后移动一个)

方法二、

#include&lt;stdio.h&gt;

void main(){

int data,temp,k;

static int a[9]={-10,2,4,8,10,15,25,50};

printf("\nEnter a data:");

scanf("%d",&data);

for(k=8;k&gt;=1;k--){

if(a[k-1]&gt;data)//逆序遍历数组元素,数组元素大于data,该元素就向后移动一位

{

a[k]=a[k-1];

}else{

a[k]=data;//数组元素小于data,把data放到该元素后面

break;

}

}

for(k=0;k&lt;9;k++){

printf("%7d",a[k]);

}

}

两种其实差不多,但是第二种代码量小。

扩展资料:

include用法:

#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。

插入头文件的内容

#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:

1、#include&lt;文件名&gt;

2、#include"文件名"

如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:

#include&lt;math.h&gt;//一些数学函数的原型,以及相关的类型和宏

如果需要包含针对程序所开发的源文件,则应该使用第二种格式。

百度网友021d8e3
2013-02-25 · 超过15用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:38.9万
展开全部
事实上相当于插入排序的一次插入.很简单,思路如下:

for( i=N-1;i>=0; i-- ) //从后向前遍历
{
if( A[i] > x ) //如果当前值比插入值大

A[i+1] = A[i]; //则当前值后移

else

A[i+1] = x; //否则,则将x插入当前值的后面

}

注意到,你要在数组中插入值,必须要有保存数组原有元素和插入元素的空间. 所以你要在已经有10个元素的数组中插入数据,那么你的数组空间至少要比10大
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
推荐于2018-05-15 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3473万
展开全部
/*
putin:
12 23 34 45 56 67 78 89 92
putin x : 40
putout:
12 23 34 40 45 56 67 78 89 92
Press any key to continue
*/
#include <stdio.h>
void main() { int i,j,N = 10;
int a[10] = {12,23,34,45,56,67,78,89,92};
int x;
printf("putin:\n");
for(i = 0;i < N - 1;i++) printf("%d ",a[i]);
printf("\nputin x : ");
scanf("%d",&x);
for(i = 0;i < N - 1;i++) if(a[i] > x) break;
if(i == N - 1) a[N - 1] = x; // 比最后的数还大时,将x直接填到单元N - 1中
else { // 否则
for(j = N - 2 ;j >= i;j--) a[j + 1] = a[j];
a[i] = x;
}
printf("putout:\n");
for(i = 0;i < 10;i++) printf("%d ",a[i]);
printf("\n");
}
追问
能不能解释一下为什么一定要定义一个N=10才行啊?想不明白,谢谢
追答
N是数组长度。
在插入数据前,数组a有9个数,定义为a[10]是为将要插入的数据预留空间,否则会造成内存覆盖,出现问题很难查出的。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式