- 本日の作業内容
- MinGW-w64のインストールについて
コンパイラのインストールについて,依然として上手く行っていない人がいるようです.特に,インストーラを実行して,
The file has been downloaded incorrectly
と表示されるエラーについては結構解決が難しいようです.そこで,インストーラを使用しないでファイルを直接ダウンロードして使う方法を紹介します.
windowsでGCCがインストールできない原因
の一番下にある解決法です.まず,ファイルをSourceforgeのサイトから直接ダウンロードします.
自分のC:ディレクトリに Program Files (x86) というディレクトリがあればMinGW-W64 GCC-8.1.0のx86_64-win32-sjljを,そうでなければi686の方です.ただし,このファイルは.7zという形式で圧縮してあるので,それが扱えるソフトが必要です.
7-Zipなどのサイトからダウンロード可能ですので,それを使用して展開したら,その展開されたフォルダをそのままProgram Files (x86)などのシステム系のフォルダに移動させましょう.そして,binディレクトリへのPATHを通せばコンパイルできるはずです.
- 前回の復習
画面に文字列を表示させる printf() について,文字幅や右揃え,小数部の桁数指定などさまざまな表示について実習しました. printf() はこれからも使い続けますので,だんだん慣れてくると思います.細かい指定の部分など忘れないようにしてください.
表示させたい値が,整数なのか,実数なのか,文字なのか,幅はどれだけで表示するのか,などを意識しておいてください.
- 乱数
サイコロを使ってランダムに数を作りたい時など,「乱数」というものが役に立ちます.以下は,サイコロをシミュレートするプログラムです.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand((unsigned) time(NULL));
int dice = rand() % 6 + 1;
printf("%d\n", dice);
return(0);
}
|
- ヘッダファイル
標準のヘッダファイルに加えて,以下の2つをインクルードする必要があります
ので,必ず記入しておいてください.
#include <stdlib.h>
#include <time.h>
|
- 乱数配列の初期化
乱数は一度作られるとその順番が決まってしまいます.そこで,実行する度にその順番をシャッフルしないといけません.そのための命令を最初に書いておきます.これは一つのプログラムの中に1回あればそれで構いません.
srand((unsigned) time(NULL));
|
unsigned とは符号無しの数(正の数)で,コンピュータ内の時計を利用して毎回違う数字を発生させるために,時間の関数である time() を使っています.
- 乱数を発生させる関数
乱数は以下の関数で発生させられます.
「関数」というのは,C言語では名前に括弧 () をつけて表現されるもので,それを命令で呼び出すと「値」を返してくれるものです.括弧の中はこの rand() のように空欄のままのものや printf() のように括弧の中に式や文字がある場合とがあります. rand() は呼び出される度に発生させた乱数の値が返されます.
ただし,rand() だけだと発生する乱数は扱える最大の桁の整数になってしまいます.次の例で試してみましょう.
そこで以下に示すように剰余を使用して範囲を限定します.
- 乱数の範囲
例えば,サイコロの目ですと全部で6種類なので6で割った余りを活用します.注意するのは6で割った余りは0から5までなので,サイコロにするには1を加えて1から6にする必要があることです.そこで,例のようになるわけです.
- 画面への乱数の出力
単に乱数を画面に表示するだけなら, printf の中で発生させることで可能です.
しかし,発生させた乱数をなんらかの処理で利用する場合には一度変数に入れる必要がありますので,注意してください.
int num = rand();
printf("Obtained random number: %d\n", num);
|
- 実習
実習の演習問題は予習用の部分はすでに見えますのでしっかり予習してください.
- 次回の予習範囲
引き続き,教科書のp.45-p.52まで予習をしてきてください.
- 宿題
宿題についても当日ご案内します.ただし,宿題の問題を見ることができるのは原則として月曜日の夕方18:00以降になりますので,注意してください.