用C语言编写程序给定N个学生的基本信息,每个学生基本信息包括学号(由10个数字组成的字符串)、姓名(长度小于10的不包合空白字符的非空字符串)和2门课程的成绩 [10,100]区间内的整数),按照总分从高到低进行排序,并将排序后的结果写入文件test.txt
时间: 2023-12-08 12:10:44 浏览: 99
好的,以下是一个示例程序,你可以参考它进行修改。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 1000
#define MAX_NAME_LEN 10
#define MAX_ID_LEN 11
typedef struct {
char id[MAX_ID_LEN];
char name[MAX_NAME_LEN];
int score1;
int score2;
int total_score;
} Student;
int cmp(const void* a, const void* b) {
const Student* s1 = *(const Student**)a;
const Student* s2 = *(const Student**)b;
return s2->total_score - s1->total_score;
}
int main() {
Student students[MAX_STUDENTS];
Student* student_ptrs[MAX_STUDENTS];
int n = 0;
// 读取学生信息
while (scanf("%s %s %d %d", students[n].id, students[n].name, &students[n].score1, &students[n].score2) == 4) {
students[n].total_score = students[n].score1 + students[n].score2;
student_ptrs[n] = &students[n];
n++;
}
// 排序
qsort(student_ptrs, n, sizeof(Student*), cmp);
// 写入文件
FILE* fp = fopen("test.txt", "w");
for (int i = 0; i < n; i++) {
fprintf(fp, "%s %s %d\n", student_ptrs[i]->id, student_ptrs[i]->name, student_ptrs[i]->total_score);
}
fclose(fp);
return 0;
}
```
在这个程序中,我们定义了一个`Student`结构体,用于存储学生信息。我们使用数组`students`存储学生信息,使用`student_ptrs`数组存储指向每个学生的指针,方便排序。`cmp`函数用于定义排序规则,这里按照总分从高到低排序。
读取学生信息后,我们将每个学生的指针存储到`student_ptrs`数组中,并对这个数组进行排序。最后,我们将排序结果写入`test.txt`文件中。
注意在实际使用时,你需要根据自己的数据格式进行修改。同时,如果数据量很大,你可能需要使用外部排序等技术来处理。
阅读全文