矩阵的操作

//设计一个菜单,包括求矩阵的转置、求矩阵的和、求矩阵的积

#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");
}

猜你喜欢

转载自blog.csdn.net/jfjf164164/article/details/89217855