请用C语言编写该问题:【基本描述】 已知某班N个(N = 4)学生的基本情况已经存放在磁盘文件“student.txt(右键另存为)”中,文件的逻辑结构如下表所示(但实际存储中不含标题行): num name age s1 s2 s3 s4 950501 Zhang 20 78 88 82 950502 Wang 19 83 85 90 950503 Li 21 79 72 69 950504 Cheng 22 90 91 95 编写一个完整的程序,用结构体数组的方法表示该表,从上述文件中读入已知数据,然后计算每个学生3门课的总成绩,以上面表格形式(不含标题行,不用画线段),分别将学生的基本情况、计算结果输出到屏幕上(3门课的总成绩输出到各人的s4列中)。 【输出描述】 输出格式规定采用:printf("%6s %-6s %3d %6d %6d %6d %6d \n")
时间: 2024-02-14 13:08:06 浏览: 158
好的,下面是使用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX 4 // 定义学生数量
struct student { // 定义学生结构体
int num;
char name[10];
int age;
int s1;
int s2;
int s3;
int s4;
};
int main() {
FILE *fp;
struct student stu[MAX];
int i, sum;
fp = fopen("student.txt", "r"); // 打开文件
if(fp == NULL) { // 判断文件是否打开成功
printf("无法打开文件!\n");
exit(1);
}
// 读取数据并计算总分
for(i = 0; i < MAX; i++) {
fscanf(fp, "%d %s %d %d %d %d", &stu[i].num, stu[i].name, &stu[i].age, &stu[i].s1, &stu[i].s2, &stu[i].s3);
sum = stu[i].s1 + stu[i].s2 + stu[i].s3;
stu[i].s4 = sum;
}
fclose(fp); // 关闭文件
// 输出表格
printf("%6s %-6s %3s %6s %6s %6s %6s\n", "num", "name", "age", "s1", "s2", "s3", "s4");
for(i = 0; i < MAX; i++) {
printf("%6d %-6s %3d %6d %6d %6d %6d\n", stu[i].num, stu[i].name, stu[i].age, stu[i].s1, stu[i].s2, stu[i].s3, stu[i].s4);
}
return 0;
}
```
其中,`struct`关键字用于定义结构体,`fscanf()`函数用于从文件中读取数据,参数分别为文件指针、格式化字符串和变量地址。最后,使用`printf()`输出表格。注意,输出格式需要使用格式化字符串,其中`%6s`表示占6个字符的字符串,`%3d`表示占3个字符的整数。
阅读全文