C语言小题,帮帮忙!

来源:百度知道 编辑:UC知道 时间:2024/06/06 20:43:23
定义一个数组a[11]。用以存放学生的成绩
从键盘输入10个学生成绩
采用冒泡法,将学生成绩按从高到低进行排序
再输入一个学生成绩,将此成绩按排序规律插入学生成绩数组
将排好序的成绩进行反序存放

下面是我写的,不过后面那个插入不能实现,希望高手帮我写一下,顺便帮我解释下,我的为什么不对!谢谢了 !

#include <stdio.h>
void main()
{
int a[11];
int i,j;
printf("请输入10个学生的成绩:");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<9;i++)
{
for (j=i+1;j<10;j++)
{
if (a[i]<a[j])
{ int temp = a[i];
a[i]=a[j];
a[j]= temp;
}
}

}
for (i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n请再输入一个学生的成绩:");
scanf("%d",&a[10]);
for (i=0;i<10;i++)
{
if (a[i]>a[10]&&a[i+1]<=a[10])

{
for (j=9;j>=i+1;j--)
a[j+1]=a[j];

}
a[i+1]=a[10];
}
for (i=10;i>=0;i--)
printf("%d",a[i]);
}

大哥,首先我对你程序中的错误进行说明一下:
int temp = a[i]; //在C语言中定义变量语句须放在其他语句之前

接着,我们来分析一下插入一个成绩并排序的算法:先插入成绩到数组a[]的末尾.然后,将此数a[10]与a[0]到a[9]逐个比较,如果a[10]大于a[i],则将a[i]及其后的数向后逐个移动一位,再将a[10]插入a[i]即可,实现如下:
for(i=0;i<10;i++){
if(a[10]>a[i]){
temp=a[10];
for(j=9;j>i+1;j--)a[j+1]=a[j];
a[i]=temp;
}