10-2 求矩阵每行元素的和分数 15

该博客主要围绕使用指针方式求给定m×n矩阵各行元素之和展开。介绍了输入格式,需先给出m和n,再输入矩阵数据;输出格式为每行一个整数。还提到问题分析,即定义函数传入矩阵一行求和并返回结果,最后有代码实现和提交结果。

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

输入格式:

输入第一行给出两个正整数m和n(1≤m,n≤6),再输入m行数据,每行n个整数,每个整数之间用空格分隔。

输出格式:

输出m个整数,每行1个数。

输入样例:

2 3
1 2 3
4 5 6

输出样例:

6
15

问题分析:

因为题目要求使用指针,所以我们定义一个函数每次传入矩阵的一行对其进行求和,并将求和的结果作为函数的返回值返回。

代码实现:

#include<stdio.h>
int sum(int x[],int n){
    int sum=0;
    for(int i=0;i<n;i++){
        sum+=x[i];
    }
    return sum;
}
int main(){
    int a[6][6];
    int m,n;
    scanf("%d %d",&m,&n);
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=0;i<m;i++){
        printf("%d\n",sum(a[i],n));
    }
    return 0;
}

 提交结果:

我们来详细分析并解决这道题:**7-5 矩阵各行元素** --- ## ✅ 题目解析 ### 📌 任务目标: 给定一个 $ M \times N $ 的矩阵,计算每一行的元素,并逐行输出。 --- ### 🔎 输入格式: ``` M N // 行数 M 列数 N(1 <= M, N <= 6) 接下来 M 行 每行 N 个整数,以空格分隔 ``` ### 📤 输出格式: 输出 M 行,每行为对应行的元素--- ### ✅ 示例: #### 输入: ``` 3 2 6 3 1 -8 3 12 ``` #### 计算: - 第0行:6 + 3 = 9 - 第1行:1 + (-8) = -7 -2行:3 + 12 = 15 #### 输出: ``` 9 -7 15 ``` --- ## ✅ 解题思路 1. 读入行数 `M` 列数 `N` 2. 使用双重循环输入矩阵 3. 在输入每一行的同时,用一个变量累加该行所有元素 4. 输入完一行就输出该行的(也可以先存再输出,但没必要) > ⚠️ 不需要存储整个矩阵!可以边读边处理,节省空间。 --- ## ✅ 正确 C 语言代码实现(高效版) ```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; } ``` --- ## ✅ 代码解释 | 代码段 | 功能 | |-------|------| | `scanf("%d %d", &M, &N)` | 读入矩阵维度 | | 外层 `for(i=0; i<M; i++)` | 遍历每一行 | | 内层 `for(j=0; j<N; j++)` | 遍历当前行的每个元素 | | `sum += num` | 累加当前行 | | `printf("%d\n", sum)` | 每处理完一行立即输出结果 | --- ## ✅ 优点 - ✅ 时间复杂度:$O(M \times N)$ —— 必须读取每个元素 - ✅ 空间复杂度:$O(1)$ —— 只用了几个变量,没有开二维数组 - ✅ 符合题目要,输出格式正确 - ✅ 能处理负数、零、正数 --- ## ✅ 测试样例验证 ### 输入: ``` 3 2 6 3 1 -8 3 12 ``` 执行过程: - 第0行:6+3 → 输出 `9` - 第1行:1+(-8) → 输出 `-7` -2行:3+12 → 输出 `15` ✅ 输出: ``` 9 -7 15 ``` 完全正确! --- ## ✅ 扩展思考:如果要输出各列之怎么办? 只需交换循环顺序或使用数组保存每列: ```c int colSum[N]; for (int j = 0; j < N; j++) colSum[j] = 0; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { scanf("%d", &num); colSum[j] += num; } } // 最后输出 colSum[0..N-1] ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值