「已注销」 2021-11-27 00:13 采纳率: 60%
浏览 42
已结题

有关数组与函数的矩阵运算

矩阵运算
描述
实现从键盘上读取一个数n,输入n*n的矩阵A,首先判断矩阵A是否为实对称矩阵(实对称矩阵:n阶矩阵A,其矩阵的元素都为实数,且矩阵A的转置等于其本身(aij=aji),(i,j为元素的脚标),则称A为实对称矩阵。)

如果是实对称矩阵则输出 YES,再换行输出矩阵A*A^T的结果(A^T为A的转置) 。

如果不是实对称矩阵则输出NO,再输出矩阵A+A^T的结果(A^T为A的转置)。

以上矩阵输出都以n行n列的格式输出,每个元素用空格隔开,在每行最后一个元素输出换行。

(1)矩阵加法公式:每行每列对应元素相加,Cij=Aij + Bij;

(2)矩阵乘法公式:Cij = Ai0×B0j+Ai1×B1j+……+Ain×Bnj;

输入
从键盘上输入一个数n后再输入n*n的矩阵A。

输出
判断矩阵A是否为实对称矩阵(实对称矩阵:n阶矩阵A,其矩阵的元素都为实数,且矩阵A的转置等于其本身(aij=aji),(i,j为元素的脚标),则称A为实对称矩阵。)

如果是实对称矩阵则输出 YES,再换行输出矩阵A*A^T的结果(A^T为A的转置) ,

如果不是实对称矩阵则输出NO,再换行输出矩阵A+A^T的结果(A^T为A的转置)。

以上矩阵输出都以n行n列的格式输出,每个元素用空格隔开,在每行最后一个元素输出换行。(最后一个元素后面没有空格)

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-11-27 00:40
    关注

    供参考:

    #include <stdio.h>
    #define N 20
    int is_symmetricmatrix(int a[][N], int Row,int Col)//判断一个N*N矩阵,是否是对称矩阵,是返回1,否返回0
    {
        int i, j, flag;
        for (i = 0, flag = 1; i < Row; i++)
        {
            for (j = 0; j < i; j++)
            {
                if (a[i][j] != a[j][i])
                {
                    flag = 0;
                    break;
                }
            }
            if (j < i) break;
        }
        if (flag)
            return 1;
        else
            return 0;
    }
    void getTransposeMatrix(int b[][N], int a[][N], int Row, int Col)//矩阵转置
    {
        int i, j;
        for (i = 0; i < Row; i++)
            for (j = 0; j < Col; j++)
                b[j][i] = a[i][j];
    }
    void matrixMul(int a[][N], int b[][N], int c[][N], int Rowa, int Cola, int Colb)//矩阵相乘
    {
        int i, j, k;
        for(i=0;i<Rowa;i++)
        {
            for (j = 0; j < Colb; j++)
            {
                for (k = 0; k < Cola; k++)
                    c[i][j] += a[i][k] * b[k][j];
            }
        }
    }
    void matrixAdd(int a[][N], int b[][N], int c[][N], int Rowa, int Cola)//矩阵相加
    {
        int i, j;
        for (i = 0; i < Rowa; i++)
            for (j = 0; j < Cola; j++)
                c[i][j] = a[i][j] + b[i][j];
    }
    void printmatrix(int a[][N], int Row, int Col)
    {
        int i, j;
        for (i = 0; i < Row; i++){
            for (j = 0; j < Col; j++)
            {
                printf("%d ", a[i][j]);
            }
            printf("\n");
        }
    }
    int main()
    {
        int a[N][N] = { 0 }, b[N][N] = { 0 }, c[N][N] = {0}, i, j, n = 3;
        scanf("%d", &n);
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
                scanf("%d", &a[i][j]);
        if (is_symmetricmatrix(a, n, n))
        {
            printf("YES\n");
            getTransposeMatrix(b, a, n, n);
            matrixMul(a, b, c, n, n, n);
            printmatrix(c, n, n);
        }
        else{
            printf("NO\n");
            getTransposeMatrix(b, a, n, n);
            matrixAdd(a, b, c, n, n);
            printmatrix(c, n, n);
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 创建了问题 11月27日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测