今回は、「C言語/数学に関するプログラムの使い方」についての説明です。
1.初めに
これまで色んな関数が出てきましたが、数学に関係した関数というものも存在します。
数学に関係した関数を扱うにはまた特別なヘッダファイルを読み取る必要があります。
実際に使用する状況が出てくるかは置いといて、どんなものがあるのか、今回は一部を紹介していこうと思います。
2.今回使用するヘッダファイル
今回新たに登場するヘッダファイルは、「math.h」です。
数学に関連したライブラリがこの「math.h」にまとまっています。
名称があからさまに数学に関係しているので、これぐらいわかりやすいと覚えやすくて良いですよね。
3.三角関数を表現する
まずは、三角関数をプログラムで取り扱っていこうと思います。
三角関数が何かを忘れた・知らないという方は、以下の記事を参考にしてみてください。
では、早速どんなプログラムなのか見ていきましょう。
角度をラジアン(rad)に変換する
まずは、角度をラジアン(rad)で表すところからです。
この時点では新たな関数は出てきませんが、後々必要になる手順なので紹介しています。
#include<stdio.h>
#include<math.h>
#define PI 3.14
void main() {
int kaku;
double rad;
printf(“0~360度の範囲で角度を入力してください。\n”);
scanf(“%d”, &kaku);
rad = (double)kaku * PI / 180.0;
printf(“入力値は%f[rad]です。”, rad);
}
4行目に何か変なのがありますね。
これは、『PIという文字列は3.14と定義(define)しますよ』というマクロです。
こうすることで、以降のプログラムで“PI”という文字列が出てくると、それは3.14だと認識するようになります。
円周率π(パイ)を3.14だと定義しているだけということですね。
最近の若い子は円周率は3と習うんでしたっけ?
このように、定数を定義したい場合はマクロを使う習わしになっています。
定数なので、変数のように途中で変更できない点には注意しましょう。
また、小文字でも問題無いのですが、そうすると変数とごっちゃになるので、大体は大文字にするようにされています。
※以前しれっと述べましたが、「#」が付いているものがマクロで、マクロはコンパイラ(プログラミング言語で記述されたプログラムを機械語に翻訳/コンパイルするプログラム)に指令を与えるもののことを指しています。
後は、これまで扱ってきた関数を組み合わせているだけです。
大まかには以下のようなことをしています。
7行目:整数kakuを定義。
8行目:実数radを定義。
9行目:printfで「0~360度の範囲で角度を入力してください。」と文字を表示。
10行目:scanfで整数をキーボード入力。
11行目:角度をラジアン(rad)に変換。その計算過程で整数から実数に変わるので(double)kakuになっている。「角度×3.14(π)÷180=ラジアン」。
12行目:printfでキーボード入力した値がラジアンで表現するとどうなるのかを表示。実数になっているので変換指定子は%dではなく%fにすること。
180度=π[rad]=3.14[rad]になっているでしょう?
これで前準備が整いました。
sin・cos・tan関数
「math.h」で用意されている三角関数は、sin・cos・tanの3種類です。
使い方は簡単で、【sin()】のように記述し、括弧の中に角度[rad]を入力するだけです。
一般的な角度の表し方のことは度数法、ラジアンを用いた表し方を弧度法と呼びますが、ここで必要になってくるのは弧度[rad]なのです。
だから[度]を[rad]に変換する前準備が必要だったんです。
では、実際の使用例を見てみましょう。
#include<stdio.h>
#include<math.h>
#define PI 3.14
void main() {
int kaku;
double rad;
printf(“0~360度の範囲で角度を入力してください。\n”);
scanf(“%d”, &kaku);
rad = (double)kaku * PI / 180.0;
printf(“入力値は%f[rad]です。\n”, rad);
printf(“sin%d°=%f\n”, kaku, sin(rad));
printf(“cos%d°=%f\n”, kaku, cos(rad));
printf(“tan%d°=%f\n”, kaku, tan(rad));
}
12行目に改行の【\n】を追加し、13~15行目でsin(rad)・cos(rad)・tan(rad)の計算結果をそれぞれ出力するように記述しました。
試しに何パターンか結果を見てみますね。
今回はπを3.14と定義していますが、実際の円周率は3.141592653589…と無限に続きます。
その為、微妙にズレは出てきますが、大まかな計算は合っていることが見てとれます。
ただ、tan90°のみ本来は解無しなのでおかしな値が出力されています。
プログラミングにおいては何かしらの値を返さなければならないので、何も対処をしないとこんな具合に間違った値が出てしまいます。
この辺りは要調整ですね。
4.絶対値を表現する
次は、絶対値を表現する方法について説明していきます。
絶対値とは、符号を考えない量のこと・基準点との量の差のことです。
詳しくは別途まとめてあるので、よくわからないという方は以下の記事を参考にしてみてください。
絶対値を表すことができる関数は、以下の4種類が存在します。
- abs関数…int型の絶対値を計算する
- labs関数…long型の絶対値を計算する
- fabsf関数…float型の絶対値を計算する
- fabs関数…double型の絶対値を計算する
ここでは、abs関数(int型=整数に対応)とfabs関数(double型=実数に対応)の使用例を挙げていきます。
#include<stdio.h>
#include<math.h>
void main() {
int a = -10;
int b = +10;
double c = -1.5;
double d = +1.5;
printf(“%dの絶対値は%dです。\n”, a, abs(a));
printf(“%dの絶対値は%dです。\n”, b, abs(b));
printf(“%fの絶対値は%fです。\n”, c, fabs(c));
printf(“%fの絶対値は%fです。\n”, d, fabs(d));
}
三角関数の時と同じく、【abs()】・【fabs()】の括弧内に数値を入力するだけです。
先程述べたように、abs関数は整数に対応しているので変換指定子を%d、fabs関数は実数に対応しているので変換指定子を%fにするのを忘れないようにしましょう。
プログラムの実行結果は以下の通りです。
符号がマイナスだったa(-10)とc(-1.5)が絶対値となり10と1.5になっていますね。
ちなみに、absは[absolute(絶対)]、fabsは[float(浮動小数点)]にabsがくっついたものを指しています。
5.乗数と平方根を表現する
最後は、乗数と平方根の表現方法です。
2の3乗は8、4の平方根は±2というヤツです。
これらも別途まとめてあるので、よくわからないという方は以下の記事を参考にしてみてください。
乗数はpow関数、平方根はsqrt関数を用います。
まずは使用例を見てみましょう。
#include<stdio.h>
#include<math.h>
void main() {
double a = 4.0;
printf(“%fの2乗は%fです。\n”, a, pow(a, 2));
printf(“%fの平方根は%fです。\n”, a, sqrt(a));
}
sqrt関数の使い方は三角関数と絶対値の時と同じです。
普通に【sqrt()】の括弧内に平方根にしたい数値を入力しましょう。
pow関数だけちょっと変わってきます。
理由は単純、乗数とは言っても何乗にしたいのかを指定する必要があるからです。
なので、数値を入力したら「,」で区切って何乗にしたいのかの数値を入力する形式になります。
この例の場合は変数aを2乗することになります。
ここの“2”を“3”にすれば3乗に変わります。
このプログラムの実行結果は以下の通りです。
しっかり4の2乗と4の平方根が求められていますね。
ちなみに、sqrtは[square root(平方根)]のことです。
以上、「C言語/数学に関するプログラムの使い方」についての説明でした。