1. 程式人生 > >《C語言及程式設計》實踐參考——矩陣運算

《C語言及程式設計》實踐參考——矩陣運算

【專案2-矩陣運算】
  在數學中,一個矩陣由若干行和若干列資料組成,可以直接儲存為一個二維陣列。
(1)矩陣相加
  兩個矩陣相加,要求其行、列數均相等。運算規則為:一個n行m列的矩陣A加上另一個n行m列的矩陣,得到的結果是一個n行m列的矩陣C,C中的第i行第j列位置上的數等於A和B矩陣第i行第j列上數相加的和。例如:

  請程式設計序,實現兩個矩陣的加法。[參考解答]
#include <stdio.h>
int main( )
{
    int a[4][3]= {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
    int b[4][3]= {{10,20,30},{40,50,60},{70,80,90},{100,110,120}};
    int c[4][3];
    int i,j;
    for (i=0; i<4; i++)
    {
        for (j=0; j<3; j++)
        {
            c[i][j]=a[i][j]+b[i][j];
            printf("%4d",c[i][j]);
        }
        printf("\n") ;
    }
    return 0;
}



(2)矩陣相乘
  一個n行m列的矩陣可以乘以一個m行p列的矩陣,得到的結果是一個n行p列的矩陣,其中的第i行第j列位置上的數等於前一個矩陣第i行上的m個數與後一個矩陣第j列上的m個數對應相乘後所有m個乘積的和。
  例如,下面的算式表示一個2行3列的矩陣乘以3行4列的矩陣,其結果是一個2行4列的矩陣:

  按二維陣列習慣,從第0行第0列開始計數,結果中第1行第2列的元素是9,是通過左矩陣中的第1行(2  0  3),乘以右矩陣中的第2列(3  2  1),對應數相乘並加起來,就得到了9,即2×3-0×2+3×1=9。請將這個矩陣乘手工計算一下,規則不復雜。
  請程式設計序,實現兩個矩陣的乘法。
[參考解答]
#include <stdio.h>
int main( )
{
    int a[2][3]= {{1,1,0},{2,0,3}}, b[3][4]= {{0,2,3,1},{1,0,2,2},{2,1,1,1}},c[2][4];
    int i,j,k,s;
    for (i=0; i<2; i++)
        for (j=0; j<4; j++)
        {
            s=0;  //①
            for (k=0; k<3; k++)
                s+=a[i][k]*b[k][j]; //②
            c[i][j]=s;
        }
    for (i=0; i<2; i++)
    {
        for (j=0; j<4; j++)
            printf("%6d",c[i][j]);
        printf("\n") ;
    }
    return 0;
}
注:①由後面c[i][j]=s知,接下來要求s,為c[i][j]求值。s是累加和,需要置0
②c[i][j]的值是a中第i行中的每一個數a[i][k]乘以b中第j列中的每一個數b[k][j]累加得出,關於k的迴圈保證了能將這裡的每一個數相乘並累加,所以累加的專案是a[i][k]*b[k][j]