我用c语言写了一段代码,用多维矩阵和循环求矩阵的乘法,但它是打印地址

我用c语言写了一段代码,用多维矩阵和循环求矩阵的乘法,但它是打印地址,c,C,我用c语言写了一个代码,通过使用多维矩阵和循环来寻找矩阵的乘法,一切都很好,但它是打印地址,我已经尝试了一切,但我无法找出我的错误。Anbody plz帮助我找出问题所在。一个建议将非常有帮助 #include <stdio.h> int main() { int a[10][10], b[10][10], result[10][10]; int r1, c1, r2, c2, i, j, k, sum = 0; printf("give

我用c语言写了一个代码,通过使用多维矩阵和循环来寻找矩阵的乘法,一切都很好,但它是打印地址,我已经尝试了一切,但我无法找出我的错误。Anbody plz帮助我找出问题所在。一个建议将非常有帮助

#include <stdio.h>

int main() {
    int a[10][10], b[10][10], result[10][10];
    int r1, c1, r2, c2, i, j, k, sum = 0;
    
    printf("give number of rows and column");
    scanf("%d %d", &r1, &c1);
    
    printf("give number of rows and column");
    scanf("%d %d", &r2, &c2);
    
    while (c1 != r2) {
        printf("invalid matrix");
        
        printf("give number of rows and column");
        scanf("%d %d", &r1, &c1);
        
        printf("give number of rows and column");
        scanf("%d %d", &r2, &c2);
    }

    for (i = 1; i <= r1; i++) {
        for (j = 1; j <= c2; j++) {
            printf("enter the numbers for 1\n");
            scanf("%d", &a[i][j]);
        }
    }

    for (i = 1; i <= r1; i++) {
        for (j = 1; j <= c2; j++) {
            printf("enter the numbers \n");
            scanf("%d", &b[i][j]);
        }
    }

    for (i = 0; i < r1; ++i) {
        for (j = 0; j < c2; ++j) {
            for (k = 0; k < c1; ++k) {

                sum += a[i][k] * b[k][j];
            }
        }
        result[i][j] = sum;
        sum = 0;
    }

    for (int i = 1; i <= r1; i++) {
        for (int j = 1; j <= c2; j++) {
            printf("%d", result[i][j]);
        }
        printf("\n\n\n");
    }

    return 0;
}
#包括
int main(){
int a[10][10],b[10][10],result[10][10];;
int r1,c1,r2,c2,i,j,k,和=0;
printf(“给出行数和列数”);
scanf(“%d%d”、&r1和&c1);
printf(“给出行数和列数”);
scanf(“%d%d”、&r2和&c2);
而(c1!=r2){
printf(“无效矩阵”);
printf(“给出行数和列数”);
scanf(“%d%d”、&r1和&c1);
printf(“给出行数和列数”);
scanf(“%d%d”、&r2和&c2);
}

对于(i=1;i我认为,正如人们在评论中指出的,您的代码中存在几个问题:

  • 当以数组作为输入时,您从
    1..r1
    迭代,但数组索引从零开始,因此对于长度为n的数组,您应该从
    0..n-1
    迭代。这意味着r=0,c=0的矩阵索引具有未初始化的垃圾值。您需要修改数组输入循环,如下所示:
  • (i=0;i{ 对于(j=0;j
  • 在最外层的循环中,当计算要将sum赋值给结果[i][j]的sum时,需要在第二个循环中执行此操作,在第二个循环中迭代列以获得结果:
  • (i=0;i{ 对于(j=0;jfor(k=0;k
    result[i][j]=sum;
    必须在for(k
    循环的末尾上移。它现在位于for(j
    循环的
    之后,因此
    j
    不再是有效的索引。所有循环都应该将其循环变量初始化为零,而不是1。