我在不考虑需要检测的事实的情况下设置了我的代码,因此我似乎无法弄清楚如何实现它。这是一个简单的矩阵乘法器。
基本上,它需要检测两个条件。
如果矩阵1中的列不等于矩阵2中的行,请退出程序并显示错误消息。我做到了。
如果用户为matrix1和matrix2的行和列值输入的值为非零,则为正值。我遇到了这个问题。
我们的教授设置的方式是我们复制并粘贴一组值,它就是这样做的。但是,如果我们将其复制并粘贴到输入中,我就会混淆如何使用行和列来检测错误,以便接受我使用for循环的其余数据扫描所有值,for循环的长度取决于matrix1和matrix2的行和列的输入。如果这些是负面的,那么for循环无论如何都不会起作用。
真的,任何帮助都会受到赞赏,除了这个细节之外,我已经完成了其他所有部分。非常感谢。
#include <stdio.h>
int main(int argc, char *argv[]) {
int rows1 = 1, columns1 = 1, rows2 = 1, columns2 = 1; // variables for number of rows and columns in each matrix
int i, j, k; // loop variables
// These will affect the loop's length
scanf("%d %d", &rows1, &columns1);
int matrix1[rows1][columns1];
for (i = 0; i < rows1; i++) {
for (j = 0; j < columns1; j++) {
scanf("%d", &matrix1[i][j]);
}
}
scanf("%d %d", &rows2, &columns2);
int matrix2[rows2][columns2];
for (i = 0; i < rows2; i++) {
for (j = 0; j < columns2; j++) {
scanf("%d", &matrix2[i][j]);
}
}
int resultMatrix[rows1][columns2]; // Initialization of resultMatrix, that holds the result of the multiplication
int matrix1RowIndex = 0, matrix1ColIndex = 0, matrix2ColIndex = 0;
if (columns1 != rows2) {
printf("Sorry, the amount of columns in the first matrix must equal the amount of rows in the second matrix.\n");
}
else {
// Loop to set the values of resultMatrix's indices
for (i = 0; i < rows1; i++) { // rows
for (j = 0; j < columns2; j++) { // columns
resultMatrix[i][j] = 0;
for (k = 0; k < columns1; k++) { // for each individual index to be summed for the resultMatrix's value
resultMatrix[i][j] += (matrix1[matrix1RowIndex][matrix1ColIndex + k] * matrix2[matrix1ColIndex + k][matrix2ColIndex]);
}
matrix2ColIndex++;
}
matrix1RowIndex++;
matrix2ColIndex = 0;
}
//prints resultMatrix
for (i = 0; i < rows1; i++) { // rows
for (j = 0; j < columns2; j++) { // columns
printf("%6d", resultMatrix[i][j]);
}
printf("\n");
}
}
}
答案 0 :(得分:1)
看起来您可以使用if语句检查有问题的值是否大于零,不是吗?