c语言 不知道哪里错了

include<stdio.h>
#define L 5
void sort (int n,int a[]){
int i, j, k, r;
for( i=1; i<n; i++)
{
j=i-1;
while((a[j]>a[i])&&(j>=0)) j=j-1;
r=a[i];
for(k=i-1; k>=j+1; k--) a[k+1]=a[k];
a[j+1]=r;
}
}
int a[5];
int i,j=5;
int main(){
for(i=0;i<5; i++)
{
scanf("%d",&a[i]);
}
sort(j,a[5]);
for(i=0;i<5;i++)
{
printf("%2d",a[i]);
}

return 0;

}

sort(j, a[5]);

改成

sort(j, a);

你题目的解答代码如下:


#include <stdio.h>
#define L 5
void sort(int n, int a[])
{
    int i, j, k, r;
    for (i = 1; i < n; i++)
    {
        j = i - 1;
        while ((a[j] > a[i]) && (j >= 0))
            j = j - 1;
        r = a[i];
        for (k = i - 1; k >= j + 1; k--)
            a[k + 1] = a[k];
        a[j + 1] = r;
    }
}
int a[5];
int i, j = 5;
int main()
{
    for (i = 0; i < 5; i++)
    {
        scanf("%d", &a[i]);
    }
    // sort(j, a[5]);
    sort(j, a);
    for (i = 0; i < 5; i++)
    {
        printf("%2d", a[i]);
    }

    return 0;
}

如有帮助,望采纳!谢谢!

两个错误:
(1)while((j>=0) && (a[j]>a[i])) j=j-1; //修改,j>=0必须放在前面
(2)sort(j,a); //修改 sort(j,a[5]); //a[5]是一个int值,且越界了,a是数组的首地址

代码修改如下:

#include<stdio.h>
#define L 5
void sort (int n,int a[]){
    int i, j, k, r;
    for( i=1; i<n; i++)
    {
        j=i-1;
        while((j>=0) && (a[j]>a[i])) j=j-1; //修改,j>=0必须放在前面
        r=a[i];
        for(k=i-1; k>=j+1; k--) a[k+1]=a[k];
        a[j+1]=r;
    }
}
int a[5];
int i,j=5;
int main(){
    for(i=0;i<5; i++)
    {
        scanf("%d",&a[i]);
    }
    sort(j,a); //修改 sort(j,a[5]); //a[5]是一个int值,且越界了,a是数组的首地址
    for(i=0;i<5;i++)
    {
        printf("%2d",a[i]);
    }

    return 0;
}

include<stdio.h>前面加#号,sort(j,a[5]);变成sort(j,a);