7-2 求矩阵各行元素之和

分数 15

全屏浏览题目

切换布局

作者 C课程组

单位 浙江大学

本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

输入格式:

输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间

以空格分隔。

输出格式:

每行输出对应矩阵行元素之和。

输入样例:

3 2
6 3
1 -8
3 12

输出样例:

9
-7
15

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

我的答案:

这里要感谢CSDN博主:Cl363指出的错误欢迎大家指正,错误代码如下

错误代码:

C语言:



#include <stdio.h>
 
int main() {
    int m, n;
    scanf("%d %d", &m, &n);
 
    for(int i = 0; i < m; i++) {
        int sum = 0; // 用于存储当前行的和
        for(int j = 0; j < n; j++) {
            int num;
            scanf("%d", &num);
            sum += num;
        }
        printf("%d\n", sum);
    }
 
    return 0;
}

C++:

#include <iostream>
using namespace std;
 
int main() {
    int m, n;
    cin >> m >> n;
 
    for(int i = 0; i < m; i++) {
        int sum = 0; // 用于存储当前行的和
        for(int j = 0; j < n; j++) {
            int num;
            cin >> num;
            sum += num;
        }
        cout << sum << endl;
    }
 
    return 0;
}

 错误原因:
就是评论说的每次超过2行直接输出其实,错误的原因就在于我错误的认为每一行输入后直接输出求和答案,而实际上确实先完整的输入矩阵然后再对其每行求和。这就是为什么错误的原因,因为从逻辑上说我的代码逻辑和实际要完成的工作不一致。导致的。

最初提供的代码中,确实是在读取每行数据后立即计算并输出了该行的和,这与题目要求的“先完整输入数组,然后计算每行的和”不符。这种实现方式虽然能够计算出每行的和,但它并没有首先存储整个矩阵的数据。

为了符合题目的要求,使用数组存储整个矩阵数据,然后再进行逐行求和,确实是更合适的解决方案。您后来提供的代码版本正是这样做的,它首先读取整个矩阵到数组中,然后再计算和输出每行的和。

正确答案:

C语言:

#include <stdio.h>

int main() {
    int m, n;
    scanf("%d %d", &m, &n);

    int matrix[m][n];
    for(int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }

    for(int i = 0; i < m; i++) {
        int sum = 0;
        for(int j = 0; j < n; j++) {
            sum += matrix[i][j];
        }
        printf("%d\n", sum);
    }

    return 0;
}

运行结果:

 

C++:

#include <iostream>
#include<vector>
using namespace std;
int main()
{
    int m, n;
    cin >> m >> n;
    vector<vector<int>> matrix(m, vector<int>(n));
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cin >> matrix[i][j];
        }
    }
    for (int i = 0; i < m; i++) {
        int sum = 0;
        for (int num : matrix[i]) {
            sum += num;
        }
        cout << sum << endl;
    }
   
}

解题过程

  1. 读取矩阵的大小: 读取mn的值,确定矩阵的大小。

  2. 遍历和计算: 通过外层循环遍历矩阵的每一行,内层循环遍历每一行的每一个元素,并进行累加。使用一个变量sum来存储当前行的和。

  3. 输出结果: 将每一行的和输出,每一行输出一个和。

通过这道题目,我们可以学习到二维数组的操作和遍历,同时也能够加强对循环结构和基本输入输出的理解和运用。

总结:

从这道题目中,我们可以学习和加深以下几点的理解和应用:

  1. 基本的二维数组操作:题目要求对一个二维矩阵进行操作,所以我们需要了解如何在C或C++中定义和操作二维数组。

  2. 嵌套循环的应用:为了遍历二维数组中的每一个元素,我们使用了双重循环,这有助于加强对嵌套循环结构的理解。

  3. 基本的输入输出:这道题目提供了对于如何从标准输入读取二维矩阵数据,以及如何将结果输出到标准输出的实践。

  4. 累加操作:通过这道题目,我们可以练习使用累加器来计算总和。这是编程中常见的操作,特别是在数据处理和统计中。

  5. 问题分解:这道题目教我们如何将一个问题分解成更小的、可管理的部分。例如,我们可以首先考虑如何读取矩阵,然后考虑如何计算每行的和,最后考虑如何输出结果。

  6. 增强问题解决能力:通过解决这样的问题,我们可以练习和增强自己分析问题和解决问题的能力。

总的来说,这道题目是一个基本的编程练习,涉及到了数组、循环和输入输出等基本编程概念。通过解决这样的问题,学生可以加强对这些基本概念的理解和应用能力。

学到了什么?

  1. 理解题目要求:在开始编写代码之前,彻底理解题目的要求至关重要。这有助于确定正确的逻辑和程序结构。例如,在这个问题中,题目要求先输入整个数组,然后计算每行的和。明确这一点是关键。

  2. 数据存储的重要性:这个问题展示了在处理数据之前首先存储它们的重要性。在某些情况下,需要先收集所有数据,然后再进行计算或处理。

  3. 编程风格和逻辑清晰度:清晰且有组织的代码能够更容易地被理解和调试。在您的第二个代码示例中,通过使用数组来存储整个矩阵,代码的逻辑更加清晰和直观。

  4. 灵活性和适应性:能够根据需要调整您的代码逻辑是一个重要的技能。在遇到问题时,您能够识别问题所在,并作出必要的调整。

  5. 测试和验证:编写代码后进行测试和验证是必不可少的。这有助于发现并修复可能在开发过程中未被注意到的问题。

  6. 从错误中学习:编程中犯错误是正常的,关键是从中学习。每个错误都是一个学习机会,可以帮助您成为更好的程序员。

通过这个经验,您不仅解决了一个具体的编程问题,还学到了如何更好地理解问题、组织代码、调试,并从错误中吸取教训。这些都是编程和问题解决过程中不可或缺的技能。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值