这个程序可以运行 但是就在插入新信息后排序的时候有点不对
#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编辑过]