如何在C中将4x4矩阵与1x3矩阵相乘?

如何在C中将4x4矩阵与1x3矩阵相乘?,c,matrix,C,Matrix,如果您已经有一套4x4矩阵。 前 如何将矩阵A转换为C编码?还有,代码中会有哪些位置?对于位置,我的意思是:如果我试图将第一行乘以矩阵B,我可以这样做吗 A[1][0]*B[0]+A[1][1]*B[1]+A[1][2]*B[2] 大纲代码: main(){ int matrixA[4][4] = [{"1","2","3","4"}; {"5","6","7","8"}; {"9","1

如果您已经有一套4x4矩阵。 前

如何将矩阵A转换为C编码?还有,代码中会有哪些位置?对于位置,我的意思是:如果我试图将第一行乘以矩阵B,我可以这样做吗

A[1][0]*B[0]+A[1][1]*B[1]+A[1][2]*B[2]
大纲代码:

main(){

    int matrixA[4][4] = [{"1","2","3","4"};
                        {"5","6","7","8"};
                        {"9","10","11","12"};
                        {"13","14","15","16"}];
    printf(matrix A);
    return 0;
}

你可以这样写:

int matrixA[4][4] = {
    { 1,  2,  3,  4},//matrixA[0][0] is 1
    { 5,  6,  7,  8},//matrixA[1][1] is 6
    { 9, 10, 11, 12},
    {13, 14, 15, 16}
};
int matrixB[] = { 1, 2, 3};
for(int r = 0; r < 4; ++r){
    for(int c = 0; c < 4; ++c){
        printf("%3d", matrixA[r][c]);
    }
    printf("\n");
}
int main()
{
    int mat[4][4];
    for(int i=0;i<=3;i++)
    {
        for(int j=0;j<=3;j++)
        {
            scanf("%d", &mat[i][j]);
        }
    }

    return 0;
}

让我帮你一点忙,但作为回报,你要帮助我理解这个问题

代表 Ok矩阵使用二维数组表示。 像

int a[][]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}

矩阵准备好了

如果你想动态创建它,malloc将是你的朋友。 这里我的意思是,您必须动态地分配数组。 例如:

int **a;
a= malloc(sizeof(int*)*m);
for(int i=0;i<m;i++)
  a[i]=malloc(sizeof(int)*n);

Forming mxn matrix where m and n are got as input maybe.

首先,你不能将1×3矩阵与4×4矩阵相乘。 你应该有像m×n和n×p这样的矩阵,让它们相乘,结果将是一个m×p矩阵

同样,对于C中的4×4矩阵,您应该这样实现:

int matrixA[4][4] = {
    { 1,  2,  3,  4},//matrixA[0][0] is 1
    { 5,  6,  7,  8},//matrixA[1][1] is 6
    { 9, 10, 11, 12},
    {13, 14, 15, 16}
};
int matrixB[] = { 1, 2, 3};
for(int r = 0; r < 4; ++r){
    for(int c = 0; c < 4; ++c){
        printf("%3d", matrixA[r][c]);
    }
    printf("\n");
}
int main()
{
    int mat[4][4];
    for(int i=0;i<=3;i++)
    {
        for(int j=0;j<=3;j++)
        {
            scanf("%d", &mat[i][j]);
        }
    }

    return 0;
}

据我所知,你想制作一个程序来执行与矩阵有关的数学分数。线性代数中的例子。矩阵大小不会被检查,但你知道了。在除法运算中,必须计算数组2^-1才能找到它。希望我能帮忙。找到它后,将结果乘以数组1。然而,在分工中,情况更为复杂。您需要以不同的方式进行编码,具体取决于您拥有的arraymatrix维度。例外情况必须包括在内,并且需要阅读一些关于如何划分这些矩阵的理论。有关更多详细信息,请参阅

#include <stdio.h>
#include <math.h>
int main(){
//counters
int i=0,j=0,k=0,sum=0;
//first array
int Array1[4][4] ={
        {87,96,70,22},
        {18,65,77,78},
        {76,72,84,65},
        {87,93,73,77}};
//second array
int Array2[4][4]={
        {14,45,66,88},
        {45,32,97,44},
        {34,64,23,66},
        {39,98,55,32}};
//result array.
int ResultArray[4][4];
// Add
for (i = 0; i < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        ResultArray[i][j]= Array1[i][j]+Array2[i][j];
    }
}
//result
printf("\tAdd Array1 and Array2\n");
for (i = 0; i < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        printf(" %10d \t",ResultArray[i][j]);
    }
    printf("\n");
}
//subtract
for (i = 0; i < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        ResultArray[i][j]= Array1[i][j]-Array2[i][j];
    }
}
//result
printf("\tSubtract Array1 and Array2\n");
for (i = 0; i < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        printf(" %10d \t",ResultArray[i][j]);
    }
    printf("\n");
}
//multiply
for (i = 0; i < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        for (k = 0; k < 4; ++k) {
            sum=sum+Array1[i][k]*Array2[k][j];
        }
        ResultArray[i][j]=sum;
        sum=0;
    }
}
//result
printf("\tMultiplication Array1 and Array2\n");
for (i = 0; i    < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        printf(" %10d \t",ResultArray[i][j]);
    }
    printf("\n");
}
return 0;
}

对于位置,如果我能得到矩阵的位置并乘以另一个矩阵?示例A[1][1]并假设B[0]。我能把A[1][1]*B[0]编码吗?鲍勃..你的问题是什么?上面的矩阵是矩阵A,我不知道如何将这个例子实现为代码,你知道当我们加、乘、除、矩阵时,有不同的位置,如a1、a2、a3等。。我的问题是,这些位置是否存在于编码C中?如果是,是什么?那么在上面的矩阵A中,如果我想得到4,我是否需要对矩阵[1][3]进行编码才能得到数字4?如果我有另一个矩阵,比如B,我想在矩阵A中乘以4。我能做B[0]*A[1][3]吗?在数学中,你不能用一个1x3向量/矩阵乘以一个4x4矩阵;您需要一个1x4或4x1矢量。如果要将一行的前三个元素从1x4或4x1向量乘以1x3向量,则可以。你可以写出乘法,也可以使用循环;两者都可以工作,但循环适应不同大小的矩阵或向量。不能用字符串初始化int值矩阵;你需要使用普通数字。删除所有的引号。您不能使用一个简单的printf函数调用来打印整个矩阵。您还应该至少使用C99编码,最好使用C11编码,在忽略命令行参数时,int main或-better-int mainvoid是主程序的适当起点。也看看哇!!为什么呢?随便批评吧。谢谢我的DV,但是-你试过编译第一个数组吗?不会的;你必须提供第二个维度。在乘法中,最好设置int sum=0;内部为d…循环在顶部;它也可以在那里定义。我将使用int d=0…也如果你想即时创建它,评论…不完整?至少,它邀请了,作为后续,你如何使用malloc实现它。然而,你的基本诊断——问题中矩阵的定义是错误的——是正确的,即使你没有清楚地解释原因。嘿,乔纳森……谢谢你的回答。我明白我的错。。让我来做吧。我有时间的时候会在附近。真的谢谢你。稍后我会问你一件事。再次感谢@Jonathanleffler您可以参考c中的多维数组概念,了解矩阵中元素的索引。那可能对你有帮助!!请注意,初始化4×4矩阵是完全合法的,而不必使用scanf读取值,尽管您通常希望将值读取到矩阵中。当您使用scanf时,您应该检查它是否成功。