用C语言开发一个简单的矩阵运算工具

矩阵运算工具程序

#include <stdio.h>
#include <stdlib.h>

// 定义矩阵的最大维度
#define MAX_DIM 10

/**
 * 函数:打印矩阵
 * 用途:将矩阵的内容以表格形式打印到控制台
 * 参数:
 *  - matrix:二维数组,表示矩阵
 *  - rows:矩阵的行数
 *  - cols:矩阵的列数
 */
void printMatrix(int matrix[MAX_DIM][MAX_DIM], int rows, int cols) {
    printf("矩阵:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%4d ", matrix[i][j]); // 每个元素占4个字符宽度
        }
        printf("\n"); // 换行
    }
}

/**
 * 函数:矩阵加法
 * 用途:计算两个矩阵的和
 * 参数:
 *  - matrixA:第一个矩阵
 *  - matrixB:第二个矩阵
 *  - result:存储结果的矩阵
 *  - rows:矩阵的行数
 *  - cols:矩阵的列数
 */
void matrixAddition(int matrixA[MAX_DIM][MAX_DIM], int matrixB[MAX_DIM][MAX_DIM], 
                    int result[MAX_DIM][MAX_DIM], int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            result[i][j] = matrixA[i][j] + matrixB[i][j]; // 对应位置相加
        }
    }
}

/**
 * 函数:矩阵减法
 * 用途:计算两个矩阵的差
 * 参数:
 *  - matrixA:第一个矩阵
 *  - matrixB:第二个矩阵
 *  - result:存储结果的矩阵
 *  - rows:矩阵的行数
 *  - cols:矩阵的列数
 */
void matrixSubtraction(int matrixA[MAX_DIM][MAX_DIM], int matrixB[MAX_DIM][MAX_DIM], 
                       int result[MAX_DIM][MAX_DIM], int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            result[i][j] = matrixA[i][j] - matrixB[i][j]; // 对应位置相减
        }
    }
}

/**
 * 函数:矩阵乘法
 * 用途:计算两个矩阵的乘积
 * 参数:
 *  - matrixA:第一个矩阵
 *  - matrixB:第二个矩阵
 *  - result:存储结果的矩阵
 *  - rowsA:矩阵A的行数
 *  - colsA:矩阵A的列数
 *  - colsB:矩阵B的列数
 */
void matrixMultiplication(int matrixA[MAX_DIM][MAX_DIM], int matrixB[MAX_DIM][MAX_DIM], 
                          int result[MAX_DIM][MAX_DIM], int rowsA, int colsA, int colsB) {
    // 初始化结果矩阵为全零
    for (int i = 0; i < rowsA; i++) {
        for (int j = 0; j < colsB; j++) {
            result[i][j] = 0;
        }
    }

    // 矩阵乘法的核心逻辑
    for (int i = 0; i < rowsA; i++) {
        for (int j = 0; j < colsB; j++) {
            for (int k = 0; k < colsA; k++) {
                result[i][j] += matrixA[i][k] * matrixB[k][j]; // 累加计算
            }
        }
    }
}

/**
 * 主函数:矩阵运算工具
 */
