题目:一个已排好序的一维数组,输入一个数number,要求按原来 排序的规律将它插入数组中. -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ main( ) {int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; /***********ERROR***********/ for(i=0;i<=10;i++) printf("%5d",a[i]); printf("\n"); scanf("%d",&number); /***********ERROR***********/ end=a[10]; /***********ERROR***********/ if(number>end) a[11]=number; else {for(i=0;i<10;i++) { /***********ERROR***********/ if(a[i]<number) {temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) {temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } for(i=0;i<11;i++) printf("%6d",a[i]); }
时间: 2023-07-07 11:44:27 浏览: 46
这段程序的问题在于:
1. 没有声明头文件,应该加上 `#include <stdio.h>`。
2. 数组 `a` 的大小只有 11,不能直接在数组末尾插入一个新元素。可以将数组大小扩大到 12,或者将插入操作放在 for 循环中,这样就可以不用增加数组大小。
3. 变量 `end` 的值应该是数组最后一个元素 `a[9]`,而不是 `a[10]`。
4. 在插入数字时,应该将数组中后面的元素依次后移,而不是直接将后面的元素覆盖掉。
修改后的代码如下:
```
#include <stdio.h>
main( ) {
int a[12]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
for(i=0;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
scanf("%d",&number);
end=a[9];
if(number>end)
a[10]=number;
else {
for(i=0;i<10;i++) {
if(a[i]<number) {
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++) {
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("%6d",a[i]);
}
```