C语言
时间: 2023-06-22 19:30:16 浏览: 42
好的,下面是基于C语言的实现:
首先,我们需要定义一个结构体类型 `Student` 来存储学生的信息,包括学号、姓名、性别和成绩四个属性。
```c
struct Student {
int id; // 学号
char name[20]; // 姓名
char gender; // 性别
float score; // 成绩
};
```
接下来,我们需要实现三个功能。
1. 从文本文件导入学生的数据
我们可以利用 `fopen` 函数打开指定的文本文件,并使用 `fscanf` 函数从文件中逐行读取学生信息,将其存储到一个 `Student` 类型的数组中。
```c
int importData(char* filename, struct Student* students, int max_num) {
FILE* fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s\n", filename);
return 0;
}
int i = 0;
while (i < max_num && !feof(fp)) {
fscanf(fp, "%d %s %c %f", &students[i].id, students[i].name, &students[i].gender, &students[i].score);
i++;
}
fclose(fp);
return i;
}
```
2. 显示给定序号学生信息
我们可以利用一个 `displayStudent` 函数来显示指定学生的信息,根据输入的学生序号,在学生数组中找到相应的学生信息并输出。
```c
void displayStudent(struct Student* students, int num, int id) {
if (id < 1 || id > num) {
printf("Invalid student number %d!\n", id);
return;
}
struct Student s = students[id-1];
printf("Student %d: %s (%c) %.1f\n", s.id, s.name, s.gender, s.score);
}
```
3. 输出学生成绩表
我们可以利用一个 `displayScores` 函数来输出学生成绩表,按照成绩从高到低排序并输出。
```c
void displayScores(struct Student* students, int num) {
// 冒泡排序
for (int i = 0; i < num-1; i++) {
for (int j = 0; j < num-i-1; j++) {
if (students[j].score < students[j+1].score) {
struct Student tmp = students[j];
students[j] = students[j+1];
students[j+1] = tmp;
}
}
}
// 输出成绩表
printf(" ID NAME GENDER SCORE\n");
printf("========================================\n");
for (int i = 0; i < num; i++) {
struct Student s = students[i];
printf("%4d %-20s %c %.1f\n", s.id, s.name, s.gender, s.score);
}
}
```
最后,我们可以将这些函数组合起来,实现一个完整的程序。
```c
#include <stdio.h>
struct Student {
int id;
char name[20];
char gender;
float score;
};
int importData(char* filename, struct Student* students, int max_num) {
FILE* fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s\n", filename);
return 0;
}
int i = 0;
while (i < max_num && !feof(fp)) {
fscanf(fp, "%d %s %c %f", &students[i].id, students[i].name, &students[i].gender, &students[i].score);
i++;
}
fclose(fp);
return i;
}
void displayStudent(struct Student* students, int num, int id) {
if (id < 1 || id > num) {
printf("Invalid student number %d!\n", id);
return;
}
struct Student s = students[id-1];
printf("Student %d: %s (%c) %.1f\n", s.id, s.name, s.gender, s.score);
}
void displayScores(struct Student* students, int num) {
// 冒泡排序
for (int i = 0; i < num-1; i++) {
for (int j = 0; j < num-i-1; j++) {
if (students[j].score < students[j+1].score) {
struct Student tmp = students[j];
students[j] = students[j+1];
students[j+1] = tmp;
}
}
}
// 输出成绩表
printf(" ID NAME GENDER SCORE\n");
printf("========================================\n");
for (int i = 0; i < num; i++) {
struct Student s = students[i];
printf("%4d %-20s %c %.1f\n", s.id, s.name, s.gender, s.score);
}
}
int main() {
struct Student students[100];
int num = importData("students.txt", students, 100);
displayStudent(students, num, 3);
printf("\n");
displayScores(students, num);
return 0;
}
```
在上述程序中,我们首先从 `students.txt` 文件中导入学生信息,然后分别显示第3个学生的信息和所有学生的成绩表。