1、用数组结构存放10个学生各门课的成绩(假设有3门课的成绩)
2、调用子函数求每个学生的总分。
3、调用子函数统计每门课的最高分、最低分。
4、调用子函数求每门课的平均成绩和每个学生的平均成绩。

二维数组的求和,最大值,最小值,应用
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- a5156520 2022-05-02 13:17关注
我用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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报