一个班50名学生,学号为91039001到91039050,学生姓名按次序存储在文件name.txt中,完成以下任务。 1. 初始化时,把每个学生从文件中读取姓名;并按顺序赋值学号,然后随机赋值分数。 2. 输出每个学生的初始信息到屏幕。 3. 对每个学生按分数进行从大到小排序。 4. 输出排序后每个学生的信息到屏幕。 5. 将排序后的学生信息全部写入到文件中。 6. 从文件中读取所有学生信息输出到屏幕。
时间: 2024-03-11 11:51:35 浏览: 131
以下是一个实现上述任务的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_NAME_LEN 20
#define STUDENT_NUM 50
#define STUDENT_NAME_FILE "name.txt"
#define STUDENT_INFO_FILE "info.txt"
typedef struct {
char name[MAX_NAME_LEN];
int id;
int score;
} Student;
void initStudents(Student students[]) {
// 从文件中读取学生姓名
FILE *fp = fopen(STUDENT_NAME_FILE, "r");
if (fp == NULL) {
printf("无法打开文件 %s\n", STUDENT_NAME_FILE);
exit(1);
}
int i = 0;
while (!feof(fp) && i < STUDENT_NUM) {
fscanf(fp, "%s", students[i].name);
students[i].id = 91039001 + i;
students[i].score = rand() % 101; // 随机赋值分数
i++;
}
fclose(fp);
}
void printStudents(Student students[]) {
int i;
printf("初始信息:\n");
for (i = 0; i < STUDENT_NUM; i++) {
printf("姓名:%s\t学号:%d\t分数:%d\n", students[i].name, students[i].id, students[i].score);
}
}
void bubbleSort(Student arr[], int n) {
int i, j;
Student temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (arr[j].score < arr[j + 1].score) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void printSortedStudents(Student students[]) {
int i;
printf("按分数从大到小排序后的学生信息:\n");
for (i = 0; i < STUDENT_NUM; i++) {
printf("姓名:%s\t学号:%d\t分数:%d\n", students[i].name, students[i].id, students[i].score);
}
}
void writeStudentsToFile(Student students[]) {
FILE *fp = fopen(STUDENT_INFO_FILE, "w");
if (fp == NULL) {
printf("无法打开文件 %s\n", STUDENT_INFO_FILE);
exit(1);
}
int i;
for (i = 0; i < STUDENT_NUM; i++) {
fprintf(fp, "%s %d %d\n", students[i].name, students[i].id, students[i].score);
}
fclose(fp);
}
void readStudentsFromFile() {
FILE *fp = fopen(STUDENT_INFO_FILE, "r");
if (fp == NULL) {
printf("无法打开文件 %s\n", STUDENT_INFO_FILE);
exit(1);
}
char name[MAX_NAME_LEN];
int id, score;
printf("从文件中读取的学生信息:\n");
while (fscanf(fp, "%s %d %d", name, &id, &score) != EOF) {
printf("姓名:%s\t学号:%d\t分数:%d\n", name, id, score);
}
fclose(fp);
}
int main() {
srand(time(NULL)); // 设置随机数种子
Student students[STUDENT_NUM];
initStudents(students);
printStudents(students);
bubbleSort(students, STUDENT_NUM);
printSortedStudents(students);
writeStudentsToFile(students);
readStudentsFromFile();
return 0;
}
```
以上代码中,首先定义了一个结构体 `Student`,用来存储每个学生的姓名、学号和分数。在 `initStudents` 函数中,从文件中读取学生姓名,并按照顺序赋值学号,然后使用 `rand` 函数随机赋值分数。在 `printStudents` 函数中,输出每个学生的初始信息到屏幕。在 `bubbleSort` 函数中,使用冒泡排序对学生数组进行按分数从大到小排序。在 `printSortedStudents` 函数中,输出排序后每个学生的信息到屏幕。在 `writeStudentsToFile` 函数中,将排序后的学生信息全部写入到文件中。在 `readStudentsFromFile` 函数中,从文件中读取所有学生信息输出到屏幕。在 `main` 函数中,依次调用上述函数,完成任务的实现。
阅读全文