某班有5个学生,三门课,分别编写3个函数实现以下要求:
1.求各门课的平均分
2.找出有两门以上不及格的学生,并输出其学号和不及格的课程的成绩
3.找出三门课平均成绩在85-90分的学生,并输出其学号和姓名,主程序输入5个学生的信息,然后调用上述函数输出结果
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5//5个学生
#define M 3//3门课程
typedef struct student{
int num;
char name[20];
int score[M];
}stu;
void WandR(char *filename,stu ss[],stu tt[]);
void CalAver(stu tt[],double aver[]);
void Findnopass(stu tt[]);
void FindGoodStu(stu tt[]);
int main(){
int i;
double aver[M];//各门课的平均分
stu ss[N],tt[N];//定义结构数组,数组中每一个元素都是结构类型
char filename[20];
printf("请输入要存放的文件名:\n");
scanf("%s",filename);
printf("请输入学生信息:\n");
for(i=0;i<N;i++){
scanf("%d%s%d%d%d",&ss[i].num,ss[i].name,&ss[i].score[0],&ss[i].score[1],&ss[i].score[2]);
}
WandR(filename,ss,tt);
printf("各门课的平均成绩:\nscore1\tscore2\tscore3\t\n");
CalAver(tt,aver);
printf("%.2lf\t%.2lf\t%.2lf\t",aver[0],aver[1],aver[2]);
Findnopass(tt);
FindGoodStu(tt);
return 0;
}
void WandR(char *filename,stu ss[],stu tt[]){
FILE *fp;
if((fp=fopen(filename,"wb"))==NULL){
printf("文件打开失败!\n");
exit (0);
}
if(fwrite(ss,sizeof(stu),N,fp)!=N){
printf("写入失败!\n");
exit (0);
}
if(fclose(fp)){
printf("不能关闭文件!\n");
exit (0);
}
if((fp=fopen(filename,"rb"))==NULL){
printf("文件打开失败2!\n");
exit (0);
}
if((fread(tt,sizeof(stu),N,fp))!=N){
printf("文件读出失败!\n");
exit (0);
}
if(fclose(fp)){
printf("不能关闭文件2!\n");
exit (0);
}
}
void CalAver(stu tt[],double aver[]){
double sum;
int i,j;
for(i=0;i<M;i++){
sum=0;
for(j=0;j<N;j++){
sum+=tt[j].score[i];
}
aver[i]=sum/N;
}
}
void Findnopass(stu tt[]){
int i,j,n;
printf("\n两门及以上挂科同学:\n");
for(i=0;i<N;i++){
n=0;
for(j=0;j<M;j++){
if(tt[i].score[j]<60){
n++;
}
if(n>=2){/*显示挂科详情*/
printf("%d\t",tt[i].num);
for(j=0;j<M;j++){
if(tt[i].score[j]<60){
printf("%d\t",tt[i].score[j]);
}
}
printf("\n");
}
}
}
}
void FindGoodStu(stu tt[]){
int i,j;
double sum,aver;
printf("\n平均成绩在85-90分的学生:\nnum\tname\t\n");
for(i=0;i<N;i++){
sum=0;
for(j=0;j<M;j++){
sum+=tt[i].score[j];
}
aver=sum/M;
if(aver>=85&&aver<=90){
printf("%d\t%s\n",tt[i].num,tt[i].name);
}
}
}