使用该计算器可以帮助你快速完成矩阵的简单计算。
#include <stdio.h>
void menu()
{printf("****************************************************************\n");printf("****************************************************************\n");printf("**********************欢迎使用矩阵计算器************************\n");printf(" 1.转置2.加法3.减法4.数乘5.乘法0.退出 \n");printf("****************************************************************\n");printf("****************************************************************\n");printf("****************************************************************\n");
}void Matrix_output(int(*s)[100], int m, int n)//输出
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){printf("%2d ", s[i][j]);}printf("\n");}
}void Matrix_transpose(int(*s)[100], int(*t)[100], int m, int n)//转置
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){t[j][i] = s[i][j];}}
}
void Matrix_addition(int(*s)[100], int(*t)[100], int(*p)[100], int m, int n)//相加
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){p[i][j] = s[i][j] + t[i][j];}}
}void Matrix_subtraction(int(*s)[100], int(*t)[100], int(*p)[100], int m, int n)//相减
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){p[i][j] = s[i][j] - t[i][j];}}
}void Matrix_shucheng(int(*s)[100], int(*t)[100], int m, int n, int k)//数乘
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){t[i][j] = k * s[i][j];}}
}void Matrix_multiplication(int(*s)[100], int(*t)[100], int(*p)[100], int m, int n, int x, int y)//相乘
{int i, j, k, sum;for (i = 0; i < m; i++){for (j = 0; j < y; j++){sum = 0;for (k = 0; k < n; k++){sum += s[i][k] * t[k][j];}p[i][j] = sum;}}
}int main()
{int m, n, i, j, k, input;int x, y;int A[100][100], B[100][100], C[100][100];do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1://转置printf("请输入矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("原矩阵:\n");Matrix_output(A, m, n);Matrix_transpose(A, B, m, n);printf("转置后的矩阵:\n");Matrix_output(B, n, m);break;case 2://相加printf("请输入第一个矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入第一个矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("请输入第二个矩阵的行数:> ");scanf("%d", &x);printf("\n");printf("请输入第二个矩阵的列数:> ");scanf("%d", &y);printf("\n");if (m == x && n == y){printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &B[i][j]);}}printf("第一个矩阵:\n");Matrix_output(A, m, n);printf("第二个矩阵:\n");Matrix_output(B, m, n);Matrix_addition(A, B, C, m, n);printf("和矩阵:\n");Matrix_output(C, m, n);}else{printf("这两个矩阵不是同型矩阵,不能相加\n");}break;case 3:printf("请输入第一个矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入第一个矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入第一个矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("请输入第二个矩阵的行数:> ");scanf("%d", &x);printf("\n");printf("请输入第二个矩阵的列数:> ");scanf("%d", &y);printf("\n");if (m == x && n == y){printf("请输入第二个矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &B[i][j]);}}printf("第一个矩阵:\n");Matrix_output(A, m, n);printf("第二个矩阵:\n");Matrix_output(B, m, n);Matrix_subtraction(A, B, C, m, n);printf("差矩阵:\n");Matrix_output(C, m, n);}else{printf("这两个矩阵不是同型矩阵,不能相减\n");}break;case 4:printf("请输入矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入这个数:>");scanf("%d", &k);printf("\n");printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("原矩阵:\n");Matrix_output(A, m, n);Matrix_shucheng(A, B, m, n, k);printf("数乘矩阵:\n");Matrix_output(B, m, n);break;case 5:printf("请输入第一个矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入第一个矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入第一个矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("请输入第二个矩阵的行数:> ");scanf("%d", &x);printf("\n");printf("请输入第二个矩阵的列数:> ");scanf("%d", &y);printf("\n");if (n == x){printf("请输入第二个矩阵:\n");for (i = 0; i < x; i++){for (j = 0; j < y; j++){scanf("%d", &B[i][j]);}}printf("第一个矩阵:\n");Matrix_output(A, m, n);printf("第二个矩阵:\n");Matrix_output(B, x, y);Matrix_multiplication(A, B, C, m, n, x, y);printf("相乘矩阵:\n");Matrix_output(C, m, y);}else{printf("这两个矩阵不能相乘\n");}break;case 0:printf("退出计算,欢迎再次使用\n");break;default:printf("输入错误,请从新输入\n");break;}} while (input);return 0;
}
测试样例:
1.转置:
2.加法:
3.减法:
4.数乘:
5.乘法:
0.退出
暂时还没有求逆矩阵和化为阶梯型,以后会添上的 -_-