如何在C语言中用同一个自定义函数实现矩阵加减?
合并矩阵加减函数的实现方案
嘿,这个需求非常合理!要把原本分开的矩阵加法和减法函数合并成一个matrixAddSub,核心思路就是新增一个操作类型的参数,用它来区分当前要执行的是加法还是减法,这样就能复用绝大部分的遍历逻辑,完美精简代码。
具体实现步骤
- 修改函数声明:新增一个参数(比如
int op)来表示操作类型,同时建议新增一个结果数组参数(避免修改原矩阵,让函数更安全)。修正原参数里的拼写错误colums为cols:
// 函数声明 void matrixAddSub(int arrayone[10][10], int arraytwo[10][10], int result[10][10], int rows, int cols, int op);
- 实现函数逻辑:在函数内部,通过双层循环遍历矩阵,根据
op的值决定执行加法还是减法。这里用op=1代表加法,op=-1代表减法,这样可以直接通过乘法简化运算:
#include <stdio.h> void matrixAddSub(int arrayone[10][10], int arraytwo[10][10], int result[10][10], int rows, int cols, int op) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { // 核心逻辑:用op的值切换加减运算 result[i][j] = arrayone[i][j] + op * arraytwo[i][j]; } } }
- 调用示例:使用时只需传入对应的
op值即可:
int main() { int matA[10][10] = {{1,2}, {3,4}}; int matB[10][10] = {{5,6}, {7,8}}; int matResult[10][10]; // 执行矩阵加法 matrixAddSub(matA, matB, matResult, 2, 2, 1); printf("加法结果:\n"); for (int i=0; i<2; i++) { for (int j=0; j<2; j++) { printf("%d ", matResult[i][j]); } printf("\n"); } // 执行矩阵减法 matrixAddSub(matA, matB, matResult, 2, 2, -1); printf("\n减法结果:\n"); for (int i=0; i<2; i++) { for (int j=0; j<2; j++) { printf("%d ", matResult[i][j]); } printf("\n"); } return 0; }
进阶优化:用枚举提升可读性
如果觉得直接传1和-1不够直观,可以用枚举类型定义操作常量,让代码更易读:
// 定义枚举类型 typedef enum { MATRIX_ADD = 1, MATRIX_SUB = -1 } MatrixOperation; // 更新函数声明 void matrixAddSub(int arrayone[10][10], int arraytwo[10][10], int result[10][10], int rows, int cols, MatrixOperation op); // 调用时更清晰 matrixAddSub(matA, matB, matResult, 2, 2, MATRIX_ADD); matrixAddSub(matA, matB, matResult, 2, 2, MATRIX_SUB);
这样一来,原本两个重复度很高的函数就被合并成一个,既精简了代码,又保留了所有功能,后续维护也更方便~
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

