【发布时间】:2010-03-15 01:49:33
【问题描述】:
我在作业中遇到了这个问题。我已经做到了这一点,并且确信问题出在我的三个 for 循环中。问题直接说要使用 3 个 for 循环,所以我知道这可能只是一个逻辑错误。
#include<stdio.h>
void matMult(int A[][5],int B[][5],int C[][5]);
int printMat_5x5(int A[5][5]);
int main() {
int A[5][5] = {{1,2,3,4,6},
{6,1,5,3,8},
{2,6,4,9,9},
{1,3,8,3,4},
{5,7,8,2,5}};
int B[5][5] = {{3,5,0,8,7},
{2,2,4,8,3},
{0,2,5,1,2},
{1,4,0,5,1},
{3,4,8,2,3}};
int C[5][5] = {0};
matMult(A,B,C);
printMat_5x5(A);
printf("\n");
printMat_5x5(B);
printf("\n");
printMat_5x5(C);
return 0;
}
void matMult(int A[][5], int B[][5], int C[][5])
{
int i;
int j;
int k;
for(i = 0; i <= 2; i++) {
for(j = 0; j <= 4; j++) {
for(k = 0; k <= 3; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
}
int printMat_5x5(int A[5][5]){
int i;
int j;
for (i = 0;i < 5;i++) {
for(j = 0;j < 5;j++) {
printf("%2d",A[i][j]);
}
printf("\n");
}
}
编辑: 这是问题,抱歉没有第一次发布。
编写一个 C 函数以将两个 5 乘以 5 矩阵相乘。原型应该是
void matMult(int a[][5],int b[][5],int c[][5]);在二维数组
c(函数的第三个参数)中返回得到的矩阵乘积(a乘以b)。使用三个嵌套的 for 循环(每个循环生成计数器值 0、1、2、3、4)编写您的解决方案,也就是说,不要为问题中的 5 x 5 情况编写特定公式,而是使您的代码通用,以便它可以很容易改变以计算更大方阵的乘积。编写一个主程序来使用数组测试你的函数a: 1 2 3 4 6 6 1 5 3 8 2 6 4 9 9 1 3 8 3 4 5 7 8 2 5 b: 3 5 0 8 7 2 2 4 8 3 0 2 5 1 2 1 4 0 5 1 3 4 8 2 3使用为打印五乘五矩阵而创建的 C 函数以简洁的格式打印矩阵。打印所有三个矩阵。使用 C 数组初始化功能在主程序中生成测试数组。
【问题讨论】:
-
您有实际问题吗?我不确定你在找什么。
-
记住,对于产品中给定的索引
i, j,你取第一个矩阵的i行,第二个矩阵的j列,然后乘+加所有这两组数字中的n对。为什么您的索引变量分别到 2、4 和 3?你从哪里得到这些数字的? -
我希望我能否决这位浪费学生时间的教授,因为他们可以专注于真正能促进他们大学毕业后职业生涯的事情。
-
那么,@George,您拥有 Dip.Ed.,是吗?或者你只是一个对教育过程了如指掌的极客,但还是觉得有必要对此发表评论? :-)
-
您可以假设 C99 和 VLA 吗?这需要使用它们。另请注意,该问题要求您将 NxM 矩阵乘以生成 NxL 矩阵的 MxL - 如果我对矩阵乘法的记忆是正确的。该测试是 N = M = L = 5 的特殊情况——这为隐藏错误留下了足够的空间。如果矩阵不可乘怎么办?等等。