next up previous
Next: 練習問題 Up: 計算機言語 I 第 10回 Previous: 変換プログラムその 2

配列を引数にする(例: 内積を用いた角度の計算)

C 言語では, 配列を函数の返り値に使う事はできません. しかし, 引数に使う事は できます. 次がその例で, 2つの3次元ベクトルのなす角を出力します.

/* File name 10-4.c  */

#include <stdio.h>
#include <math.h>
#define BUFFSIZE 1024
double inn_prod(double a[], double b[]);

main()
{
        char nyuryoku[BUFFSIZE];
        double a[3], b[3];
        double angle;

        printf("Input the components  x, y and z of the 1st vector>>");
        fgets(nyuryoku, BUFFSIZE, stdin);
        sscanf(nyuryoku, "%lf %lf %lf", &a[0], &a[1], &a[2]);

        printf("Input the components x, y and z of the 2nd vector>>");
        fgets(nyuryoku, BUFFSIZE, stdin);
        sscanf(nyuryoku, "%lf %lf %lf", &b[0], &b[1], &b[2]);

        angle = acos(inn_prod(a, b)/sqrt(inn_prod(a, a)*inn_prod(b, b)));
        printf("The angle is about %lf radian.\n", angle);
}

double inn_prod(double a[], double b[])
{
        return a[0]*b[0]+a[1]*b[1]+a[2]*b[2];
}

このプログラムで, 関数 inn_prod と言う内積を計算する関数は, double 型の配列を引数にしています.

角度の計算で acos と言う関数が使われていますが, これは cos の逆関数で, 返り値はラジアン単位です. これは, 数学関数ライブラリに入っています. また, 数学関数ライブラリ を使いますから, コンパイル時にはオプション -lm を付けて下さい.



Next: 練習問題 Up: 計算機言語 I 第 10回 Previous: 変換プログラムその 2