//设计一个菜单,包括求矩阵的转置、求矩阵的和、求矩阵的积
#include<stdio.h>
#include<stdlib.h>
int menu(); //创建菜单
void input_mat(int line,int row,int array[100][100]); //创建输入函数
void output_mat(int line, int row, int array[100][100]); //创建输出函数
void matrix_transpose(); //矩阵的转置
void matrix_sum(); //矩阵的和
void matrix_product();//矩阵的积
int menu()
{
int num=0;
printf("--------------------------------\n");
printf(" 1.求矩阵的转置 \n");
printf(" 2.求矩阵的和 \n");
printf(" 3.求矩阵的积 \n");
printf(" 4.退出 \n");
printf("--------------------------------\n");
printf("请输入您要操作的对应数字: ");
scanf_s("%d", &num);
return num;
}
void input_mat(int line,int row,int array[100][100])
{
int i, j;
printf("请输入矩阵具体各点数值:\n");
for (i = 0; i < line; i++)
{
for (j = 0; j < row; j++)
{
scanf_s("%d", &array[i][j]);//输入第一个矩阵
}
}
}
void output_mat(int line, int row, int array[100][100])
{
int i, j;
for (i = 0; i < line; i++)
{
for (j = 0; j < row; j++)
{
printf("%d\t", array[i][j]);//输出第一个矩阵
}
printf("\n");
}
}
void matrix_transpose()
{
int line,row,i, j,temp;
int A[100][100];
printf("请输入要转置矩阵的行数和列数:");
scanf_s("%d %d", &line, &row);//输入行数和列数
input_mat(line, row, A);
printf("转置前的矩阵:\n");
output_mat(line, row, A);
for (i = 0; i < line; i++)
{
for (j = 0; j < row; j++)
{
if (i <= j) {
temp = A[i][j]; A[i][j] = A[j][i]; A[j][i] = temp;
}
}
}
printf("转置后的矩阵为:\n");
output_mat(row, line, A);
}
void matrix_sum()
{
int i, j, m, n, p, q;
int A[100][100], B[100][100],C[100][100];
printf("请输入第一个矩阵的行数和列数:");
scanf_s("%d %d", &m, &n);
input_mat(m,n, A);
printf("请输入第二个矩阵的行数和列数:");
scanf_s("%d %d", &p, &q);
while(m != p || n != q)
{
printf("输入错误,第二个矩阵的行列数与第一个矩阵不同\n");
printf("请重新输入第二个矩阵的行数和列数:");
scanf_s("%d %d", &p, &q);
}
input_mat(p, q, B);
printf("求和后的矩阵为:\n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
C[i][j] = A[i][j] + B[i][j];
}
}
output_mat(m, n, C);
}
void matrix_product()
{
int m, n, p, q;
int A[100][100], B[100][100], D[100][100];
printf("请输入第一个矩阵的行数和列数:");
scanf_s("%d %d", &m, &n);
input_mat(m, n, A);
printf("请输入第二个矩阵的行数和列数:");
scanf_s("%d %d", &p, &q);
while (p!=n)
{
printf("输入矩阵的行列数错误!\n");
printf("请重新输入第二个矩阵的行数和列数:");
scanf_s("%d %d", &p, &q);
}
input_mat(p, q, B);
int c, d, k;
for (c = 0; c < m; c++) //行数小于等于第一个矩阵的行数
{
for (d = 0; d < q; d++) //列数小于等于第二个矩阵的列数
{
int sum = 0;
for (k = 0; k < n; k++) //第一个矩阵行数和第二个矩阵列数
{
sum += A[c][k] * B[k][d];//计算
}
D[c][d] = sum;
}
}
printf("求积后的矩阵为:\n");
output_mat(c, d, D);
}
int main()
{
while (1) {
switch (menu())
{
case 1:
matrix_transpose();
break;
case 2:
matrix_sum();
break;
case 3:
matrix_product();
break;
case 4:
exit(0);
default:
printf("输入错误!\n");
break;
}
}
system("pause");
}