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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: 为了出给定m×n矩阵各行元素之和,可以使用以下程序: ```python def row_sums(matrix): rows = len(matrix) cols = len(matrix[0]) sums = [0 for i in range(rows)] for i in range(rows): for j in range(cols): sums[i] += matrix[i][j] return sums ``` 这个程序首先定义了一个名为row_sums的函数,接受一个名为matrix的矩阵作为输入。它使用两个变量rows和cols来存储矩阵的行数和列数。然后定义一个名为sums的列表,用于存储每行元素之和。最后,使用两个循环遍历矩阵的每个元素,并在每次遍历时累加行和。最后返回sums列表。 ### 回答2: 此题可以用编程语言来解,下面以Python语言为例进行讲解。 首先,我们需要定义一个m×n的矩阵,并给每个元素赋值。这里我们可以使用嵌套列表来表示矩阵,如下所示: matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 这里我们定义了一个3×3的矩阵,分别为1到9的数字。 接下来,我们需要对每一行的元素进行和。我们可以使用一个循环来遍历矩阵的每一行,然后将该行中的元素进行累加和。具体实现如下所示: row_sum = [] # 定义一个存放各行元素和的列表 for row in matrix: # 遍历矩阵的每一行 sum = 0 # 初始化当前行的元素和为0 for num in row: # 遍历当前行的每个元素 sum += num # 将当前行的元素累加到元素和中 row_sum.append(sum) # 将当前行的元素和添加到列表中 print(row_sum) # 输出各行元素和的列表 在上述代码中,我们首先定义一个空列表row_sum用来存放各行元素和,然后使用for循环对矩阵的每一行进行遍历,再使用另一个for循环遍历当前行中的每个元素,将其累加到sum中作为当前行的元素和,最后将该元素和添加到row_sum列表中。最后,我们输出row_sum列表即可得到各行元素和。 运行上述代码,输出结果为[6, 15, 24],即第1行元素和为6、第2行元素和为15、第3行元素和为24。 综上,我们可以通过编写一个使用循环遍历矩阵并计算各行元素和的程序来对一个给定的m×n矩阵进行解。 ### 回答3: 这个程序可以使用二重循环实现。首先定义一个二维数组,表示输入的矩阵,然后再定义一个数组,用来存储各行元素之和。最后输出各行元素之和即可。程序如下: ```c++ #include<iostream> using namespace std; int main() { int m, n; cout << "请输入矩阵的行数和列数:\n"; cin >> m >> n; int matrix[m][n]; int row_sum[m] = { 0 }; cout << "请输入矩阵元素:\n"; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> matrix[i][j]; row_sum[i] += matrix[i][j]; } } cout << "各行元素之和为:"; for (int i = 0; i < m; i++) { cout << row_sum[i] << " "; } return 0; } ``` 以上程序先要用户输入矩阵的行数和列数,然后定义一个二维数组表示输入的矩阵。接着定义一个一维数组用来存储各行元素之和,初始值都设为0。然后用一个二重循环输入每个元素,并同时计算各行元素之和。最后用一个循环输出各行元素之和即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏驰和徐策

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

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

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

打赏作者

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

抵扣说明:

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

余额充值