读入file2.dat中的数据,然后按成绩从高到低的顺序进行排序,并将排序结果分别以文本方式存入文件file3.dat中,以二进制形式存入文件file4.dat中。
时间: 2024-03-14 09:48:22 浏览: 128
好的,以下是读入file2.dat中的数据,按成绩从高到低排序并存入file3.dat和file4.dat的过程:
1. 首先,我们需要读入file2.dat中的数据,数据格式为学号、姓名和成绩,每个字段之间使用逗号分隔,每个学生信息占一行。读取文件的代码如下:
```
FILE *fp = fopen("file2.dat", "r");
if (fp == NULL) {
printf("打开文件失败\n");
return -1;
}
struct student {
int num; // 学号
char name[20]; // 姓名
int score; // 成绩
};
struct student stu[10];
int i = 0;
while (fscanf(fp, "%d,%[^,],%d\n", &stu[i].num, stu[i].name, &stu[i].score) != EOF) {
i++;
}
fclose(fp);
```
2. 接下来,我们按照成绩从高到低进行排序。这里使用快速排序算法实现排序,代码如下:
```
void quick_sort(struct student *a, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = a[left].score;
while (i < j) {
while (i < j && a[j].score <= pivot) {
j--;
}
a[i] = a[j];
while (i < j && a[i].score >= pivot) {
i++;
}
a[j] = a[i];
}
a[i].score = pivot;
quick_sort(a, left, i-1);
quick_sort(a, i+1, right);
}
quick_sort(stu, 0, 9);
```
3. 将排序结果分别以文本方式存入文件file3.dat中,以二进制形式存入文件file4.dat中。文本方式存储的代码如下:
```
FILE *fp = fopen("file3.dat", "w");
if (fp == NULL) {
printf("打开文件失败\n");
return -1;
}
fprintf(fp, "| 学号 | 姓名 | 成绩 |\n");
fprintf(fp, "|------|----------|------|\n");
for (int i = 0; i < 10; i++) {
fprintf(fp, "| %4d | %-8s | %4d |\n", stu[i].num, stu[i].name, stu[i].score);
}
fclose(fp);
```
二进制方式存储的代码如下:
```
FILE *fp = fopen("file4.dat", "wb");
if (fp == NULL) {
printf("打开文件失败\n");
return -1;
}
fwrite(stu, sizeof(struct student), 10, fp);
fclose(fp);
```
完整代码如下:
阅读全文