Top >C言語、Java 練習プログラム集

はじめに

 練習問題のように断片的なプログラムではなく、まとまりのあるプログラムを作ることによって、

       設計コーディング、デバッグテスト、修正

 という基本的な工程を体験します

 

 よくある例題として、簡単なアドレス帳を作るというようなものがありますが、実際に使用することの無いそのようなプログラムは、あまり面白いものではありません

 この練習プログラム集では、学習者に少しでもプログラミングの面白さを感じてもらえるよう、ゲームを題材としました

  また、パーソナル・コンピューターの黎明期に流通していたテキスト・ベースのゲームの世界を、これからプログラミングを始める人たちに知ってもらいたいということも理由のひとつです

■ この練習プログラムは...

  • プログラムのレベル
    基本的にはC言語練習問題集Java練習問題集の範囲で作成できますが、一部では練習問題集で触れていない書式も使用します
  • 入出力について
    C言語の場合、出力は printf、入力には scanf 関数を使用すれば作成できます
    Javaの場合、出力は System.out.print、入力には BufferedReader を使用すれば作成できます
  • 仕様の厳密さ
    出題の文章だけでは仕様に曖昧さがありますが、ゲームとして成立するよう、補ってください

 

擬似乱数の使用

 この練習プログラムの作成には、乱数を使用します

■ 乱数

  サイコロを振って選んだ数のように、出現に規則性のない数を乱数と言いますコンピューターでは、実用上、ほぼ規則性のない擬似乱数を使用します

 

C言語での擬似乱数

■ 擬似乱数を発生する関数

 標準ライブラリに擬似乱数を発生する関数が用意されていますサイコロを振る関数と考えてください

    int rand( void );      stdlib.h

 rand 関数は、0 ~ RAND_MAX ( 32767 ) の範囲の整数の擬似乱数を返します関数を呼び出すたびに違う値を返すのですが、プログラム起動からは毎回同じ値を返します

■ 擬似乱数の初期化

 プログラムを起動するたびに違う値を返すようにするためには、srand 関数を使用します

    void srand( unsigned int seed );

 seed に毎回違う値を渡すことによって、rand 関数で得られる値が変わります

 ここで問題となるのが、毎回違う値をどのように得るか、ということですこれには現在時刻を得る time 関数( time.h )を使用しますプログラムを起動する時間は毎回違うはずなので、得られる値も毎回違います

 以下の文を、プログラムの最初に1回だけ実行することで、rand 関数で毎回違う値が得られます

    srand( (unsigned int)time(0) );

 詳しくは、それぞれの関数のリファレンスを参照してください

  

 例: 1 ~ 6 の数字を 10 回表示するプログラム

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main()
{
    int i;

    srand( (unsigned int)time( 0 ) );

    for( i = 0 ; i < 10 ; i++ ){
        int n = ( rand() % 6 ) + 1;
        printf( "%d ", n );
    }
}

  

 実行結果

5 6 2 5 1 6 4 4 6 1

 

Javaでの擬似乱数

 Javaで乱数を発生させるには、Random クラスを使用します

 Randomクラスのインスタンスを作成し nextInt メソッドを呼ぶと、引数に指定した整数よりも小さい整数が得られます

 C 言語のような初期化は必要ありません

  

 Randomクラスを使用するためには、

import java.uti.*; または、import java.util.Random;

 の記述が必要になります

  

 例: 1 ~ 6 の数字を 10 回表示するプログラム

import java.io.*;
import java.util.*;

public class Dices
{
    public static void main(String[] args)
    {
        Random RandObj = new Random();

        for (int i = 0; i < 10; i++)
        {
            int n = RandObj.nextInt(6) + 1;
            System.out.print(Integer.toString(n) + " ");
        }
    }
}

  

 実行結果

1 5 6 5 1 2 1 3 6 5

 

PAPER BOWL
NEZEN