为什么打完成绩降序这段会变成空白的结果?

来源:6-12 综合练习

福工刘德华

2017-08-03 12:49

int cjjx()

{

    int i,j,temp;

    int score[10]={67,98,75,63,82,79,81,91,66,84};

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

    {

        for(j=9;j>=0;j++)

        {

            if(score[i]<score[j])

            temp=score[i];

            score[i]=score[j];

            score[j]=temp;

        }

    }

     printf("成绩降序排列为:%d\n");

}

int main()

{

cjjx();

return 0;

}

写回答 关注

1回答

  • 试茶君
    2017-08-06 22:39:29

    你的内循环死循环了。

    详细分析:第一次内循环,i=0,score【9】和score【0】对比,这个可以;内循环再次执行代码,j++后变成10,但是score数组中没有下标10 的元素,无法对比;内循环第三次执行代码,j++后变成11……你的约束条件是j>=0,所以j会一直自加形成死循环。

    建议修改:外循环i决定每次冒泡的元素数,第一次是10个元素,最小的元素排在最后,第二次是9个元素,最小的元素排在倒数第二个,以此类推,所以外循环从9开始,逐渐减小。内循环j则是冒泡排序从第一个元素到最后一个元素,j自加,个数总会小于等于i个。

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926210 学习 · 20797 问题

查看课程

相似问题