有5个学生,每个学生有3门课程的成绩,编写成绩管理程序,要求:用c语言完成

(1) 从键盘输入学生数据,计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件中。
(2) 按平均分进行排序处理,将已排序的学生数据存入一个新文件。
(3) 在已排序的学生成绩文件中进行插入处理。插入一个学生的3门课程成绩,程序先计算新插入学生的平均成绩,然后将它成绩高低顺序插入,插入后建立一个新文件。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NAMELEN 10
#define IDLEN 20
typedef struct student
{
char name[NAMELEN];
char ID[IDLEN];
double first;
double second;
double third;
double average;
}STU;
STU stu[6];
int cmp( const void *a ,const void *b)
{
return (*(STU *)a).average > (*(STU *)b).average ? 1 : -1;
}
int main()
{
int i;
FILE *_fp=fopen("student.txt","w"),*fp=fopen("sort.txt","w"),*fp_=fopen("sort2.txt","w");

for(i=0;i<5;i++)
{
printf("输入第%d个学生的学号、姓名及三门课的成绩:\n",i+1);
scanf("%s%s%lf%lf%lf",stu[i].ID,stu[i].name,&stu[i].first,&stu[i].second,&stu[i].third);
stu[i].average=(stu[i].first+stu[i].second+stu[i].third)/3.0;
fprintf(_fp,"%s %s %.2lf %.2lf %.2lf %.2lf\n",stu[i].ID,stu[i].name,stu[i].first,stu[i].second,stu[i].third,stu[i].average);
}

qsort(stu,5,sizeof(stu[0]),cmp);

for(i=0;i<5;i++)
{
fprintf(fp,"%s %s %.2lf %.2lf %.2lf %.2lf\n",stu[i].ID,stu[i].name,stu[i].first,stu[i].second,stu[i].third,stu[i].average);
}

printf("增加一位学生的学号、姓名及三门课的成绩:\n");
scanf("%s%s%lf%lf%lf",stu[5].ID,stu[5].name,&stu[5].first,&stu[5].second,&stu[5].third);
stu[5].average=(stu[5].first+stu[5].second+stu[5].third)/3.0;
qsort(stu,6,sizeof(stu[0]),cmp);
for(i=0;i<6;i++)
{
fprintf(fp_,"%s %s %.2lf %.2lf %.2lf %.2lf\n",stu[i].ID,stu[i].name,stu[i].first,stu[i].second,stu[i].third,stu[i].average);

}

fclose(_fp);
fclose(fp);
fclose(fp_);

return 0;
}追问

那个按平均成绩排序呢?

追答

qsort(stu,5,sizeof(stu[0]),cmp);

这个就是排序呀,只是调用了系统函数

追问

能不能从头到尾解释一下啊,有的地方不懂啊?

追答

前面后面都删掉了字数不够
qsort详见http://zhidao.baidu.com/link?url=WuIlkOFOeCTjPGoj1HF-y0ym4AjMT4_rZEQjys9MTG5ipkmNXGy-QxpDQMLriqpNb39kjCTgO00q7TY7jqqek_

int cmp( const void *a ,const void *b)//这部分为qsort里的自己定义排序方式的cmp函数
{
return (*(STU *)a).average > (*(STU *)b).average ? 1 : -1;//按结构体的average升序
}
int main()
{
int i;
FILE *_fp=fopen("student.txt","w"),*fp=fopen("sort.txt","w"),*fp_=fopen("sort2.txt","w");//打开文件
for(i=0;i<5;i++)
{
printf("输入第%d个学生的学号、姓名及三门课的成绩:\n",i+1);
scanf("%s%s%lf%lf%lf",stu[i].ID,stu[i].name,&stu[i].first,&stu[i].second,&stu[i].third);
stu[i].average=(stu[i].first+stu[i].second+stu[i].third)/3.0;//求平均分
fprintf(_fp,"%s %s %.2lf %.2lf %.2lf %.2lf\n",stu[i].ID,stu[i].name,stu[i].first,stu[i].second,stu[i].third,stu[i].average);//输出到文件
}
qsort(stu,5,sizeof(stu[0]),cmp);//排序,对stu排序,长度为5,每个stu大小为sizeof(stu[0]),以cmp规定的排序
sizeof()返回()里的总字节数,你不想用qsort可以自己换成冒泡或者选择。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网