c:不带*运算符的矩阵乘法
我必须写一个c程序,它不使用*运算符,将两个矩阵相乘。我写了一个代码,但是结果不正确。我认为while循环有点不正确。我希望有人能帮忙。你好,M 这是我的密码:c:不带*运算符的矩阵乘法,c,matrix,C,Matrix,我必须写一个c程序,它不使用*运算符,将两个矩阵相乘。我写了一个代码,但是结果不正确。我认为while循环有点不正确。我希望有人能帮忙。你好,M 这是我的密码: #include<stdio.h> int main() { int matrix1[4][4]; int matrix2[4][4]; int matrix3[4][4]; int a; int b; int c; int sum; int multi = 0; //first
#include<stdio.h>
int main()
{
int matrix1[4][4];
int matrix2[4][4];
int matrix3[4][4];
int a;
int b;
int c;
int sum;
int multi = 0;
//first matrix
for(a=0; a<4; a++)
{
for(b=0; b<4; b++)
{
scanf("%d", &matrix1[a][b]);
}
}
//second matrix
for(a=0; a<4; a++)
{
for(b=0; b<4; b++)
{
scanf("%d", &matrix2[a][b]);
}
}
//Multiplication:
for(a=0; a<=3; a++)
{
for(b=0; b<=3; b++)
{
sum=0;
for(c=0; c<=3; c++)
{
while(matrix2[c][b]>0)
{
multi += matrix1[a][c];
matrix2[c][b]--;
}
}
sum = sum+multi;
matrix3[a][b]=sum;
}
}
//result;
for(a=0; a<4; a++)
{
for(b=0; b<4; b++)
{
printf(" %d ", matrix3[a][b]);
}
printf("\n");
}
return 0;
}
#包括
int main()
{
int matrix1[4][4];
int matrix2[4][4];
int matrix3[4][4];
INTA;
int b;
INTC;
整数和;
int-multi=0;
//第一矩阵
对于(a=0;a你有两个主要错误
您必须将multi
重置为0
而不是sum
,这是没有用的
您必须为Molti应用程序使用一个临时变量。您的代码使用matrix2[c][b]-;
想想乘法的定义。“我认为”听起来你需要学习如何使用调试器。知道如何调试程序是非常方便的,也是技能的一部分。算术运算符中的*
运算符,或*
中的:指针/解引用运算符?使用matrix2[c][b]--;
您正在修改矩阵中的值,因此下次该值将为0…将程序划分为功能单元并分别进行测试。您不能使用*
?然后编写一个函数mul(a,b)
,并改为使用它。
#include<stdio.h>
int main(void)
{
int matrix1[4][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int matrix2[4][4] = { {17,18,19,20},{21,22,23,24},{25,26,27,28},{29,30,31,32}};
int matrix3[4][4];
int a;
int b;
int c;
int multi = 0;
//Multiplication:
for (a = 0; a < 4; a++)
{
for (b = 0; b < 4; b++)
{
multi = 0;
for (c = 0; c < 4; c++)
{
int temp = matrix2[c][b];
while (temp > 0)
{
multi += matrix1[a][c];
temp--;
}
}
matrix3[a][b] = multi;
}
}
//result;
for (a = 0; a < 4; a++)
{
for (b = 0; b < 4; b++)
{
printf("%d\t", matrix3[a][b]);
}
printf("\n");
}
return 0;
}
250 260 270 280
618 644 670 696
986 1028 1070 1112
1354 1412 1470 1528