乱数の発生:rand関数
rand関数の使い方
#include <stdlib.h>

int rand();

void srand(unsigned int seed);
rand関数は、コンピュータ上で擬似的に乱数を出力する関数である。 これはある数式に基づいて擬似乱数を逐次出力している(合同乗積法)。 その初期値を決める必要がある。 この初期値を代入するのがsrand関数で、カッコの中は適当な正の整数を代入する。
例:srand(5);
# カッコの中が同値の時、出力される乱数も同じ値である(これを隣同士で確認せよ)。
[0,1)の乱数 0 ≤ rnd() < 1の乱数を作りたいときには、[0,RAND_MAX)の整数の乱数rand()をその最大値で割ればよい。
標準的なものは次のようなものでしょう(古いバージョンのヒントでは非標準的なものなってしまいます)。
double x;
...
x = (double) rand()/RAND_MAX;
...
printf("%lf\n", x);
...
あるいは、
...
double rnd(){
	double x;
	x = (double)rand()/RAND_MAX;
	return(x);
}
...
int main(){
	...
	double rnd();
	double x;
	...
	x = rnd();
	printf("%lf\n", x);
	...
}
前者は初歩的かつ移植性を持ったもの、後者は発展性のあるもの(移植性もあります)。

rand()が取り得る最大値RAND_MAX二ついては、マニュアルを参照のこと(unix系ならば、man 3 rand)。 rand()、RAND_MAXともにint型であるので、割り算した値はint型(つまり0.… = 0)になってしまう。 これをdouble型(すなわち、小数点以下を表示)にするには、上のように右辺の最初に(double)と書いてやる必要がある。 これを「double型にキャストする」といいう。
[0,1]の乱数を10回表示 繰り返すには、for文を使います。for文の使い方は以下の通り。
for(初期化; 条件判定; インクリメント/デクリメント) 文;
例:
for(i=0; i<10; i++){
	printf("%lf\n", rnd());
}
c言語では一般に、変数は0から始まる。別に1から初めてもプログラム上は問題ないが、 他の人に見せたときに混乱の元になるので極力さける方がいい。
以下のプログラムでは、「おかしなこと」になる。どうなるでしょうか? (わかっている人にはどうってことないことですが、毎年数人これで悩んでいるので)
a = rnd();

for(i=0; i<10; i++){
	printf("%lf\n", a);
}