qq_36425516 2022-05-14 02:23 采纳率: 0%
浏览 135
已结题

c语言特殊矩阵怎么实现加减,存取,基本运算呀?

img


求解,特殊矩阵的加减,读取,转置,可以的话帮我写完功能,只需要对称矩阵的,真的非常非常感谢

  • 写回答

7条回答 默认 最新

  • 白驹_过隙 算法领域新星创作者 2022-05-14 08:21
    关注
    获得3.23元问题酬金

    img

    
    
    #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;
    }
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 5月22日
  • 修改了问题 5月14日
  • 赞助了问题酬金7元 5月14日
  • 创建了问题 5月14日

悬赏问题

  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题