矩阵运算工具程序
#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;
}
程序说明
-
程序功能:
- 该程序实现了矩阵的加法、减法和乘法三种基本运算。
- 用户可以选择操作类型,并输入两个矩阵的维度和元素。
- 程序会根据用户选择的操作计算结果,并以表格形式打印到控制台。
-
代码结构:
- 程序使用了模块化设计,每个操作(加法、减法、乘法)都封装成独立的函数。
printMatrix
函数用于打印矩阵,方便用户查看结果。matrixAddition
和matrixSubtraction
函数实现了矩阵的加法和减法。matrixMultiplication
函数实现了矩阵乘法,注意矩阵乘法需要满足维度匹配的条件。
-
输入验证:
- 程序假设用户输入的矩阵维度和元素是合法的,未进行严格的输入验证。
- 在实际应用中,可以添加更多的输入验证逻辑,例如检查矩阵维度是否超出限制,或者输入是否为整数。
-
扩展性:
- 程序可以进一步扩展,例如支持动态内存分配以处理更大的矩阵。
- 可以添加更多的矩阵运算功能,例如转置、求逆等。
运行示例
假设用户选择矩阵乘法,并输入以下数据:
请输入第一个矩阵的行数和列数(不超过10):2 3
请输入第一个矩阵的元素(按行输入):
1 2 3
4 5 6
请输入第二个矩阵的列数(不超过10):2
请输入第二个矩阵的元素(按行输入):
7 8
9 10
11 12
程序输出:
矩阵乘法的结果:
58 64
139 154
总结
这个程序展示了C语言在处理矩阵运算时的基本方法,包括数组操作、函数封装和用户交互。通过模块化设计,程序的可读性和可维护性得到了提升。对于初学者来说,这是一个很好的练习项目,可以帮助理解C语言的基本语法和编程思想。