#include<stdio.h>
int main()
{
int arr[9]={11,22,33,44,55,66,77,88,99};
printf("输入一个数字:\n");
int x,t,i;
scanf("%d",&x);
if(x<=arr[0]){
t=0;
}else if(x>=arr[8]){
t=9;
}else{
for(i=0;i<9;i++){
if (x>=arr[i]&&x<=arr[i+1]){
t=i+1;
break;
}
}
}
for(i=8;i>=t;i--){
arr[i+1]=arr[i];
arr[t]=x;
}
printf("插入数字后:\n");
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}
return 0;
}
根据你提供的代码,问题出现在插入数字的位置计算上。
首先,在for循环中比较时,应该将判断条件改为i<8,因为i+1最大为8,否则会出现数组越界的情况。其次,在插入数字时,应该先将原数组后面的数字依次往后移动一个位置,再将x插入t的位置。例如,当输入56时,应该插入到arr[4]的位置,此时t的值为4。因此,需要将arr[5]-arr[8]的数字全部向后移动一位,再将56赋值给arr[4]即可。
修改后的代码如下所示:
#include<stdio.h>
int main()
{
int arr[9]={11,22,33,44,55,66,77,88,99};
printf("输入一个数字:\n");
int x,t,i;
scanf("%d",&x);
if(x<=arr[0]){
t=0;
}else if(x>=arr[8]){
t=9;
}else{
for(i=0;i<8;i++){ // 修改条件为i<8
if (x>=arr[i]&&x<=arr[i+1]){
t=i+1;
break;
}
}
}
for(i=8;i>=t;i--){
arr[i+1]=arr[i]; // 后面的数字全部向后移动一位
}
arr[t]=x; // 将x插入到t的位置
printf("插入数字后:\n");
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}
return 0;
}
输入56后的输出结果为:
输入一个数字:
56
插入数字后:
11 22 33 44 56 55 66 77 88 99
数组长度不够,这个改为 int arr[10]={11,22,33,44,55,66,77,88,99};
int arr[9]={11,22,33,44,55,66,77,88,99};
你的数组长度太小了
int arr[10]={11,22,33,44,55,66,77,88,99, 0};