在升序数组中插入一个数,并且保持该数组仍为升序数组的函数---Insert. 结果不正确。

void Insert(int a[],int n)
{
int x,i,j,ins_at=0;
if(x>a[n-2])
a[n-1]=x;

else
for(i=0;i<=n-1;i++)
if(x<a[i])
ins_at=i;
for(j=n-1;j>ins_at;j--)
a[j]=a[j-1];
a[ins_at]=x;

for(i=0;i<n;i++)
printf("%4d",a[i]);
printf("\n");
}
void main()
{
int a[11]={1,2,3,4,5,6,7,8,9,11},x;
printf("Insert a number x:");
scanf("%d",&x);
Insert(a,11);
printf("\n");

}

你的程序存在两个问题:1. 插入值没有传到fun函数;2. 找到插入点后没有终止循环,停止继续查找插入点。我已经将程序修改如下,在Turbo C 2.0调试通过,你仔细研究一下,希望对你有帮助。
#include <stdio.h>

void Insert(int a[],int x,int n)
{
int i,j,ins_at=0;

if(x>a[n-2])
a[n-1]=x;
else
for(i=0;i<=n-1;i++)
if(x<a[i]){
ins_at=i;
break;
}

for(j=n-1;j>ins_at;j--) a[j]=a[j-1];
a[ins_at]=x;

for(i=0;i<n;i++) printf("%4d",a[i]);
printf("\n");
}

void main()
{
int a[11]={1,2,3,4,5,6,7,8,9,11},x;

printf("Insert a number x:");
scanf("%d",&x);
Insert(a,x,11);
printf("\n");

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-17
x 是在main函数中定义的,不能直接在insert函数中用,建议增加一个参数,将x传递过去。追问

我将main函数中的x 改成y 可结果还是一样 可能还有其他问题 我的算法有没问题啊

相似回答