从键盘输入器10个学生的姓名,性别,成绩,按性别成绩降序排列后,然后把他们转存到磁盘文件ck.txt中,使用C语言编写
时间: 2024-09-07 22:05:08 浏览: 41
在C语言中,你可以使用`stdio.h`, `stdlib.h` 和 `string.h` 等头文件来实现这个功能。以下是一个简单的示例程序,它首先从用户那里获取学生信息,然后按照指定的条件排序并将其保存到文件中:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 结构体定义学生信息
typedef struct {
char name[50];
char gender[10];
float score;
} Student;
// 比较函数用于字符串和分数排序
int compare(const void* a, const void* b) {
const Student* sa = (const Student*)a;
const Student* sb = (const Student*)b;
if ((sa->gender[0] == 'M' && sb->gender[0] == 'F') ||
(sa->gender[0] != sb->gender[0])) {
return strcmp(sa->gender, sb->gender); // 首先按性别区分
} else {
return -((sa->score > sb->score) ? 1 : -1); // 同性别的则按分数降序
}
}
void save_to_file(Student students[], int count, char filename[]) {
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("Error opening file.\n");
return;
}
for (int i = 0; i < count; ++i) {
fprintf(file, "%s %s %.2f\n", students[i].name, students[i].gender, students[i].score);
}
fclose(file);
printf("Data saved to %s successfully.\n", filename);
}
int main() {
Student students[10]; // 假设最多有10名学生
for (int i = 0; i < 10; ++i) {
printf("Enter student %d's name: ", i+1);
fgets(students[i].name, sizeof(students[i].name), stdin);
students[i].name[strlen(students[i].name)-1] = '\0'; // 去除换行符
printf("Enter gender (M/F): ");
scanf("%s", students[i].gender);
printf("Enter score: ");
scanf("%f", &students[i].score);
}
qsort(students, 10, sizeof(Student), compare); // 对数组进行排序
save_to_file(students, 10, "ck.txt"); // 保存到磁盘文件
return 0;
}
```
阅读全文