Yoyo_adrian 2021-11-21 19:47 采纳率: 94.7%
浏览 42
已结题

c语言矩阵运算,关键部分我好像写错了

标注出来的是我不太明白的地方,我写的这个编译没有问题,就是答案很奇怪,能帮忙改改吗?谢了

img


#include<stdio.h>
int main()
{
    int n,i,j;
    scanf("%d",&n);
    int a[n][n],b[n][n],c[n][n],d[n][n];
    
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
        {
            if (a[i][j]==a[j][i])
            {
                printf("YES\n");
                b[j][i]=a[j][i];
                for (j=0;j<n;j++)
                {
                    d[i][j]=a[i][j]*b[j][i];
                    c[i][j]=c[i][j]+d[i][j];
                    printf("%d ",c[i][j]);
                }
            }    
            else
            {
                printf("NO\n");
                b[j][i]=a[j][i];
                d[i][j]=a[i][j]+b[j][i];
                c[i][j]=c[i][j]+d[i][j];
                printf("%d ",c[i][j]);
            }
        }
    }
    printf("\n");
}
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-11-26 14:54
    关注

    供参考:

    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 11月21日

悬赏问题

  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)