#include<stdio.h> void main() { int i,x,j,n; void insert(int *a,int x,int *m); int b[10]={2,3,6,7,21,30}; n = 6; scanf("%d",&x); insert(b,x,&n); for(i=0;i<n;i++) printf("%3d",b[i]); } insert(int *a,int x,int *m) { int i,j,k; for(i=0;i<6;i++) { if(x<*(a+i)) *(a+i)=*(a+i+1); else break; } x=*(a+i+1); }
时间: 2024-04-16 13:28:12 浏览: 47
#include <stdio.h>
4星 · 用户满意度95%
这段代码的功能是将用户输入的整数插入到已排序的数组中,并打印出插入后的数组。
在代码中,存在几个问题。首先,`main()` 函数的返回类型应该是 `int` 而不是 `void`。其次,在 `insert()` 函数中,循环变量 `i` 的范围应该是 `0` 到 `*m - 1`,而不是固定的 `0` 到 `5`。此外,为了实现插入操作,需要将插入位置之后的元素依次向后移动一个位置。
下面是修正后的代码:
```c
#include <stdio.h>
void insert(int *a, int x, int *m);
int main()
{
int i, x, n;
int b[10] = {2, 3, 6, 7, 21, 30};
n = 6;
scanf("%d", &x);
insert(b, x, &n);
for (i = 0; i < n; i++)
printf("%3d", b[i]);
return 0;
}
void insert(int *a, int x, int *m)
{
int i;
for (i = *m - 1; i >= 0; i--)
{
if (x < *(a + i))
*(a + i + 1) = *(a + i);
else
break;
}
*(a + i + 1) = x;
(*m)++;
}
```
在修正后的代码中,`insert()` 函数接受一个指向数组的指针 `a`,一个要插入的整数 `x`,以及指向数组元素数量的指针 `m`。在 `insert()` 函数中,使用循环将大于 `x` 的元素向后移动一个位置,然后将 `x` 插入到合适的位置。最后,通过增加 `*m` 的值来更新数组的元素数量。
这样,用户输入的整数将被正确插入到已排序的数组中,并打印出插入后的数组。
阅读全文