我先使用了三个函数参数,参数分别为数组a[],数组元素数量number和需要插入的数字n。函数定义为int f(int a[],int number,int n);
#includeint f(int a[],int number,int n);//a[]已按升序排列的数组 number数组元素 n需要插入的 int main() { int size,i,array[size],x,m; printf("Input array size:n"); scanf("%d",&size); printf("Input array:n"); for(i=0;i =a[j]&&n<=a[j+1]){ j++; b[j]=n; break; }else if(n>=a[number-1]){ b[number+1]=n; }else if(n<=a[0]){ b[j]=n; break; } } for(k=j+1;k 但结果并不正确:
调试过程中发现a[number-1]=5,也就是数组中最后一位是5。
但应该是6才对,于是我在主函数中添加了循环遍历整个数组,想查出数组元素变化在何处,找出问题所在。
添加第一处循环:在scanf("%d",&x);之前添加循环遍历数组,输出数组元素,发现在scanf("%d",&x);之前数组array[5]={1,2,3,4,6},正确的。
添加第二处循环:在scanf("%d%,&x);之后添加循环,遍历整个数组,输出数组元素,发现在scanf("%d",&x);之后数组array[5]={1,2,3,4,5},错误的!!
既然如此,不会别的,那就把scanf("%d",&x);放在函数里吧。
#includeint f(int a[],int number);//a[]已按升序排列的数组 number数组元素 n需要插入的 int main() { int size,i,array[size],x,m; printf("Input array size:n"); scanf("%d",&size); printf("Input array:n"); for(i=0;i =a[j]&&x<=a[j+1]){ j++; b[j]=x; break; }else if(x>=a[number-1]){ b[number+1]=x; }else if(x<=a[0]){ b[j]=x; break; } } for(k=j+1;k 至此此题就算是完成了,也可以不用函数做。之前也写过一道输入一个数插入已知升序数组中
#includeint main() { int a[20]={2,4,6,8,10,12,14,16}; int n,i,j,b[9]; printf("Enter n:"); scanf("%d",&n); for(i=0;i<9;i++){ b[i]=a[i];//思路就是把未插入之前的a[i]赋值给b[i] if(n>=a[i]&&n<=a[i+1]){ b[i+1]=n; i++; break; //假如n在数组之间,插入n在第i+1位,因为break,不继续循环,所以i++ }else if(n>=a[7]){ b[8]=n; //n大于16 }else if(n<=a[0]){ b[i]=n; //n小于2 break; } } for(j=i+1;j<10;i++,j++){ b[j]=a[i]; } for(j=0;j<9;j++){ printf("%d ",b[j]); } }



