|  | 
 
5鱼币 
| 4-4矩阵积的转置 问题描述
 输入M×K矩阵A和K×N矩阵B各元素值,计算矩阵A和矩阵B相乘的结果,并将乘积矩阵进行转置。
 矩阵的相乘:设A为m×p的矩阵,B为p×n的矩阵,那么称m×n的矩阵C为矩阵A与B的乘积,其中矩阵C中的第i行第j列元素可以表示为:
 如下:A=B=C=AB=
 矩阵的转置:是指把m×n矩阵A的行换成同序数的列得到一个n×m矩阵,此矩阵叫做A的转置矩阵,写作AT。
 例如矩阵经过转置后成为
 
 输入说明
 第一行给出正整数M、K、N(0<M、N、K<50),为A矩阵和B矩阵的行数和列数。接下来给出矩阵的信息,A矩阵信息:随后M行,每行给出K个整数,其间以空格分隔;B矩阵信息:随后K行,每行给出N个整数,其间以空格分隔。
 
 输出说明
 输出矩阵(A*B)T的结果,矩阵元素之间用空格分隔,数组每行元素用换行分隔。
 
 
 #include <stdio.h>
 #include <stdlib.h>
 
 int main()
 {
 int m,k,n;
 scanf("%d%d%d",&m,&k,&n);
 int a[m][k];
 int b[k][n];
 for(int i=0;i<m;i++)
 {
 for(int j=0;j<k;j++)
 {
 scanf_s("%d",&a[i][j]);//输入数组a
 }
 }
 
 for(int i=0;i<k;i++)
 {
 for(int j=0;j<n;j++)
 {
 scanf_s("%d",&b[i][j]);//输入数组b
 }
 }
 int c[m][n];
 for(int i=0;i<m;i++)
 {
 for(int j=0;j<n;j++)
 {
 c[i][j]=0;
 for(int s=0;s<k;s++)
 {
 c[i][j]+=a[i][k]*b[k][j];//矩阵相乘的赋值
 }
 }
 }
 for(int j=0;j<n;j++)
 {
 for(int i=0;i<m;i++)
 {
 printf("%d ",c[i][j]);//输出矩阵(转置后)
 }
 printf("\n");
 }
 return 0;
 }
 
 
 请问为什么我b数组输入后无法正常赋值呢
 
34 行有问题 复制代码#include <stdio.h>
#include <stdlib.h>
int main()
{
    int m,k,n;
    scanf("%d %d %d",&m,&k,&n);
    int a[m][k];
    int b[k][n];
    printf("请输入数组A\n") ; 
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<k;j++)
        {
            scanf("%d",&a[i][j]);//输入数组a
        }
    }
        printf("请输入数组B\n") ;
    for(int i=0;i<k;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&b[i][j]);//输入数组b
        }
    }
    int c[m][n];
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            c[i][j]=0;
            for(int s=0;s<k;s++)
            {
                c[i][j]+=a[i][s]*b[s][j];//矩阵相乘的赋值   ||||| 用k越界了 
            }
        }
    }
    printf("打印转置矩阵\n") ;
    for(int j=0;j<n;j++)
    {
        for(int i=0;i<m;i++)
        {
            printf("%d ",c[i][j]);//输出矩阵(转置后)
        }
        printf("\n");
    }
    return 0;
}
2 2 2请输入数组A
 1 2
 3 4
 请输入数组B
 5 6
 7 8
 打印转置矩阵
 19 43
 22 50
 | 
 |