5.有5个学生,每个学生有3门课程的成绩,从键盘输入学生数据(包括学号,姓名,3门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。
有5个学生,每个学生有3门课程的成绩,从键盘输入学生数据(包括学号,姓名,3门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。//类似于例10.4#include<stdio.h>#include<stdlib.h>#define SIZE 5struct Student_type{int num;char nam...
文章共2,538字 · 阅读需要大约9分钟
一键AI生成摘要,助你高效阅读
问答
·
5.有5个学生,每个学生有3门课程的成绩,从键盘输入学生数据(包括学号,姓名,3门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。
//类似于例10.4
#include<stdio.h>
#include<stdlib.h>
#define SIZE 5
struct Student_type
{
int num;
char name[10];
float score1;
float score2;
float score3;
float avg;
}stud[SIZE];
void save()//定义函数save,向文件输入SIZE个学生的数据
{
FILE *fp;
int i;
if((fp=fopen("stud.dat","wb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;i<SIZE;i++)
{
if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1)
{
printf("file write error\n");
}
}
fclose(fp);
}
int main()
{
FILE *fp;
int i;
for(i=0;i<SIZE;i++)//计算每个学生的平均分
{
printf("请输入第%d个学生的学号、姓名和三门课的成绩:",i+1);
scanf("%d%s%f%f%f",&stud[i].num,stud[i].name,&stud[i].score1,&stud[i].score2,&stud[i].score3);
stud[i].avg=(stud[i].score1+stud[i].score2+stud[i].score3)/3;
}
save();
fp=fopen("stud.dat","rb");
for(i=0;i<SIZE;i++)//为了验证磁盘文件stu.dat中是否已存在此数据,用for语句从stu.dat文件中读入数据,然后向屏幕上输出
{
fread(&stud[i],sizeof(struct Student_type),1,fp);
printf("第%d个学生的学号、姓名和三门课的成绩以及三门课的平均分为:",i+1);
printf("%-4d %-10s %-10.2f %-10.2f %-10.2f %-10.2f\n",stud[i].num,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].avg);
}
fclose(fp);//关闭文件stud,防止它被误用
return 0;
}
在VS2019下,需将源文件的fopen和scanf做些修改:
//类似于例10.4
#include<stdio.h>
#include<stdlib.h>
#define SIZE 5
struct Student_type
{
int num;
char name[10];
float score1;
float score2;
float score3;
float avg;
}stud[SIZE];
void save()//定义函数save,向文件输入SIZE个学生的数据
{
FILE* fp;
int i;
fopen_s(&fp, "stud.dat", "wb");
if (fp == NULL)
{
printf("can't open file!\n");
exit(0);
}
for (i = 0; i < SIZE; i++)
{
if (fwrite(&stud[i], sizeof(struct Student_type), 1, fp) != 1)
{
printf("file write error\n");
}
}
fclose(fp);
}
int main()
{
FILE* fp;
int i;
for (i = 0; i < SIZE; i++)//计算每个学生的平均分
{
printf("请输入第%d个学生的学号、姓名和三门课的成绩:", i + 1);
scanf_s("%d%s%f%f%f", &stud[i].num, stud[i].name, (unsigned int)sizeof(stud[i].name), &stud[i].score1, &stud[i].score2, &stud[i].score3);
stud[i].avg = (stud[i].score1 + stud[i].score2 + stud[i].score3) / 3;
}
save();
fopen_s(&fp, "stud.dat", "rb");
for (i = 0; i < SIZE; i++)//为了验证磁盘文件stu.dat中是否已存在此数据,用for语句从stu.dat文件中读入数据,然后向屏幕上输出
{
fread(&stud[i], sizeof(struct Student_type), 1, fp);
printf("第%d个学生的学号、姓名和三门课的成绩以及三门课的平均分为:", i + 1);
printf("%-4d %-10s %-10.2f %-10.2f %-10.2f %-10.2f\n", stud[i].num, stud[i].name, stud[i].score1, stud[i].score2, stud[i].score3, stud[i].avg);
}
fclose(fp);//关闭文件stud,防止它被误用
return 0;
}
更多推荐
已为社区贡献4条内容
所有评论(0)