2017-04-05 53 views
1

我必須編寫一個不使用*運算符來乘兩個矩陣的c程序。我寫了一個代碼,但結果是不正確的我認爲與while循環的東西是不正確的。我希望有人能幫幫忙。問候中號c:沒有*運算符的矩陣乘法

這裏是我的代碼:

#include<stdio.h> 

int main() 
{ 
    int matrix1[4][4]; 
    int matrix2[4][4]; 
    int matrix3[4][4]; 
    int a; 
    int b; 
    int c; 
    int sum; 
    int multi = 0; 

    //first matrix 
    for(a=0; a<4; a++) 
    { 
    for(b=0; b<4; b++) 
    { 
     scanf("%d", &matrix1[a][b]); 
    } 
    } 
    //second matrix 
    for(a=0; a<4; a++) 
    { 
    for(b=0; b<4; b++) 
    { 
     scanf("%d", &matrix2[a][b]); 
    } 
    } 
//Multiplication: 
    for(a=0; a<=3; a++) 
    { 
    for(b=0; b<=3; b++) 
    { 
     sum=0; 
     for(c=0; c<=3; c++) 
     { 
     while(matrix2[c][b]>0) 
     { 
      multi += matrix1[a][c]; 
      matrix2[c][b]--; 
     } 
     } 
     sum = sum+multi; 
     matrix3[a][b]=sum; 
    } 
    } 

    //result; 
    for(a=0; a<4; a++) 
    { 
    for(b=0; b<4; b++) 
    { 
     printf(" %d ", matrix3[a][b]); 
    } 
    printf("\n"); 
    } 
    return 0; 
} 
+0

想想乘法定義你的代碼修改矩陣的初始值。 – dbush

+3

「我認爲」聽起來像你需要學習如何使用調試器。知道如何調試程序非常方便,並且是技能的一部分。 –

+0

在算術運算符中的'*'運算符,或在*中的指針/解引用運算符? –

回答

1

你有2個主要錯誤

  1. ,必須重置multi0sum,那是沒用的
  2. 你必須使用一個臨時變量爲你的moltiplication ,.使用matrix2[c][b]--;

#include<stdio.h> 

int main(void) 
{ 
    int matrix1[4][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; 
    int matrix2[4][4] = { {17,18,19,20},{21,22,23,24},{25,26,27,28},{29,30,31,32}}; 
    int matrix3[4][4]; 
    int a; 
    int b; 
    int c; 
    int multi = 0; 

    //Multiplication: 
    for (a = 0; a < 4; a++) 
    { 
     for (b = 0; b < 4; b++) 
     { 
      multi = 0; 
      for (c = 0; c < 4; c++) 
      { 
       int temp = matrix2[c][b]; 
       while (temp > 0) 
       { 
        multi += matrix1[a][c]; 
        temp--; 
       } 
      } 
      matrix3[a][b] = multi; 
     } 
    } 

    //result; 
    for (a = 0; a < 4; a++) 
    { 
     for (b = 0; b < 4; b++) 
     { 
      printf("%d\t", matrix3[a][b]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

輸出

250 260 270 280 
618 644 670 696 
986 1028 1070 1112 
1354 1412 1470 1528