m0_68750748 2022-04-26 20:20 采纳率: 100%
浏览 81
已结题

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

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

  • 写回答

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;
        
    } 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月11日
  • 已采纳回答 11月3日
  • 请提交代码 4月26日
  • 创建了问题 4月26日