问答详情
源自:6-5 数组的应用(一)

输出成绩降序排列时有乱码。

#include <stdio.h>

//计算考试总分
int total(int score[])
{
    int i;
    int total = 0;
    for(i=0;i<=9;i++)
    {
        total += score[i];
    }
    return total;
}


//计算考试最高分数
int highest(int score[])
{
    int i;
    for(i=0;i<=9;i++)
    {
        if(score[i]>score[i+1]) //调换顺序
        {
            int n = score[i];
            score[i] = score[i+1];
            score[i+1] = n;
        }
    }
    return score[9];
}

//计算考试最低分数
int lowest(int score[])
{
    int i;
    for(i=0;i<=8;i++)
    {
        if(score[i]<score[i+1])
        {
            int n = score[i];
            score[i] = score[i+1];
            score[i+1] = n;
        }
    }
    return score[0];
}

//计算考试平均分数
int average(int score[])
{
    int n = total(score);
    int av = n/10;
    return av;
}


//考试分数降序排列
int down_ordinary(int score[])
{
    int i;
    int j;
    for(i=9;i>=1;i--)
    {
        for(j=1;j<=i;j++)
        {
            if(score[j]<score[j+1])
            {
                int n = score[j];
                score[j] = score[j+1];
                score[j+1] = n;
            }
        }
    }
    printf("考试成绩降序排列为:");
    for(i=1;i<=9;i++)
    {
        printf("%d ",score[i]);
    }
    return 0;
}


//主函数
int main()
{
    int score[10]={67,98,75,63,82,79,81,91,66,84};
    printf("考试总分为%d\n",total(score));
    printf("考试最高分为%d\n",highest(score));
    printf("考试最低分为%d\n",lowest(score));
    printf("考试平均分为%d\n",average(score));
    down_ordinary(score);

    return 0;
    
    }


输出结果

考试总分为786
考试最高分为98
考试最低分为75
考试平均分为78
考试成绩降序排列为:586547409 98 91 84 82 81 79 67 66


为什么多了一个586547409出来?还有 75,63两项不见了

提问者:lfff3480699 2017-01-19 18:00

个回答

  • Only_L
    2017-03-05 09:47:22

    #include <stdio.h>
    //计算考试总分
    int total(int score[])
    {
        int i;
        int total = 0;
        for(i=0;i<=9;i++)
        {
            total += score[i];
        }
        return total;
    }
     
     
    //计算考试最高分数
    int highest(int score[])
    {
        int i;
        for(i=0;i<=9;i++)
        {
            if(score[i]>score[i+1]) //调换顺序
            {
                int n;
                n = score[i];
                score[i] = score[i+1];
                score[i+1] = n;
            }
        }
    //    printf("%d\n",score[9]);
        return score[9];
    }
     
    //计算考试最低分数
    int lowest(int score[])
    {
        int i;
        for(i=0;i<=8;i++)
        {
            if(score[i]<score[i+1])
            {
                int n = score[i];
                score[i] = score[i+1];
                score[i+1] = n;
            }
        }
        return score[0];
    }
     
    //计算考试平均分数
    int average(int score[])
    {
        int n = total(score);
        int av = n/10;
        return av;
    }
     
     
    //考试分数降序排列
    int down_ordinary(int score[])
    {
        int i;
        int j;
        for(i=9;i>=0;i--)
        {
            for(j=0;j<i;j++)
            {
                if(score[j]<score[j+1])
                {
                    int n;
                    n = score[j];
                    score[j] = score[j+1];
                    score[j+1] = n;
                }
            }
        }
        printf("考试分数降序排列:");
        for(i=0;i<10;i++)
        {
    //        printf("%d\n",score[0]);
            printf("%d ",score[i]);
        }
        return 0;
    }
     
     
    //主函数
    int main()
    {
        int score[10]={67,98,75,63,82,79,81,91,66,84};
        printf("考试总分为%d\n",total(score));
        printf("考试最高分为%d\n",highest(score));
        printf("考试最低分为%d\n",lowest(score));
        printf("考试平均分为%d\n",average(score));
        down_ordinary(score);
     
        return 0;
         
        }


    给你改了下,在“考试分数降序排列”这下面的部分代码错误了,你再看看。


  • 慕前端5541910
    2017-01-22 14:41:27

    把62-68行代码改成:

    for(i=9;i>=0;i--)

        {

            for(j=0;j<i;j++)

            {

                if(score[j]<score[j+1])

                {

                    n = score[j];

    就可以了。