例題 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(後期開講)の 補足資料:関数が分からない人へ |