C:Matrix 次矢量输出
C:Matrix times vector output
我试图创建一个矩阵乘向量程序,但是当我运行这个程序时,我发现输出有点奇怪
这是我的代码
#include <stdio.h>
main()
{
int i, j, n, a[3][3], b[3], c[3];
n = 3;
printf("Matrix A\n");
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) {
a[i][j] = 10;
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("\nMatrix B\n");
for (i = 0; i < n; ++i) {
b[i] = 5;
printf("%d\n", b[i]);
}
printf("\nA * B\n");
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) {
c[i] += a[j][i] * b[j];
}
}
for (i = 0; i < n; ++i) {
printf("%d\n", c[i]);
}
}
结果应该是 C = {150,150,150}。问题似乎只出现在 c[0] 和 c[2]
问题是C没有初始化变量为0,你必须自己做。
改变for循环计算c如下:
for (i = 0; i < n; ++i) {
c[i]=0; // Add this line so that c[i] can be used in: c[i] += ....
for (j = 0; j < n; ++j) {
c[i] += a[j][i] * b[j];
}
}
我试图创建一个矩阵乘向量程序,但是当我运行这个程序时,我发现输出有点奇怪
这是我的代码
#include <stdio.h>
main()
{
int i, j, n, a[3][3], b[3], c[3];
n = 3;
printf("Matrix A\n");
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) {
a[i][j] = 10;
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("\nMatrix B\n");
for (i = 0; i < n; ++i) {
b[i] = 5;
printf("%d\n", b[i]);
}
printf("\nA * B\n");
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) {
c[i] += a[j][i] * b[j];
}
}
for (i = 0; i < n; ++i) {
printf("%d\n", c[i]);
}
}
结果应该是 C = {150,150,150}。问题似乎只出现在 c[0] 和 c[2]
问题是C没有初始化变量为0,你必须自己做。
改变for循环计算c如下:
for (i = 0; i < n; ++i) {
c[i]=0; // Add this line so that c[i] can be used in: c[i] += ....
for (j = 0; j < n; ++j) {
c[i] += a[j][i] * b[j];
}
}