c语言实现成绩管理问题。有N个学生,他们的成绩如下表: 姓名 高等数学 英语 计算机 电学 张三 98 77 88 67 李四 88 90 99 56 王五 67 76 58 77 关六 66 77 77 80 ... ... ... ... ... (1)根据表中数据信息,简述你将采用的数据存储或表示的方式,并组出具体的数据类型定义; (2)建立一个数据文件st.txt,将以上学生成绩数据写入文件中; (3)从文件st.txt中读数据,计算每个学生的总成绩,并按总成绩排序,结果写入文件st_s.dat中; (4)查找并输出不及格学生的姓名、相应的课程名和成绩。
时间: 2024-01-03 10:05:52 浏览: 160
学生成绩管理 基于C语言
好的,针对你的问题,我提供以下解答:
1. 数据存储或表示方式:可以采用结构体数组的方式存储每个学生的姓名和各科成绩。具体的数据类型定义如下:
```c
struct student {
char name[20];
int math_score;
int english_score;
int computer_score;
int electric_score;
};
```
2. 建立数据文件:可以通过文件操作函数将学生成绩数据写入文件中。具体示例如下:
```c
#include <stdio.h>
int main() {
struct student stu[4] = {
{"张三", 98, 77, 88, 67},
{"李四", 88, 90, 99, 56},
{"王五", 67, 76, 58, 77},
{"关六", 66, 77, 77, 80}
};
FILE *fp = fopen("st.txt", "w");
for (int i = 0; i < 4; i++) {
fprintf(fp, "%s %d %d %d %d\n", stu[i].name, stu[i].math_score,
stu[i].english_score, stu[i].computer_score, stu[i].electric_score);
}
fclose(fp);
return 0;
}
```
3. 读取数据并计算总成绩:可以通过文件操作函数从st.txt中读取学生成绩数据,并计算每个学生的总成绩,并按照总成绩从高到低排序,最后将结果写入文件st_s.dat中。具体示例如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
char name[20];
int math_score;
int english_score;
int computer_score;
int electric_score;
int total_score;
};
int cmp(const void *a, const void *b) {
struct student *s1 = (struct student *)a;
struct student *s2 = (struct student *)b;
return s2->total_score - s1->total_score;
}
int main() {
struct student stu[4];
FILE *fp = fopen("st.txt", "r");
for (int i = 0; i < 4; i++) {
fscanf(fp, "%s %d %d %d %d\n", stu[i].name, &stu[i].math_score,
&stu[i].english_score, &stu[i].computer_score, &stu[i].electric_score);
stu[i].total_score = stu[i].math_score + stu[i].english_score +
stu[i].computer_score + stu[i].electric_score;
}
fclose(fp);
qsort(stu, 4, sizeof(struct student), cmp);
fp = fopen("st_s.dat", "w");
for (int i = 0; i < 4; i++) {
fprintf(fp, "%s %d\n", stu[i].name, stu[i].total_score);
}
fclose(fp);
return 0;
}
```
4. 查找不及格学生信息:可以从st.txt文件中读取学生成绩数据,查找不及格学生的姓名、课程名和成绩,并输出到屏幕上。具体示例如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
char name[20];
int math_score;
int english_score;
int computer_score;
int electric_score;
};
int main() {
struct student stu[4];
FILE *fp = fopen("st.txt", "r");
for (int i = 0; i < 4; i++) {
fscanf(fp, "%s %d %d %d %d\n", stu[i].name, &stu[i].math_score,
&stu[i].english_score, &stu[i].computer_score, &stu[i].electric_score);
}
fclose(fp);
printf("以下是不及格学生的信息:\n");
for (int i = 0; i < 4; i++) {
if (stu[i].math_score < 60) {
printf("%s 数学 %d\n", stu[i].name, stu[i].math_score);
}
if (stu[i].english_score < 60) {
printf("%s 英语 %d\n", stu[i].name, stu[i].english_score);
}
if (stu[i].computer_score < 60) {
printf("%s 计算机 %d\n", stu[i].name, stu[i].computer_score);
}
if (stu[i].electric_score < 60) {
printf("%s 电学 %d\n", stu[i].name, stu[i].electric_score);
}
}
return 0;
}
```
阅读全文