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


/*
输入:n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个数据
输出;对于每个测试输出三行数据;
第一行包括n个数据表示n个学生的平均成绩;
第二行包括m个数据表示m门课的平均成绩;
第三行是一个整数,表示该班各科成绩均大于等于平均成绩的学生数
3 2
1 2
3 4
6 8

1.50 3.50 7.00
3.33 4.67
1


*/include <iostream>
using namespace std;
double a[51][6];
double sa[51];
double ca[6];

这里涉及到小数点所以我们用浮点型,至于求的平均值为什么用数组,因为我们需要每一行,每一列的平均数据,这是单个变量不能呈现的
int main() {
    int n, m;
    while (cin >> n >> m) {
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                cin >> a[i][j];
            }
        }

到这里第一个for循环完成,我们给每一个数据都输入了值

for (int i = 0; i < n; ++i) {
    sa[i] = 0;
    for (int j = 0; j < m; ++j) {
        sa[i] += a[i][j];
    }
    sa[i] /= m;
}

接下来我们求每一行的平均值,第二个for循环开始,这个循环每开始一次我们都要得到每一行的平均值所以 sa[i] /= m;这个表达式放在最后,sa[i] = 0;并且这个表达式一定要放到循环里面的开头,确保每次循环都初始化一下,至此每一行的平均数都被储存在数组sa[i]里面了,接下来就可以使用for 循环将他打印出来了!在此之前我们要先把列的平均值求出来

for (int i = 0; i < m; ++i) {
    ca[i] = 0;
    for (int j = 0; j < n; ++j) {
        ca[i] += a[j][i];
    }
    ca[i] /= n;
}

这时候就有意思了我们先把矩阵中的二维给固定住,并且规定范围通过循环一维的值来得到每一列的平均值。总结一下,求平均值的过程是这样的,我们首先定义一个一维的浮点型数组,将每一行的数存储到数组中得到sa[i],这个i的范围是我们自己规定的n,然后我们将这数组中的每一个数都除n,这样每个平均数就都存到数组里了,我们就可以访问了比如像这样

cout<<sa[2]<<endl;或者用for循环将他们全打印出来

接下来我们需要找出一个整数,这个整数是学生数也就是行数,我们需要将每一行的每一个元素与其相同列数的ca平均值进行判定,这时候我们依然利用for循环进行枚举就可以,并且注意判定时放在嵌套for循环里就可以了,这个有一点绕

int cnt = 0;
for (int i = 0; i < n; ++i) {                 
    int sum = 0;
    for (int j = 0; j < m; ++j) {
        sum += (a[i][j] >= ca[j]);        判断符号得到的数值是1或0所以这玩意是可以直接累加的啊)
    }                                                  (这里注意嵌套的使用就可以将行和列的数值区分开,因为我                                                         们可以先在大的for循环里固定一个维度)
    if (sum == m) {
        ++cnt;
    }
}

这里面cnt 代表学生的数量因此不能放循环里面,而sum则不同,sum是用来判定每一列成绩是否达标的,只有sum值累加到跟列数相同时,cnt的数值才会累加

最后就是输出了

    for (int i = 0; i < n; ++i) {
        if (i) {
            cout << ' ';                     这里的意思是只要i不为0就输出一个空行
        }
        printf("%.2lf", sa[i]);            在保留两位小数是用这个printf
    }
    cout << endl;

    for (int i = 0; i < m; ++i) {
        if (i) {
            cout << ' ';
        }
        printf("%.2lf", ca[i]);
    }
    cout << endl;
    cout << cnt << endl;
}

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较典型的计算题目,我可以为您提供一份 C++ 代码,如下所示: ```c++ #include <iostream> using namespace std; int main() { int n, m; double score[50][5]; // 存储学生成绩 double stuAvg[50] = {0}; // 存储每个学生平均成绩 double courseAvg[5] = {0}; // 存储每门平均成绩 // 输入学生成绩 cout << "请输入学生人数n:"; cin >> n; cout << "请输入每个学生试科目数m:"; cin >> m; cout << "请按照顺序输入每个学生成绩:" << endl; for (int i = 0; i < n; i++) { cout << "请输入第" << i + 1 << "个学生成绩:"; for (int j = 0; j < m; j++) { cin >> score[i][j]; stuAvg[i] += score[i][j]; courseAvg[j] += score[i][j]; } stuAvg[i] /= m; // 计算每个学生平均成绩 } // 计算每门平均成绩 for (int i = 0; i < m; i++) { courseAvg[i] /= n; } // 统计各科成绩大于等于平均成绩学生数量 int count = 0; for (int i = 0; i < n; i++) { bool flag = true; for (int j = 0; j < m; j++) { if (score[i][j] < courseAvg[j]) { flag = false; break; } } if (flag) { count++; } } // 输出结果 cout << "每个学生平均成绩为:"; for (int i = 0; i < n; i++) { cout << stuAvg[i] << " "; } cout << endl; cout << "每门平均成绩为:"; for (int i = 0; i < m; i++) { cout << courseAvg[i] << " "; } cout << endl; cout << "各科成绩大于等于平均成绩学生数量为:" << count << endl; return 0; } ``` 该代码中,我们使用了一个二维数组 `score` 来存储每个学生成绩,同时使用两个一维数组 `stuAvg` 和 `courseAvg` 分别存储每个学生平均成绩每门平均成绩。在程序的主函数中,我们首先读入学生成绩,然后计算每个学生平均成绩每门平均成绩,最后统计各科成绩大于等于平均成绩学生数量,并输出结果。 希望这份代码可以帮助到您,如果您有任何问题,请随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值