新浪博客

C语言实现学生成绩的排序 以及添加 删除学员成绩信息。

2006-08-16 13:57阅读:
#include <stdio.h>
#define MAX 50 //最大人数
struct few
{
float a;
float b;
float c;
};
struct student
{
int num;
char name[30];
float ave;
struct few score;
};
void display(int,char *,float);
int in(struct student *,int);
int del(struct student *,int);
void arr(struct student *,int);
void main()
{
/*设置一个结构数组stu用于保存学生信息,
count用于计算当前学生数.
*/
struct student stu[MAX];
int i=0,count=0,set=0;
float sum=0;
char ans;
ans='y';
//循环输入学生信息 保存到结构数组 stu[MAX]里面。
do
{
printf('请入学号:');
scanf('%d',&stu[i].num);
printf('请输入姓名:');
fflush(stdin);
gets(stu[i].name);
printf('三门课的成绩:');
printf('成绩1:');
scanf('%f',&stu[i].score.a);
r/> printf('成绩2:');
scanf('%f',&stu[i].score.b);
printf('成绩3:');
scanf('%f',&stu[i].score.c);
sum=stu[i].score.a+stu[i].score.b+stu[i].score.c;
stu[i].ave=sum/3;
i++;
count++;
printf('是否要继续:y/n:');
fflush(stdin);
ans=getchar();
}while(ans=='y'||ans=='Y');
printf('未排序前的学员信息:');
printf('学号\t姓名\t\t\t\t平均成绩');
for(i=0;i<count;i++)
{
display(stu[i].num,stu[i].name,stu[i].ave);//调用函数display() 用于显示结果.
}
arr(stu,count);//调用arr()函数 实现排序.
do
{
printf('选择你要进行的操作:1.插入学员信息。2.删除学员信息。9.显示当前学员信息。0.退出。选择:');//设置选择,由set控制。
scanf('%d',&set);
if(set==1)
{
count=in(stu,count);//调用插入函数in
}
else if(set==2)
{
count=del(stu,count);//调用删除函数del
}
else if(set==0)
{
break;
}
else if(set==9)
{
printf('当前学员信息:');
printf('学号\t姓名\t\t\t\t平均成绩');
for(i=0;i<count;i++)
{
display(stu[i].num,stu[i].name,stu[i].ave);
}
}
else
{
printf('你的输入有误,请重新输入。');
}
}while(1);
}
void display(int n,char *m,float a)
{
printf('%d\t%s\t\t\t\t%3.2f\t',n,m,a);
}
void arr(struct student *p,int n)//实现排列
{
int i,j;
struct student temp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if((p+j)->ave<(p+j+1)->ave)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
printf('排列后的顺序:');
printf('学号\t姓名\t\t\t\t平均成绩');
for(i=0;i<n;i++)
{
display((p+i)->num,(p+i)->name,(p+i)->ave);
}
}
int in(struct student *q,int m)//实现插入
{
int i,j;
struct student in;
printf('输入要插入的学员信息:');
printf('请入学号:');
scanf('%d',&in.num);
printf('请输入姓名:');
fflush(stdin);
gets(in.name);
printf('三门课的成绩:');
printf('成绩1:');
scanf('%f',&in.score.a);
printf('成绩2:');
scanf('%f',&in.score.b);
printf('成绩3:');
scanf('%f',&in.score.c);
in.ave=(in.score.a+in.score.b+in.score.c)/3;
for(i=0;i<m;i++)
{
if((q+i)->ave<in.ave)
{
break;
}
}
for(j=m+1;j>i;j--)
{
*(q+j)=*(q+j-1);
}
*(q+j)=in;
m++;
printf('插入新学员后的学员信息如下:');
printf('学号\t姓名\t\t\t\t平均成绩');
for(i=0;i<m;i++)
{
display((q+i)->num,(q+i)->name,(q+i)->ave);
}
return m;
}
int del(struct student *p1,int m)//实现删除
{
int num,i,j;
printf('请输入要删除的学员的学号:');
scanf('%d',&num);
for(i=0;i<m;i++)
{
if((p1+i)->num==num)
{
break;
}
}
for(j=i;j<m;j++)
{
*(p1+j)=*(p1+j+1);
}
if(i<m)
{
m--;
printf('删除后的学员信息如下:');
printf('学号\t姓名\t\t\t\t平均成绩');
for(i=0;i<m;i++)
{
display((p1+i)->num,(p1+i)->name,(p1+i)->ave);
}
}
else
{
printf('没有该学号学员信息。');
}
return m;
}

我的更多文章

下载客户端阅读体验更佳

APP专享