我如何确保这两个矩阵具有非零,正行和列值?

时间:2012-03-01 17:39:33

标签: c matrix

我在不考虑需要检测的事实的情况下设置了我的代码,因此我似乎无法弄清楚如何实现它。这是一个简单的矩阵乘法器。

基本上,它需要检测两个条件。

  1. 如果矩阵1中的列不等于矩阵2中的行,请退出程序并显示错误消息。我做到了。

  2. 如果用户为matrix1和matrix2的行和列值输入的值为非零,则为正值。我遇到了这个问题。

  3. 我们的教授设置的方式是我们复制并粘贴一组值,它就是这样做的。但是,如果我们将其复制并粘贴到输入中,我就会混淆如何使用行和列来检测错误,以便接受我使用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");
            }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

看起来您可以使用if语句检查有问题的值是否大于零,不是吗?