
我先使用了三个函数参数,参数分别为数组a[],数组元素数量number和需要插入的数字n。函数定义为int f(int a[],int number,int n);
#include
int 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);放在函数里吧。
#include
int 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
至此此题就算是完成了,也可以不用函数做。之前也写过一道输入一个数插入已知升序数组中
/*
Q458.(10分)实验七、数组实验(一)
4.
设数组a的定义如下:int a[20]={2,4,6,8,10,12,14,16};
已存入数组中的数据值已经按由小到大的顺序存放,
现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能。
**输入格式要求:"%d" 提示信息:"Enter n:"
**输出格式要求:"%d "
程序运行示例如下:
Enter n:11
2 4 6 8 10 11 12 14 16
*/
#include
int 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]);
}
} 欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)