有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。 我哪写错啦,求解~
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");
} 展开
#include<stdio.h>
void main(){
/*输出数组各元素*/
int i,key,loc;
int a[10]={1,3,6,9,10,15,16,22,30};
for(i=0;i<9;i++){
printf("%d",a<i>);
}
/*寻找插入位置*/
printf("\n\nPlease intput key:");
scanf("%d",&key);
loc=0;
for(i=0;i<9;i++){
if(a<i>>=key)break;
}
loc=i;
/*逆序向后移动每一个元素,然后插入新元素*/
for(i=8;i>=loc;i--){
a[i+1]=a<i>;//
}
a[loc]=key;
/*输出新数组各元素*/
printf("\nNew array is-----\n");
for(i=0;i<10;i++){//插入一个元素,组数长度增1
printf("%d",a<i>);
}
printf("\n");
}
输入12,输出结果如下:
总结:一组数组,直到找到大于或等于输入数的时候,找到插入数的下标,a[i+1]=a<i>意思是将a<i>的值给a[i+1],往后移一个(插入一个数,后面元素依次往后移动一个)
方法二、
#include<stdio.h>
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>=1;k--){
if(a[k-1]>data)//逆序遍历数组元素,数组元素大于data,该元素就向后移动一位
{
a[k]=a[k-1];
}else{
a[k]=data;//数组元素小于data,把data放到该元素后面
break;
}
}
for(k=0;k<9;k++){
printf("%7d",a[k]);
}
}
两种其实差不多,但是第二种代码量小。
扩展资料:
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:
#include<math.h>//一些数学函数的原型,以及相关的类型和宏
如果需要包含针对程序所开发的源文件,则应该使用第二种格式。
for( i=N-1;i>=0; i-- ) //从后向前遍历
{
if( A[i] > x ) //如果当前值比插入值大
A[i+1] = A[i]; //则当前值后移
else
A[i+1] = x; //否则,则将x插入当前值的后面
}
注意到,你要在数组中插入值,必须要有保存数组原有元素和插入元素的空间. 所以你要在已经有10个元素的数组中插入数据,那么你的数组空间至少要比10大
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]是为将要插入的数据预留空间,否则会造成内存覆盖,出现问题很难查出的。