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列中)。
时间: 2024-02-10 09:08:12 浏览: 26
好的,这是您的问题:下面是实现您的需求的C语言代码示例:
```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char num[10];
char name[20];
int age;
int s1;
int s2;
int s3;
int s4;
}STUDENT;
int main()
{
FILE *fp;
STUDENT stu[4];
int i;
fp=fopen("student.txt","r");
if(fp==NULL)
{
printf("打开文件失败!");
return 0;
}
for(i=0;i<4;i++)
{
fscanf(fp,"%s %s %d %d %d %d",stu[i].num,stu[i].name,&stu[i].age,&stu[i].s1,&stu[i].s2,&stu[i].s3);
stu[i].s4=stu[i].s1+stu[i].s2+stu[i].s3;
}
printf("num\tname\tage\ts1\ts2\ts3\ts4\n");
for(i=0;i<4;i++)
{
printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].age,stu[i].s1,stu[i].s2,stu[i].s3,stu[i].s4);
}
fclose(fp);
return 0;
}
```
在上述代码中,我们首先定义了一个`STUDENT`结构体来表示每个学生的基本情况。然后,我们使用`fopen()`函数打开名为`student.txt`的文件,并使用`fscanf()`函数从文件中读取每个学生的数据,同时计算每个学生的3门课的总成绩。接着,我们使用`printf()`函数将学生的基本情况和总成绩输出到屏幕上,并使用制表符`\t`来对齐各列。
希望这个代码示例能够帮助您解决问题。