C——求平均成绩

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

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

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

Sample Input

2 2
5 10
10 20

Sample Output

7.50 15.00
7.50 15.00
1

题目解析:

简单来说:首先,多组数据输入,第一行输入两个整数n,m,n代表学生人数;m代表有m科学科;然后输出,每行代表每个学生的各科成绩,每列代表各个学生的该科目分数
例如
学生1第一科分数、学生1第二科分数、学生1第三科分数 学生1第m科分数
学生2第一科分数、学生2第二科分数、学生2第三科分数 学生1第m科分数
学生3第一科分数、学生3第二科分数、学生3第三科分数 学生1第m科分数
……
学生n第一科分数、学生n第二科分数、学生n第三科分数 学生n第m科分数
以此类推
要求输出三行:
第一行:输出n个学生的平均成绩,结果保留两位小数
第二行:输出m科分数的平均成绩,结果保留两位小数
第三行:输出一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。

思路分析:

简单来说:首先,多组数据输入,第一行输入两个整数a(学生数目),b(学科科目数);然后,以此输入,一行一行的输入,表示每一个学生的各科分数;每行表示每个学生的各科分数,每列表示单独一科,每个学生的分数;

代码如下:

#include<stdio.h>
int main()
{
    int a[50][50];
    double x,y,aver1[50],aver2[50],sum;         //aver1该数组存储每个学生的各科的平均成绩;aver2该数组存储每科学科的平均成绩
    int i,j,n,m,count,p;
    while(~scanf("%d%d",&n,&m))
    {
        count=0;                                //表示计数,记录那些各科都高于平均分的学生的人数

        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
                scanf("%d",&a[i][j]);           //录入每个学生的各科成绩

        for(i=0;i<n;i++)
        {
            sum=0;
            for(j=0;j<m;j++)
                sum+=a[i][j];
            aver1[i]=sum/m;                     //将每个学生的各科的平均成绩给存储到aver1数组中
        }

        for(j=0;j<m;j++)
        {
            sum=0;
            for(i=0;i<n;i++)
                sum+=a[i][j];
            aver2[j]=sum/n;                     //将每科学科的平均成绩给存储到aver2数组中
        }

        for(i=0;i<n;i++)
        {
            p=1;
            for(j=0;j<m;j++)                    //这个for循环表示每个学生的所有科目的成绩进行与aver2数组存储的各科科目平均分进行比较
                if(a[i][j]<aver2[j])            //如果所有学生的各科学科分数都比各个学科的平均分要低的话
                {
                    p=0;                        //p=0;
                    break;                      //跳出循环
                }
            if(p)                               //如果p!=0的话,即有学生的各科成绩都比各科的平均分要高或者一样
                count++;                        //人数加一
        }

        for(i=0;i<n-1;i++)
            printf("%.2lf ",aver1[i]);          //输出格式是保留两位小数,这里是将前n-1位学生各科学科的平均分输出,这里每一科成绩之后都会有个空格
        printf("%.2lf\n",aver1[i]);             //输出最后一位学生的各科学科的平均分,这里没有空格

        for(i=0;i<m-1;i++)
            printf("%.2lf ",aver2[i]);          //同理,输出格式是保留两位小数,这里输出的是前m-1科学科的平均分,这里每一科学科的平均分最后都会有个空格
        printf("%.2lf\n",aver2[i]);             //输出最后一科的学科平均分,这里的最后没有空格

        printf("%d\n\n",count);                 //输出count,也就是每科都超过各个学科的平均分的学生人数

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41264055/article/details/81273539