数组中插入一个数,请问哪错了

题目描述:
给定有序数组(从小到大),再给你一个数,要求插入该数到数组中并保持顺序
输入:
多组测试,每组第一行输入一个整数n,然后是n个有序的整数 第二行输入1个整数m和1个整数K
输出:
将整数m插入到原数组中保持顺序是升序,然后输出2行 第一行是插入以后的数组 第二行是插入以后的数组中下标值是K的数 n m k不超过20


#include<stdio.h>
#include<math.h>
int main()
{
    int n,i,j,a[20],min=0,k;
    int t=0;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);}
        int m,k;
        scanf("%d%d",&m,&k);

        for(j=0;j<n-1;j++){             //冒泡法排序
            for(i=0;i<n-1-j;i++){
                if(a[i+1]<a[i]) {
                    t=a[i];
                    a[i]=a[i+1];
                    a[i+1]=t;
                }
            }
        }

        for(i=0;i<n;i++) {              //插入m
                if(a[i]>m){
                    k=i;
              for(i=n-1;i<=k;i--){
                a[i+1]=a[i];
                a[k]=m;
              }
            }
        }


            for(i=0;i<n;i++)
            printf("%d ",a[i]);
            printf("%d\n",a[n]);

            printf("%d\n",a[k]);
    }

    return 0;
}

根据 给定有序数组(从小到大) n m k不超过20
你直接定义数组 a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};


 
#include<stdio.h>
#include<math.h>
int main()
{
    int n,i,j, min=0,k;
    int t=0;
    int a[21]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};//多开一个空间来存放插入的数
   do{
    printf("请输入一个整数n(不超过20):");
    scanf("%d",&n);
   }while(n<=20);
do{
    printf("请输入1个整数m和1个整数K(不超过20):");
    scanf("%d%d",&m,&k);
   }while(m<=20&&k<=20);

     for(i=0;i<n;i++){
       if(a[i]>m){//找到比输入的m还要大的位置
         break;
       }
    }
    for(j=19;j>=i;j--){ //后面的数据后移
        a[j+1]=a[j];
    }
   a[i]=m;//后移动之后i的位置就放入m
   for(i=0;i<n;i++)
            printf("%d ",a[i]); //输出第一行是插入以后的数组
   printf("\n%d ",a[k]);//输出第二行是插入以后的数组中下标值是K的数
    }
    return 0;
}
 

30行a[k]=m;应该在循环外把