这个程序可以运行  但是就在插入新信息后排序的时候有点不对 
#include <stdio.h>
#define N 50
struct student
{
    int num;
    char name[20];
    int english;
    int chinese;
    int maths;
    float ave;
};
void input(struct student st[],int i);
void output(struct student st[],int i);
void paixu(struct student st[],int n);
void sanchu(struct student st[],int i,int k);
void main()
{
    struct student stu[N];
    char ch;
    int i=0, j;
    
    //单个学员信息输入
    printf("请输入学员信息:\n");
    do
    {
        input(stu,i);
        i++;
        printf("是否继续输入(y/n)?");
        fflush(stdin);
        ch=getchar();
    }while(ch=='y' || ch=='Y');
    printf("\n");
    
    //显示输入信息 
    printf("排序前学员成绩如下\n");
    printf("学号\t姓名\t平均成绩\n");
    output(stu,i);
    //排序
    printf("排序后学员信息如下\n");
    printf("学号\t姓名\t平均成绩\n");
    paixu(stu,i);
    output(stu,i);
    //插入新学员
    ch='n';
    do
    {    
        if(ch=='y' || ch=='Y')
        {
            input(stu,i);
            i++;
            output(stu,i);//?????不加这个就不能顺利排序
            printf("\n\n\n");
            paixu(stu,i);
            output(stu,i);
        }
        printf("是否插入新学员(y/n)?");
        fflush(stdin);
        scanf("%c",&ch);
    }while(ch=='y' || ch=='Y');
}
void input(struct student st[],int i)
{
    printf("学号:");
    scanf("%d",&st[i].num);
    printf("姓名:");
    fflush(stdin);
    gets(st[i].name);
    printf("英语成绩:");
    scanf("%d",&st[i].english);
    printf("语文成绩:");
    scanf("%d",&st[i].chinese);
    printf("数学成绩:");
    scanf("%d",&st[i].maths);
}
void output(struct student st[],int i)
{
    int j;
    for(j=0;j<i;j++)
    {
        st[j].ave=(st[j].maths+st[j].english+st[j].chinese)/3.0;
        printf("%d\t%s\t%.2f\n",st[j].num,st[j].name,st[j].ave);
    }
}
void paixu(struct student st[],int n)
{
    struct student temp;
    int i, j;
    for(i=0;i<n;i++)
    {
        for(j=1;j<n;j++)
        {
            if(st[j-1].ave<st[j].ave)
            {
                temp=st[j];
                st[j]=st[j-1];
                st[j-1]=temp;
            }
        }
    }
}
void sanchu(struct student st[],int i,int k)
{
    int j;
    for(j=0;j<i;j++)
    {
        if(st[j].num==k)
            continue;
        else
        {
            st[j].ave=(st[j].maths+st[j].english+st[j].chinese)/3.0;
            printf("%d\t%s\t%.2f\n",st[j].num,st[j].name,st[j].ave);
        }
    }
}
[此贴子已经被作者于2006-8-12 20:49:06编辑过]



											
	    

	


										