5 3×3 行列データ型 [10 ポイント] 定数、印刷、および行列乗算からの初期化をサポートする 3×3 行列型を作成します。 5.1 データ型 double 値の 3 × 3 行列を保持する型 Mat3 を定義します。 初期化できることを確認してください このように、定数を使用した行列。 mat3 mat3 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; 5.2 印刷 行列 M の内容を出力する関数 void Mat3_print(Mat3 M) を書きます。この時点で このプログラムを実行できるはずです。 int main() { mat3 mat3 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; Mat3_print(mat3); 0 を返します。 } 出力は、Mat3 の初期化子のようになります。たとえば、次のようになります。 { { 1.000000, 2.000000, 3.000000 }, { 4.000000, 5.000000, 6.000000 }, { 7.000000、8.000000、9.000000 } } 5.3 算術 行列 A を乗算する関数 void Mat3_mulMat3(Mat3 A, Mat3 B, Mat3 P) を記述します。 行列 B を計算し、結果を行列 P に配置します。このプログラム Mat3 A = { { 2, 1, 5 }, { 2, 10, 5 }, { 3, 1, 4 } }; Mat3 B = { { 8, 7, 1}, { 4, 2, 7 }, { 2, 3, 5 } }; Mat3 P; Mat3_mulMat3(A、B、P); Mat3_print(P); 次の結果を出力する必要があります。 { { 30.000000 31.000000 34.000000 } { 66.000000 49.000000 97.000000 } { 36.000000 35.000000 30.000000 } } 5.4 成果物 プログラムを (上記の宣言、計算、および出力を使用して) 提示します。 確認します。
/* 5.1 */ typedef struct Mat3_s { double data[3][3]; } Mat3; /* 5.2 */ // print out the matrix void Mat3_print(Mat3 M) { printf("{ { %f, %f, %f },\n" " { %f, %f, %f },\n" " { %f, %f, %f } }\n", M.data[0][0], M.data[0][1], M.data[0][2], M.data[1][0], M.data[1][1], M.data[1][2], M.data[2][0], M.data[2][1], M.data[2][2]); } /* 5.3 */ // calculate the product of two matrices void Mat3_mulMat3(Mat3 A, Mat3 B, Mat3 P) { // multiply the two matrices for (int