用C语言编写通过文件读取和写入25名同学的学号,姓名,所在专业,出生日期,、3 门课程的学分(高数 3 学分、 数字逻辑 2 学分、离散数学 4 学分)及对应成绩和绩点(绩点:0 - 5。成绩低于 60 分的绩点为 0,60 分对应绩点 1.0,61 分对应绩 点 1.1,……,99 分对应绩点 4.9,100 分对应绩点 5.0。 学分:绩点为 0 的对应学分记为 0,绩点为 1.0-5.0 之间的记为该课程学分)
时间: 2023-12-10 07:37:22 浏览: 67
以下是一个简单的C语言程序,可以实现通过文件读取和写入25名同学的学号,姓名,所在专业,出生日期,3门课程的学分和对应成绩、绩点。文件中每个学生的信息包括一行,各个字段之间用空格隔开。
```c
#include <stdio.h>
typedef struct {
char id[10]; // 学号
char name[20]; // 姓名
char major[20]; // 专业
char birth[20]; // 出生日期
int score1; // 高数成绩
int score2; // 数字逻辑成绩
int score3; // 离散数学成绩
float credit1; // 高数学分
float credit2; // 数字逻辑学分
float credit3; // 离散数学学分
float gpa; // 绩点
} Student;
// 计算绩点
float calc_gpa(int score) {
if (score < 60) {
return 0;
} else {
return (score - 50) * 0.1;
}
}
int main() {
FILE *fp;
Student students[25];
int i;
// 读取文件
fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("File not found.");
return 1;
}
for (i = 0; i < 25; i++) {
fscanf(fp, "%s %s %s %s %d %d %d", students[i].id, students[i].name, students[i].major, students[i].birth, &students[i].score1, &students[i].score2, &students[i].score3);
students[i].credit1 = (students[i].score1 >= 60) ? 3 : 0;
students[i].credit2 = (students[i].score2 >= 60) ? 2 : 0;
students[i].credit3 = (students[i].score3 >= 60) ? 4 : 0;
students[i].gpa = (calc_gpa(students[i].score1) * students[i].credit1 + calc_gpa(students[i].score2) * students[i].credit2 + calc_gpa(students[i].score3) * students[i].credit3) / (students[i].credit1 + students[i].credit2 + students[i].credit3);
}
fclose(fp);
// 写入文件
fp = fopen("result.txt", "w");
if (fp == NULL) {
printf("Failed to create file.");
return 1;
}
for (i = 0; i < 25; i++) {
fprintf(fp, "%s %s %s %s %.1f %.1f %.1f %.1f\n", students[i].id, students[i].name, students[i].major, students[i].birth, students[i].credit1, students[i].credit2, students[i].credit3, students[i].gpa);
}
fclose(fp);
return 0;
}
```
假设文件名为`students.txt`,格式如下:
```
1001 张三 计算机科学与技术 1999-01-01 80 75 88
1002 李四 软件工程 2000-02-02 70 65 78
...
```
程序会将读取的信息计算出每个学生的绩点和对应学分,然后将结果写入文件`result.txt`,格式如下:
```
1001 张三 计算机科学与技术 1999-01-01 3.0 2.0 4.0 3.3
1002 李四 软件工程 2000-02-02 0.0 0.0 4.0 1.3
...
```
阅读全文