5.给定N个学生的基本信息,每个学生基本信息包括学号(由10个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和2门课程的成绩([0.100]区间内的整数),按照总分从高到低进行排序,并将排序后的结果写入文件test.txt。【12分】
首先明确要做的步骤
//1.给定信息,输入信息
//2.成绩总分计算
//3.从高到底排列
//4.结果写入文件
也就是说输入成绩后要算总分,然后给结构体冒泡排序,最后再把结果写入文件
代码实现如下:
#include <stdio.h>
#include <string.h>
//1.给定信息,输入信息
//2.成绩总分计算
//3.从高到底排列
//4.结果写入文件
/*测试用例:ni 2022 1 1
hi 2023 2 2
ji 2024 2 1*/
typedef struct Student {
char stu[10];
char id[10];
int grade1;
int grade2;
} S;
int main() {
int i,n;
// n=2;
scanf("%d",&n);
S sta[n];
for(i=0; i<n; i++) {
scanf("%s %s %d %d",&sta[i].stu,&sta[i].id,&sta[i].grade1,&sta[i].grade2);
}
int j;
S temp;
int sum[n];
for(i=0; i<n; i++) {
sum[i]=sta[i].grade1+sta[i].grade2;
}
// for(i=0;i<n;i++){
// printf("%d\n",sum[i]);
// }
for(i=0; i<n-1; i++) {
for(j=0; j<n-1-i; j++) {
if(sum[i]<sum[i+1]) {
temp=sta[j];
sta[j]=sta[j+1];
sta[j+1]=temp;
}//交换出现问题,不是结构体整体 .//没问题,输出问题,我是sb
}
}
FILE *fp=fopen("text.txt","w+");//写入,没有文件就新建文件
for(i=0; i<n; i++) {
fprintf(fp,"%s %s %d %d\n",sta[i].stu,sta[i].id,sta[i].grade1,sta[i].grade2);
}
fclose(fp);
return 0;
}
建立文件,得出结果为: