#include /*======== 関数プロトタイプ ========*/ /* プログラムの中で別に作成した関数を参照するときは、 関数プロトタイプを作成する。 関数プロトタイプは、include文と同様に、 ソースファイルの最初にまとめて記述する。 */ int product( int imax, float a[imax][imax], float b[imax], float c[imax] ); /*======== 行列aとベクトルbの積を計算するための関数 ========*/ /* 関数の種類は整数(int)型、関数名はproductとする。 引数はimax(int型)、a、b、c(float型配列のポインタ)である。 */ int product( int imax, float a[imax][imax], float b[imax], float c[imax] ) { /* 変数を宣言する。 */ int i, j; /* ここからforループが始まる。 */ for (i=0; i<=imax-1; i++) { /* c[i]にゼロを代入する。 */ c[i] = 0.; /* ここからforループが始まる。 */ for (j=0; j<=imax-1; j++) { /* 行列aの(i,j)成分とベクトルbの第j成分の積を、 c[i]に加える。 */ c[i] = c[i] + a[i][j] * b[j]; /* ここでforループが終了する。 */ } /* ここでforループが終了する。 */ } return 0; } /*======== main関数 ========*/ /* プログラムはmain関数から実行される。 */ int main( void ) { /* 変数imaxを宣言する。 */ int imax=3, i, status; /* 配列a、b、cを宣言する。 配列aはimax行imax列の行列に対応する。 また配列bは要素数imaxのベクトル、 配列cは要素数imaxのベクトルに対応する。 */ float a[3][3] = { 0.7,-0.7, 0.0, 0.7, 0.7, 0.0, 0.0, 0.0,-1.0 }; float b[3] = { 2.0, 1.0,-1.0 }; float c[3]; /* 行列aとベクトルbの積を計算する。 */ status = product( imax, a, b, c ); /* 結果を書き出す。 */ /* ここからforループが始まる。 */ for (i=0; i<=imax-1; i++) { /* c[i]の値を標準出力に書き出す。 */ printf( "c[%d] = %f\n", i+1, c[i] ); /* ここでforループが終了する。 */ } return 0; }