プログラミング実習

プログラミング論
第二十一回
標準ライブラリ関数(数学関数)
本日の内容

数学関数を使おう
– 数学関数の形式
– ラジアン変換
– 代表的な数学関数


入出力用の関数
その他の標準ライブラリ関数
– 数値変換用関数
– プログラムの強制終了
数学関数を使う


数学関数は,「math.h」というヘッダファイルの中に定
義されています。
次のような関数があります。形式は,double型の引数
を受け取りdouble型の結果を返すものがほとんどです。
– double sin(double x)

sin値を計算します。引数xはラジアン角で指定します
– double cos(double x)
– double tan(double x)
– double pow(double x, double y)

xのy乗を計算します
– double log10(double x)

xの常用対数を計算します
– double sqrt(double x)

xの平方根を計算します
数学関数を使う

sin関数を使ってみよう
– math.hをincludeします。
– 角度はラジアンで指定します。360度が2πラ
ジアンです。間違えないように指定しましょう。
– 10度ごとに値を出力してみましょう。
– ensyu60.cを確認してください。
数学関数を使う
// ensyu60.c sin関数を使ってみよう
#include <stdio.h>
#include <math.h> math.hをincludeすることを忘れないように!
int main(void)
{
int i;
double d, pi=3.141592;
0度からスタートして,10度刻みで
360度まで計算を繰り返します。
for(i=0; i<360; i+=10){
d=sin(i*pi/180);
printf("%d %f\n", i, d);
}
return 0;
}
数学関数を使う
// ensyu60.c sin関数を使ってみよう
#include <stdio.h>
#include <math.h>
int main(void)
{
int i;
double d, pi=3.141592;
for(i=0; i<360; i+=10){ 1度はpi/180ラジアンです。
i度をラジアンに変換します。
d=sin(i*pi/180);
printf("%d %f\n", i, d);
}
return 0;
}
数学関数を使う

ensyu60.cを実行し,得られた結果をメモ
帳に貼り付けて保存し,エクセルでグラフ
にしてみましょう。
数学関数を使う

二次方程式の解を求めるプログラムを
作ってみましょう。
ax  bx  c  0
2
まず,a, b, cの値を入力します。
 b  b  4ac
x
2a
2
*ensyu61.cを完成させてください
解の公式を使って計算
します。
課題

二次方程式は,b*b-4*a*cの値が0より大きい
か,0であるか,0より小さいか,で答えが異なり
ます。
– b*b-4*a*c > 0 異なる2つの実数解をもつ
– b*b-4*a*c == 0 重解(1つの解)をもつ
– b*b-4*a*c < 0 実数解を持たない

if文を用いて,これらの場合分けを行いきちんと
答えが出力されるようなプログラムを作成しな
さい。
入出力用の関数

標準入出力用(キーボードから入力,画面に出
力)の関数は,「stdio.h」に定義されています。
関数名
説明
putchar( )
1文字出力
getchar( )
1文字入力
puts( )
文字列出力
gets( )
文字列入力
printf( )
書式付き出力
scanf( )
書式付き入力
*以前の授業で学習済みです
その他の標準ライブラリ関数

数値変換用関数
– “1234”といった「文字列」を,1234という「整数値」に変
換する関数です。
– 「stdlib.h」に定義されています。



int atoi(char []) 文字列を整数値へ変換
double atof(char[]) 文字列を実数値へ変換
プログラムの強制終了
– プログラムを途中で強制終了させる関数です。
– 「stdlib.h」に定義されています。

exit(1); その場所でプログラムを強制終了する
その他の標準ライブラリ関数
プログラムの強制終了


ensyu61.cにおいて,b*b-4*a*cが負だっ
た場合には「実数解はありません」と表示
して強制終了する処理を追加しなさい。
ensyu62.cを完成させなさい。