1、用数组结构存放10个学生各门课的成绩(假设有3门课的成绩)
2、调用子函数求每个学生的总分。
3、调用子函数统计每门课的最高分、最低分。
4、调用子函数求每门课的平均成绩和每个学生的平均成绩。
我用5个学生的成绩做了一个实现,供参考:
#include <stdio.h>
#define NUM 5
struct stuscore{
int chinese;
int math;
int english;
};
//计算学生最高分
void getStuTotalScore(stuscore * stus,int * total,int n){
int i;
for(i=0;i<n;i++){ //计算每个学生的最高分
total[i]+= stus[i].chinese+stus[i].math+stus[i].english;
// printf("total[%d]=%d\n",i,total[i]);
}
};
//计算每门功课最高分最低分
void getMaxMin(stuscore * stus,int * chinese,int * math,int * english,int n){
int i,j;
chinese[0]=chinese[1] = stus[0].chinese;
math[0] = math[1] = stus[0].math;
english[0] = english[1] = stus[0].english;
for(i=0;i<n;i++){ //计算每个学生的最高分
// printf("i=%d\n",i);
if(chinese[0]<stus[i].chinese){
chinese[0]=stus[i].chinese;
}
if(chinese[1]>stus[i].chinese){
chinese[1]=stus[i].chinese;
}
if(math[0]<stus[i].math){
math[0]=stus[i].math;
}
if(math[1]>stus[i].math){
math[1]=stus[i].math;
}
if(english[0]<stus[i].english){
english[0]=stus[i].english;
}
if(english[1]>stus[i].english){
english[1]=stus[i].english;
}
}
};
//计算每门功课平均分与每个学生平均分
void getAvgScore(stuscore * stus,double * classavg,double* stuavg,int n){
int i;
for(i=0;i<n;i++){
classavg[0]+=stus[i].chinese;
classavg[1]+=stus[i].math;
classavg[2]+=stus[i].english;
stuavg[i]=stus[i].chinese+stus[i].math+stus[i].english;
}
classavg[0]/=n;
classavg[1]/=n;
classavg[2]/=n;
stuavg[i]/=3;
}
int main(void){
stuscore scores[NUM]={{90,80,85},{70,75,80},{65,70,75},{85,50,60},{80,90,70}}; //成绩
int total[NUM]={0}; //存储5个学生的最高分
getStuTotalScore(scores,total,NUM);
printf("学生的总分依次为:\n");
int i;
getStuTotalScore(scores,total,NUM);
for(i=0;i<NUM;i++){
printf("%d ",total[i]);
}
printf("\n\n");
int chinese[2]={0},math[2]={0},english[2]={0}; //语数外三门功课最高分和最低分数组 下标0存放最高分,小标1存放最低分
// int **c =(int**)chinese;
// int **m = (int**)math;
// int **e = (int**)english;
getMaxMin(scores,chinese,math,english,NUM);
printf("语文最高分:%d, 语文最低分:%d.\n",chinese[0],chinese[1]) ;
printf("数学最高分:%d, 数学最低分:%d.\n",math[0],math[1]) ;
printf("英语最高分:%d, 英语最低分:%d.\n",english[0],english[1]) ;
double avg[3]={0}; //存储3门功课的平均分
double stuavg[NUM]={0};
getAvgScore(scores,avg,stuavg,NUM);
printf("\n语文平均分为:%.2lf.\n",avg[0]);
printf("数学平均分为:%.2lf.\n",avg[1]);
printf("英语平均分为:%.2lf.\n",avg[2]);
printf("\n学生的平均分依次为:\n");
for(i=0;i<NUM;i++){
printf("%.2lf ",stuavg[i]);
}
return 0;
}