返回:贺老师课程教学链接
【项目2-用文本文件保存的学生名单】 文件score.dat中保存的是若干名学生的姓名和C语言课、高数和英语成绩。 (1)定义学生结构体,其中包含姓名、C++课、高数和英语成绩及总分数据成员。
//定义学生结构体 typedef struct { string name; double cpp; double math; double english; double total; }Student(2)用对象数组进行存储学生的成绩,读入成绩并计算总分;将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。
int main( ){ Student stud[200],t; //stud[200]为保存数据的对象数组 //从文件score.dat中读入数据,保存到对象数组中 //总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中 return 0; }[参考解答]
#include <stdio.h> #include <stdlib.h> typedef struct { char num[13]; char name[10]; double c; double math; double english; double total; } Student; int pass(Student); //判断一个学生的各门课是否通过 int main( ) { Student stud[200]; //stud[200]为保存数据的对象数组 int stu_num=0, total_sum=0, i=0; //从文件score.dat中读入数据,保存到对象数组中 FILE *fp; if((fp=fopen("score.dat","r"))==NULL) { printf("数据文件不存在!\n"); exit(1); } while(!feof(fp)) { fscanf(fp, "%s %s", stud[i].num, stud[i].name); fscanf(fp, "%lf %lf %lf", &stud[i].c,&stud[i].math, &stud[i].english); stud[i].total=stud[i].c+stud[i].math+stud[i].english; stu_num++; //在读入数据过程中,记录下来具体的学生人数和总分和 total_sum+=stud[i].total; i++; } fclose(fp); //总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中 if(stu_num>0) { double total_avg = total_sum / stu_num; fp=fopen("pass_score.dat","w"); if(!fp) { printf("无法输出到文件!\n"); exit(1); } for(i=0; i<stu_num; i++) { if(stud[i].total>total_avg&&pass(stud[i])) { fprintf(fp, "%s\t%s\t", stud[i].num, stud[i].name); fprintf(fp, "%.2lf\t%.2lf\t%.2lf\t", stud[i].c,stud[i].math, stud[i].english); fprintf(fp, "%.2lf\n", stud[i].total); } } fclose(fp); printf("请到文件pass_score.dat中查看名单\n"); } return 0; } int pass(Student s) //判断一个学生的各门课是否通过 { int p=0; if(s.c>=60 &&s.english>=60&&s.math>=60) p=1; return p; } 相关资源:敏捷开发V1.0.pptx