標準のヘッダファイルに加えて,以下の2つをインクルードする必要があります ので,必ず記入しておいてください.
#include <stdlib.h> #include <time.h> |
乱数は一度作られるとその順番が決まってしまいます.そこで,実行する度にそ の順番をシャッフルしないといけません.そのための命令を最初に書いておきま す.これは一つのプログラムの中に1回あればそれで構いません.
srand((unsigned) time(NULL)); |
今の時点で意味は分からないとは思いますが,unsigned とは符号無し の数(正の数)で,コンピュータ内の時計を利用して毎回違う数字を発生させるた めに,時間の関数である time を使っています.
乱数は以下の関数で発生させられます.
rand(); |
ただし,このとき発生する乱数は扱える最大の桁の整数になってしまいます.そ こで以下に示すように剰余を使用して範囲を限定します.
例えば,サイコロの目ですと全部で6種類なので6で割った余りを活用します.注 意するのは6で割った余りは0から5までなので,サイコロにするには1を加えて1 から6にする必要があることです.そこで,先ほどの例のようになるわけです.
rand() % 6 + 1; |
関数 rand() で発生させた値を計算などで使用するためには,変数に 代入しておく必要があります.例えば,変数 num に代入するときには,
int num; num = rand(); |
のようにしておくことで後々利用できます.
以下に示す演算を行って,整数型の演算結果を確かめて理解を深めましょう.
1 / 3
2 / 3
4 / 3
1 % 3
2 % 3
4 % 3
10 % 5
2桁の整数を乱数を利用して発生させて表示させましょう.2桁の整数とは10から 99までですので,全部で何種類あるか考えてから準備してください.以下のよう に結果を表示することにしましょう.
Obtained random number: 22 |
2から9までの整数を2つ乱数で発生させて,それらの和と差を求めるプログラム を作りましょう.表示は以下のようにしてください.
Obtained random number: 5 and 9 Sum of them: 14 Difference between them: -4 |
四則演算では無いですが,変数に代入した値を「入れ換える」操作を考えてみま しょう.次に示すプログラムの途中に入れ換えの式を入れて完成してください.
#include <stdio.h> main() { int m, n, tmp; m = 1; n = 2; printf("m = %d and n = %d\n", m, n); |
ここに入れ換えの処理を入れる |
printf("Exchange the values of m and n\n"); printf("m = %d and n = %d\n", m, n); return(0); } |
m = 1 and n = 2 Exchange the values of m and n m = 2 and n = 1 |
乱数を発生させる関数 rand() は整数しか取り扱えません.そこで,実 数の乱数を用意するためには,得られた整数を加工する必要があります.-1から1の 範囲で少数第2位までの実数を乱数で発生させる方法を考えてみましょう.
Obtained random number: -0.49 |
指数関数 e x のマクローリン展開は以下の式であることを すでに学習しています.その展開式を利用して x << 1 の 場合の関数の近似値を求めましょう.ここで x の値は0.10から0.20 までの少数第2位までの乱数とします.なお,展開 式は3次まで利用するものとし,値は少数第4位まで表示させて下さい.
e x = 1 + x + x2/2! + x3/3! + …
x = 0.19 e^x = 1.2092 |
なお,C言語におけるべき乗ですが,演算子は用意されていません. a^2 のようなものはありません.かけ算 を繰り返すか,<math.h> をインクルードして関数 pow() を使 用することになります.この授業では特殊な数学関数の使用はしないこととして いますので,ここでは,単純にかけ算で行いましょう.今後もべき乗は関数として は使用しませんので,注意してください.