kid_0203
2015-11-01 03:26
采纳率: 85.1%
浏览 2.3k
已采纳

帮忙看一下c语言这个关于数组的错误~

输入 10 个整数用选择排序法将它们按照升序排列好

原理说明:把一个数组从小到大排列,不停的扫描整个数组,第一次扫描把最小的数找出来并放在第一位,第二次扫描,把其余的数中最小的数找到放在第二位,以此类推,这样经过N-1次扫描之后就可以把N个数的顺序排列好了

 #define A 10
#include <stdio.h>
int main()
{
    int a[A],i,j,k,t;
    for(i=0;i<A;i++)
    scanf("%d",&a[i]);
    for(j=0;j<A-1;j++)
    {for(k=0;k<A-j;k++)
    if(a[k]>a[k+1]) {t=a[k];a[k]=a[k+1];a[k+1]=t;}}
    for(i=0;i<A;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}

这段代码我在VC++6.0运行没问题,但是提交到学校网站编译结果是:
main.c:10:Bounds error: array reference (10) outside bounds of the array.
main.c:10: Pointer value: 0xbf946218
main.c:10: Object `a':
main.c:10: Address in memory: 0xbf9461f0 .. 0xbf946217
main.c:10: Size: 40 bytes
main.c:10: Element size: 4 bytes
main.c:10: Number of elements: 10
main.c:10: Created at: main.c, line 5
main.c:10: Storage class: stack

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • love密密 2015-11-01 03:42
    已采纳

    {for(k=0;k if(a[k]>a[k+1]) {t=a[k];a[k]=a[k+1];a[k+1]=t;}}
    这个循环,当j=0,k=9时,a[k+1]越界,数组下标只能是0——9.

    点赞 打赏 评论
  • 「已注销」 2015-11-01 03:41

    {for(k=0;k if(a[k]>a[k+1]) {t=a[k];a[k]=a[k+1];a[k+1]=t;}}

    j=0,k=9时,a[k+1]越界

    点赞 打赏 评论
  • love密密 2015-11-01 03:49

    另外你这个程序有问题,循环不能每次都从k=0开始,按你的程序说明,两次循环之后,a[0],a[1]已经有序,语句应该是for(k=j;k<A-1;k++))

    点赞 打赏 评论
  • ysuwood 2015-11-01 06:14
     #define A 10
    #include <stdio.h>
    int main()
    {
        int a[A],i,j,k,t;
        for(i=0;i<A;i++)
            scanf("%d",&a[i]);
        for(j=0;j<A-1;j++)
        {for(k=j+1;k<A;k++)
        if(a[k]<a[j]) {t=a[k];a[k]=a[j];a[j]=t;}}
        for(i=0;i<A;i++)
            printf("%d ",a[i]);
        printf("\n");
        return 0;
    }
    
    点赞 打赏 评论
  • c++ 2015-11-01 08:13

    你把嵌套的for(k=0;k<A-j;k++)
    改成for(k=0;k<A-j-1;k++)
    就行了

    点赞 打赏 评论
  • Flying_Home 2015-11-01 10:29

    #define A 10
    #include
    int main()
    {
    int a[A] = {0},i,j,k,t;
    for(i=0;i<A;i++)
    scanf("%d",&a[i]);

    for(j=A-1;j>=0;j--)
    {
        for(k=A-1;k >= A-j-1; k--)
        {
            if(a[k]>a[k+1]) 
            {
                t=a[k];
                a[k]=a[k+1];
                a[k+1]=t;
            }
        }
    }
    
    for(i=0;i<A;i++)
        printf("%d ",a[i]);
    
    printf("\n");
    return 0;
    

    }

    仅做参考!

    点赞 打赏 评论
  • Flying_Home 2015-11-01 10:31

    #define A 10
    #include
    int main()
    {
    int a[A] = {0},i,j,k,t;
    for(i=0;i<A;i++)
    scanf("%d",&a[i]);

    for(j=A-1;j>=0;j--)
    {
        for(k=A-1;k >= A-j-1; k--)
        {
            if(a[k]>a[k+1]) 
            {
                t=a[k];
                a[k]=a[k+1];
                a[k+1]=t;
            }
        }
    }
    
    for(i=0;i<A;i++)
        printf("%d ",a[i]);
    
    printf("\n");
    return 0;
    

    }

    仅做参考!

    点赞 打赏 评论

相关推荐 更多相似问题