例題 3ここでも, 例題1, 例題2 と同様に,2 次元ベクトルを表現した構造体 vector を考える.
ベクトルの長さを調べる関数 length を作りなさい. コーディング例1 /* 2 * プログラミング演習 第 8 回 3 * [例題 3] 4 * (C) 2006 Hirohisa AMAN <aman@cs.ehime-u.ac.jp, aman@computer.org> 5 */ 6 #include <stdio.h> 7 #include <math.h> 8 9 /* 構造体 vector の宣言 */ 10 struct vector { 11 int x; 12 int y; 13 }; 14 15 /* ベクトルの長さ算出のための関数 */ 16 double length( struct vector* v ){ 17 18 /* ベクトルの長さを戻り値とする */ 19 return sqrt( (v->x)*(v->x) + (v->y)*(v->y) ); 20 21 } 22 23 int main(void){ 24 struct vector data; 25 double len; 26 27 scanf("%d %d", &data.x, &data.y); 28 29 len = length(&data); 30 printf("長さ = %lf\n", len); 31 /* 変数 len を使わずに直接 length(&data) を指定しても OK */ 32 33 return 0; 34 }
※左端の数字は行番号であり,ソースコードには含まれない点に注意!
コンパイル & 実行例$ gcc example8_3.c -lm [Enter] $ ./a.out [Enter] 3 4 [Enter] 長さ = 5.000000 $ ./a.out [Enter] 1 1 [Enter] 長さ = 1.414214(注意)数学関数 sqrt を使う場合, コンパイルオプションに -lm (マイナス,小文字の L,小文字の M) が必要になります. ※実行ファイル(a.out)を生成する際に, 別のコンパイル済み数学ライブラリをリンクする必要があるため. 解説関数の呼び出し方法は printVector (例題2 参照) と同様であるため説明は省略する.ベクトルの長さについては,あえて説明するまでもないが ![]()
そして,平方根はライブラリ関数 sqrt を使えばよい(19 行目):
関数 length は上で算出したベクトルの長さを return
の値に指定している
(既に知っていると思うが,
これを「戻り値(もどりち)」という.)
したがって,変数 len には, 関数内で算出されたベクトルの長さが代入される.(29行目) ●参考資料 - 情報工学実験 I(後期開講)の 補足資料:関数が分からない人へ |