编程:往一个递增的数列中插入一个数。问题:但是在边界处就不行了,求改

img

修改如下,供参考:

#include <stdio.h>
void  main()
{
    int a[11], i = 0, key, j;
    printf("please enter ten numbers\n");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    printf("please enter a number\n");
    scanf("%d", &key);
    for (i = 0; i < 10; i++){
        if (key >= a[9])
        {
            a[10] = key;
            break;
        }
        else{
            if(key < a[i]){
                for (j = 10; j > i; j--)
                    a[j] = a[j - 1];
                a[i] = key;
                break;
            }
        }
    }
    for (i = 0; i < 11; i++)
        printf("%d ", a[i]);
}

使用动态分配 有用请采纳

#include<stdio.h>
#include<stdlib.h>

int main(){
    int size = 10;   // 初始空间
    int count = 0;   // 记录数组中当前元素个数 
    int* nums;
    nums = (int*)malloc(sizeof(int) * size);  // 动态分配空间 
    
    // 假设初始只有10个排好序的数 
    for(int i = 0; i < 10; i++){
        scanf("%d", &nums[i]);
        count += 1;
    } 
    
    int otherN;      // 输入的要插入到有序序列中的数
    while (scanf("%d", &otherN) && otherN != -1){   // 以-1作为输入的结束条件 
        count += 1;  
        if(count > size){
            size += 10;  // 增大十个数的空间
            nums = (int*)realloc(nums, sizeof(int) * size);   // 重新分配空间 
        }
        
        // 移动数据
        int i;
        for(i = count - 2; i >= 0; i--){
            if (nums[i] > otherN)
                nums[i + 1] = nums[i];
            else     // 找到小于otherN的第一个位置 
                break;
        } 
        
        nums[i + 1] = otherN;
        
        for(int j = 0; j < count; j++)
            printf("%d ", nums[j]); 
        
        printf("\n");
    } 
    
}