二维数组的求和,最大值,最小值,应用

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;
    
}