杭州OJ第2023题,求平均成绩

这是一个C++程序,用于读取多个测试实例,每个实例包含学生人数和课程数,然后计算每个学生的平均成绩、每门课程的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。程序通过双重循环处理输入数据,计算并输出结果,格式化输出以满足题目要求。
摘要由CSDN通过智能技术生成

题目:假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。

input:输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。

output:对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。

#include<stdio.h>
#include <math.h>
int main()
{
    int subject,student,i,j;
    while(scanf("%d %d",&student,&subject)!=EOF)/*输入学科数目和学生数目*/
      {  int shuzu[student][subject];
         /*建立一个二维数组,每行代表学生,每列代表各个学科*/
         double avg_student[student],avg_subject[subject];
   /*建立一个存储平均数的数列,之后打印各个数列就行(这里要用double,用float会错)*/
         int good_student=0,count=0;/*记录成绩都大于平均数的学生(暂时都称为好学生)*/
         double sum_student=0,sum_subject=0;/*这里也是要double*/
         for(i=0;i<student;i++)
        {
            for(j=0;j<subject;j++)
            {
               scanf("%d",&shuzu[i][j]);/*输入成绩*/
               sum_student+=shuzu[i][j];/*计算每个学生的成绩和*/
            }
            avg_student[i]=sum_student/subject;/*将平均值给平均数组*/
            sum_student=0;/*算出平均数后记得清零*/
            if(i==student-1){printf("%.2f",avg_student[i]);}
            else{printf("%.2f ",avg_student[i]);}
   /*这是控制输出的格式,按照题目中默认要求,最后一个输出不能出现空格,不然会报错*/
        }printf("\n");
         for(i=0;i<subject;i++)
        {
            for(j=0;j<student;j++)
            {
               sum_subject+=shuzu[j][i];
            }
            avg_subject[i]=sum_subject/student;
            sum_subject=0;if(i==subject-1){printf("%.2f",avg_subject[i]);}
            else{printf("%.2f ",avg_subject[i]);}
        }printf("\n");/*同上操作算出每个学科的平均分*/
         for(i=0;i<student;i++)
        {
            for(j=0;j<subject;j++)
            {
               if(shuzu[i][j]<avg_subject[j]){count++;}
            }
            if(count==0){good_student++;}
            count=0;
        }
//拿一个学生(相同的i)的成绩与各个平均分比较,如果小了说明不合格,计算就加一,当计数为0
//说明合格,好学生就能加一。
          printf("%d\n",good_student);
           good_student=0;/*好学生要清零,清零不注意第一次能对,连续几次可能就出问题*/
           printf("\n");
   }
   return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值