问答详情
源自:6-12 综合练习

求最高分的代码是对的 而最低分的为什么是错的?

int high (int score[10])
{
    int s,flag;
    for(s=0;s<10;s++)
    {
     if(score[s]>score[s+1])
            {
                flag=score[s+1];
                score[s+1]=score[s];
                score[s]=flag;
            }
            return score[s+1];
    }
}

int low (int score[10])
{
    int q,lag;
    for(q=0;q<10;q++)
    {
        if(score[q]<score[q+1])
        {
            lag=score[q+1];
            score[q+1]=score[q];
            score[q]=lag;
        }
        return score[q+1];
    }
}


提问者:namecnedifnoc 2017-01-22 18:38

个回答

  • gjfLeo
    2017-01-22 20:12:36
    已采纳

    我试了一下,两个都是错的。。

    1. score的下标应为0~9,但程序运行中涉及到了score[10](好吧但是因为另一个错误没有涉及)

    2. return一句应该放在for循环的外面,否则循环只会执行一次

    我不知道题主的思路有没有问题,我还是说一下吧。一般的求最大值的思路(求a[0]~a[9]中的最大值):

    1. 定义一个变量m,初始化为a[0]

    2. 将a[1]与m比较,如果a[1]>m,则把m的值改为a[1]的值。此时m的值为a[0]~a[1]中的最大值

    3. 将a[2]与m比较,如果a[2]>m,则把m的值改为a[2]的值。此时m的值为a[0]~a[2]中的最大值

    4. 依次类推,直到比较a[9]与m,最后使得m的值为a[0]~a[9]的最大值

    给段代码参考:

    int high(int score[10])
    {
        int m, i;
        m = a[0];
        for (i=1; i<10; i++)
        {
            if (a[i] > m)
            {
                m = a[i];
            }
        }
        return m;
    }

    最小值类似,把大小比较修改一下即可。不懂请追问。