分数 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;
}
}
解题过程
-
读取矩阵的大小: 读取
m
和n
的值,确定矩阵的大小。 -
遍历和计算: 通过外层循环遍历矩阵的每一行,内层循环遍历每一行的每一个元素,并进行累加。使用一个变量
sum
来存储当前行的和。 -
输出结果: 将每一行的和输出,每一行输出一个和。
通过这道题目,我们可以学习到二维数组的操作和遍历,同时也能够加强对循环结构和基本输入输出的理解和运用。
总结:
从这道题目中,我们可以学习和加深以下几点的理解和应用:
-
基本的二维数组操作:题目要求对一个二维矩阵进行操作,所以我们需要了解如何在C或C++中定义和操作二维数组。
-
嵌套循环的应用:为了遍历二维数组中的每一个元素,我们使用了双重循环,这有助于加强对嵌套循环结构的理解。
-
基本的输入输出:这道题目提供了对于如何从标准输入读取二维矩阵数据,以及如何将结果输出到标准输出的实践。
-
累加操作:通过这道题目,我们可以练习使用累加器来计算总和。这是编程中常见的操作,特别是在数据处理和统计中。
-
问题分解:这道题目教我们如何将一个问题分解成更小的、可管理的部分。例如,我们可以首先考虑如何读取矩阵,然后考虑如何计算每行的和,最后考虑如何输出结果。
-
增强问题解决能力:通过解决这样的问题,我们可以练习和增强自己分析问题和解决问题的能力。
总的来说,这道题目是一个基本的编程练习,涉及到了数组、循环和输入输出等基本编程概念。通过解决这样的问题,学生可以加强对这些基本概念的理解和应用能力。
学到了什么?
-
理解题目要求:在开始编写代码之前,彻底理解题目的要求至关重要。这有助于确定正确的逻辑和程序结构。例如,在这个问题中,题目要求先输入整个数组,然后计算每行的和。明确这一点是关键。
-
数据存储的重要性:这个问题展示了在处理数据之前首先存储它们的重要性。在某些情况下,需要先收集所有数据,然后再进行计算或处理。
-
编程风格和逻辑清晰度:清晰且有组织的代码能够更容易地被理解和调试。在您的第二个代码示例中,通过使用数组来存储整个矩阵,代码的逻辑更加清晰和直观。
-
灵活性和适应性:能够根据需要调整您的代码逻辑是一个重要的技能。在遇到问题时,您能够识别问题所在,并作出必要的调整。
-
测试和验证:编写代码后进行测试和验证是必不可少的。这有助于发现并修复可能在开发过程中未被注意到的问题。
-
从错误中学习:编程中犯错误是正常的,关键是从中学习。每个错误都是一个学习机会,可以帮助您成为更好的程序员。
通过这个经验,您不仅解决了一个具体的编程问题,还学到了如何更好地理解问题、组织代码、调试,并从错误中吸取教训。这些都是编程和问题解决过程中不可或缺的技能。