定义长度为10的有序数组,已有其中5个数值分别为1 3 5,7,9根据用户的输入依次插到有序数组的正确位置上,当输入-1时,停止插入操作,输出实现数据。

//前面的数据都正确,插入第五个数据时插入位置正确,但是数值变为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;
}