69,372
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _stu {
char id[12];
char name[20];
float math;
float english;
float physics;
} student;
int input_stu() {
student stu[5];
FILE * out=fopen("s.txt","w");
if(!out) {
printf("打开文件失败。\n");
return 1;
}
for(int i=0; i<5; i++) {
printf("\n输入第 %d 位学生:\n",i+1) ;
printf("学 号:");
scanf("%s",&stu[i].id);
printf("姓 名:");
scanf("%s",&stu[i].name);
printf("数学成绩:");
scanf("%f",&stu[i].math);
printf("英语成绩:");
scanf("%f",&stu[i].english);
printf("物理成绩:");
scanf("%f",&stu[i].physics);
fprintf(out,"%s %s %.2f %.2f %.2f\n",stu[i].id,
stu[i].name,stu[i].math,stu[i].english,stu[i].physics);
}
printf("信息保存成功。\n\n") ;
fclose(out);
return 0;
}
int read_stu(student* stu) {
FILE* in=fopen("s.txt","r");
if(!in) {
printf("打开文件失败。\n");
return 1;
}
printf("从文件中读取的成绩如下:\n");
printf("学号 姓名 数学成绩 英语成绩 物理成绩 \n");
for(int i=0; i<5; i++) {
fscanf(in,"%s %s %f %f %f",(stu+i)->id,
(stu+i)->name,&(stu+i)->math,&(stu+i)->english,&(stu+i)->physics);
printf("%s %s %4.2f %4.2f %4.2f %4.2f\n",stu[i].id,
stu[i].name,stu[i].math,stu[i].english,stu[i].physics);
}
fclose(in);
return 0;
}
int sort(student* stu) {
student tmp;
float t;
float count[5];
for(int i=0; i<5; i++) {
count[i]=stu[i].math+stu[i].english+stu[i].physics;
}
int max=0;
for(int i=0; i<5; i++) {
max=i;
for(int j=i+1; j<5; j++) {
if(count[j]>count[max]) max=j;
}
if(max!=i) {
t=count[i];
count[i]=count[max];
count[max]=t;
memcpy(&tmp,&stu[i],sizeof(student));
memcpy(&stu[i],&stu[max],sizeof(student));
memcpy(&stu[max],&tmp,sizeof(student));
}
}
return 0;
}
int main() {
student stu[5];
// input_stu();//输入信息,然后保存的文件。
read_stu(stu);//从文件中读取信息
sort(stu);//排序输出
printf("\n排序后的成绩如下:\n");
printf("学号 姓名 数学成绩 英语成绩 物理成绩 总成绩\n");
for(int i=0; i<5; i++) {
printf("%s %s %4.2f %4.2f %4.2f %4.2f\n",stu[i].id,
stu[i].name,stu[i].math,stu[i].english,stu[i].physics,
stu[i].math+stu[i].english+stu[i].physics);
}
}