int main() {
    int matrixA[MAX_DIM][MAX_DIM], matrixB[MAX_DIM][MAX_DIM], result[MAX_DIM][MAX_DIM];
    int rowsA, colsA, rowsB, colsB;
    int choice;

    // 欢迎信息
    printf("欢迎使用矩阵运算工具!\n");
    printf("请选择操作:\n");
    printf("1. 矩阵加法\n");
    printf("2. 矩阵减法\n");
    printf("3. 矩阵乘法\n");
    printf("请输入您的选择(1-3):");
    scanf("%d", &choice);

    // 根据用户选择执行不同的操作
    switch (choice) {
        case 1: // 矩阵加法
            printf("请输入第一个矩阵的行数和列数(不超过%d):", MAX_DIM);
            scanf("%d %d", &rowsA, &colsA);
            printf("请输入第一个矩阵的元素(按行输入):\n");
            for (int i = 0; i < rowsA; i++) {
                for (int j = 0; j < colsA; j++) {
                    scanf("%d", &matrixA[i][j]);
                }
            }

            printf("请输入第二个矩阵的元素(按行输入):\n");
            for (int i = 0; i < rowsA; i++) {
                for (int j = 0; j < colsA; j++) {
                    scanf("%d", &matrixB[i][j]);
                }
            }

            // 计算矩阵加法
            matrixAddition(matrixA, matrixB, result, rowsA, colsA);

            // 打印结果
            printf("矩阵加法的结果:\n");
            printMatrix(result, rowsA, colsA);
            break;

        case 2: // 矩阵减法
            printf("请输入第一个矩阵的行数和列数(不超过%d):", MAX_DIM);
            scanf("%d %d", &rowsA, &colsA);
            printf("请输入第一个矩阵的元素(按行输入):\n");
            for (int i = 0; i < rowsA; i++) {
                for (int j = 0; j < colsA; j++) {
                    scanf("%d", &matrixA[i][j]);
                }
            }

            printf("请输入第二个矩阵的元素(按行输入):\n");
            for (int i = 0; i < rowsA; i++) {
                for (int j = 0; j < colsA; j++) {
                    scanf("%d", &matrixB[i][j]);
                }
            }

            // 计算矩阵减法
            matrixSubtraction(matrixA, matrixB, result, rowsA, colsA);

            // 打印结果
            printf("矩阵减法的结果:\n");
            printMatrix(result, rowsA, colsA);
            break;

        case 3: // 矩阵乘法
            printf("请输入第一个矩阵的行数和列数(不超过%d):", MAX_DIM);
            scanf("%d %d", &rowsA, &colsA);
            printf("请输入第一个矩阵的元素(按行输入):\n");
            for (int i = 0; i < rowsA; i++) {
                for (int j = 0; j < colsA; j++) {
                    scanf("%d", &matrixA[i][j]);
                }
            }

            printf("请输入第二个矩阵的列数(不超过%d):", MAX_DIM);
            scanf("%d", &colsB);
            printf("请输入第二个矩阵的元素(按行输入):\n");
            for (int i = 0; i < colsA; i++) { // 矩阵B的行数必须等于矩阵A的列数
                for (int j = 0; j < colsB; j++) {
                    scanf("%d", &matrixB[i][j]);
                }
            }

            // 计算矩阵乘法
            matrixMultiplication(matrixA, matrixB, result, rowsA, colsA, colsB);

            // 打印结果
            printf("矩阵乘法的结果:\n");
            printMatrix(result, rowsA, colsB);
            break;

        default:
            printf("无效的选择,请重新运行程序。\n");
            return 1;
    }

    printf("感谢使用矩阵运算工具!\n");
    return 0;
}

程序说明

  1. 程序功能

    • 该程序实现了矩阵的加法、减法和乘法三种基本运算。
    • 用户可以选择操作类型,并输入两个矩阵的维度和元素。
    • 程序会根据用户选择的操作计算结果,并以表格形式打印到控制台。
  2. 代码结构

    • 程序使用了模块化设计,每个操作(加法、减法、乘法)都封装成独立的函数。
    • printMatrix 函数用于打印矩阵,方便用户查看结果。
    • matrixAdditionmatrixSubtraction 函数实现了矩阵的加法和减法。
    • matrixMultiplication 函数实现了矩阵乘法,注意矩阵乘法需要满足维度匹配的条件。
  3. 输入验证

    • 程序假设用户输入的矩阵维度和元素是合法的,未进行严格的输入验证。
    • 在实际应用中,可以添加更多的输入验证逻辑,例如检查矩阵维度是否超出限制,或者输入是否为整数。
  4. 扩展性

    • 程序可以进一步扩展,例如支持动态内存分配以处理更大的矩阵。
    • 可以添加更多的矩阵运算功能,例如转置、求逆等。

运行示例

假设用户选择矩阵乘法,并输入以下数据:

请输入第一个矩阵的行数和列数(不超过10):2 3
请输入第一个矩阵的元素(按行输入):
1 2 3
4 5 6
请输入第二个矩阵的列数(不超过10):2
请输入第二个矩阵的元素(按行输入):
7 8
9 10
11 12

程序输出:

矩阵乘法的结果:
   58    64 
  139   154 

总结

这个程序展示了C语言在处理矩阵运算时的基本方法,包括数组操作、函数封装和用户交互。通过模块化设计,程序的可读性和可维护性得到了提升。对于初学者来说,这是一个很好的练习项目,可以帮助理解C语言的基本语法和编程思想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

槐月杰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值