//前面的数据都正确,插入第五个数据时插入位置正确,但是数值变为0了,求改错
#include<stdio.h>
int main()
{
int k=0,x,a[10]={1,3,5,7,9},i,j,c;
printf("原来的数组为:\n");
for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
for(k=0;k<5;)
for(i=0;i<5;i++)
{
printf("请输入一个数值:\n");
scanf("%d",&x);
k++;
if(x==-1)
{
printf("停止插入操作\n");
return 0;
}
else for(j=0;j<5+k;j++)
{
if(a[j]>=x)
{
for(c=5+k;c>j;c--)
a[c]=a[c-1];
a[j]=x;
break;
}
}
printf("插入后的数据为:\n");
for(i=0;i<5+k;i++)
printf("%d ",a[i]);
printf("\n");
}
return 0;
}
22-28行只判断了在数组头和中间插入的情况,没有考虑在末尾插入的情况
在28行后面插入:
if (j == 5+k-1) {
a[j] = x;
}
#include <stdio.h>
int main()
{
int k = 0, x, a[10] = {1, 3, 5, 7, 9}, i, j, c;
int len = 5;
printf("原来的数组为:\n");
for (int i = 0; i < len; i++)
printf("%d ", a[i]);
printf("\n");
for (i = 0; i < 5; i++)
{
printf("请输入一个数值:\n");
scanf("%d", &x);
if (x == -1)
break;
c = len;
for (j = 0; j < len; j++)
{
if (x < a[j])
{
for (c = len; c > j; c--)
{
a[c] = a[c - 1];
}
a[c] = x;
break;
}
}
a[c] = x;
len++;
for (int i = 0; i < len; i++)
printf("%d ", a[i]);
printf("\n");
}
return 0;
}
题主的代码修改如下,改动处见注释,供参考:
#include<stdio.h>
int main()
{
int k = 0, x, a[10] = { 1,3,5,7,9 }, i, j, c;
printf("原来的数组为:\n");
for (i = 0; i < 5; i++)
printf("%d ", a[i]);
printf("\n");
for (k = 0; k < 5; k++) { //修改
//for (i = 0; i < 5; i++) //修改
//{ //修改
printf("请输入第%d个待插入数值:\n", k + 1); //修改
scanf("%d", &x);
//k++; //修改
if (x == -1)
{
printf("停止插入操作\n");
break; //return 0; //修改
}
else for (j = 0; j < 5 + k; j++)
{
if (a[j] >= x)
{
for (c = 5 + k; c > j; c--)
a[c] = a[c - 1];
a[j] = x;
break;
}
}
if (j == 5 + k) //当输入的数值大于数组所有元素
a[5 + k] = x;
//} //修改
}
printf("插入后的数据为:\n"); //插入完成后,输出
for (i = 0; i < 5 + k; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}