2015-10-06 387 views
-2

我正试图编写一个程序来计算两个矩阵的总和和乘积,但是我无法让它的产品工作。总数很好。我正在使用Visual Studio。2x2矩阵乘法

这是我的计划:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    float a[2][2], b[2][2], c[2][2], d[2][2], sum; 
    int i,j,k; 

    for(i = 0; i < 2; i++) { 
     for(j = 0; j < 2; j++) { 
     d[i][j] = 0; 
     } 
    } 

    printf("Enter the elements of 1st matrix\n"); 
    /* 
    * Reading two dimensional Array with the help of two for loop. If there 
    * was an array of 'n' dimension, 'n' numbers of loops are needed for 
    * inserting data to array. 
    */ 
    for (i = 0; i < 2; ++i)  
     for (j = 0; j < 2; ++j) { 
     printf("Enter a%d%d: ", i + 1, j + 1); 
     scanf("%f", &a[i][j]); 
     } 

    printf("\nEnter the elements of 2nd matrix\n"); 
    for (i = 0; i < 2; ++i) 
     for (j = 0; j < 2; ++j) { 
     printf("Enter b%d%d: ", i + 1, j + 1); 
     scanf("%f", &b[i][j]); 
     } 

    printf("\nMatrix 1:\n"); 
    for (i = 0; i < 2; ++i) 
     for(j = 0; j < 2; ++j) { 
     printf("%.1f\t", a[i][j]); 
     if (j == 1)    /* To display matrix sum in order. */ 
      printf("\n"); 
     } 
    printf("\nMatrix 2:\n"); 

    for(i = 0; i < 2; ++i) 
     for(j = 0; j < 2; ++j) { 
     printf("%.1f\t", b[i][j]); 
     if (j == 1)    /* To display matrix sum in order. */ 
      printf("\n"); 
     } 

    for (i = 0; i < 2; ++i) 
     for(j = 0; j < 2; ++j) { 
     /* Writing the elements of multidimensional array using loop. */ 
     c[i][j]=a[i][j]+b[i][j]; /* Sum of corresponding elements of two arrays. */ 
     } 
    printf("\nSum Of Matrix:\n"); 
    for (i = 0; i < 2; ++i) 
     for(j = 0; j < 2; ++j) { 
     printf("%.1f\t",c[i][j]); 
     if (j == 1)    /* To display matrix sum in order. */ 
      printf("\n"); 
     } 

    for(i = 0 ; i < 2 ; i++) { 
     for(j = 0 ; j < 2 ; j++) { 
     sum = 0 ; 
     for(k = 0 ; k < 2 ; k++) { 
      sum = sum + a[i][k] * b[k][j]; 
      printf("a: %d; b: %d\n", a[i][k], b[k][j]); 
      printf("%d", sum); 
     } 
     d[i][j]=sum; 
     } 
    } 
    printf("\nThe multiplication matrix is : \n\n") ; 
    for(i = 0; i < 2; i++) { 
     for(j = 0; j < 2; j++) { 
     printf("%d \t", d[i][j]) ; 
     } 
     printf("\n") ; 
    } 

    system("PAUSE"); 
    return 0; 
} 

这里是输出:

Matrix 1: 
1.0  2.0 
3.0  4.0 

Matrix 2: 
5.0  6.0 
7.0  8.0 

Sum Of Matrix: 
6.0  8.0 
10.0 12.0 
a: 0; b: 1072693248 
0a: 0; b: 1073741824 
0a: 0; b: 1072693248 
0a: 0; b: 1073741824 
0a: 0; b: 1074266112 
0a: 0; b: 1074790400 
0a: 0; b: 1074266112 
0a: 0; b: 1074790400 
0 
The multiplication matrix is : 

0  0 
0  0 

我不能看到那里的问题是两个矩阵A和B.

+2

良好的编译器警告错误匹配的格式说明符和参数,如'float sum; ... printf(“%d”,sum);'。节省时间,确保您的编译器警告完全启用或考虑使用新的编译器。 – chux

回答

4

首先,例如,我不会将for循环的终止硬编码为一个常量,而是将其编码为sizeof(a)/sizeof(a[0])。其次,问题是你要打印彩车为int - 行68读取:

printf("a: %d; b: %d\n",a[i][k],b[k][j]);

但它应该是上线68,69存在

printf("a: %.1f; b: %.1f\n",a[i][k],b[k][j]);

这些问题, 79.如果你把%d改成%f,你应该没问题。

+1

是,甚至是'%.1f'以匹配前面的语句。 –

+0

Thanks @WeatherVane,将您的建议纳入编辑。 – BlueCollar