使用该计算器可以帮助你快速完成矩阵的简单计算。
#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.退出
暂时还没有求逆矩阵和化为阶梯型,以后会添上的 -_-