Javaプログラミング基礎 演習問題

解答は

に提出しなさい。ソースファイル (〜.java) のみを提出してください。 提出は gFTP 等の ftp ソフトを用いて行うこと。

繰り返し (for 文)

いずれの問題も for 文を使った繰り返しのプログラムとして書きなさい。

問題1

int 型変数 n を用意し適当な値を代入しておく。 その整数の階乗 n! を求めるプログラムを書きなさい。 プログラム名は Factorial とする。

n! = 1 × 2 × 3 × … × n

である。例題の 1 つめのプログラムと同じ考え方で書けるはずである。

n ≧ 13 になると正しい値が求まらなくなるが、 これは int 型整数の扱える範囲を越えるためである。 今回はこれで仕方ないとする。

問題2

1 ≦ n ≦ 10 の整数 n について、 n , 2n, 3n を一覧表の形で出力するプログラムを書きなさい。 プログラム名は Power2n3n とする。

出力の最初の数行は次のようになるように作ること。

1: 2^1=2  3^1=3
2: 2^2=4  3^2=9
3: 2^3=8  3^3=27
4: 2^4=16  3^4=81
...

なお、BASIC や Excel では 「 n の m 乗」を計算するために「n ^ m」というような書き方ができるが、 Java では、演算子 ^ はこのような意味では使用できない。 べき乗の計算は、掛け算として (n の m 乗であれば、 n × n の掛け算を m 回行う) 記述すること。

問題3

等差数列の項と和を求めるプログラムを書きなさい。

初項 c 、項差 d の等差数列を考えると、 i番目の項 ai と、その項までの和 si は以下のような漸化式で求めることができる。

ai = ai-1 + d
si = si-1 + ai

初項 c と公差 d をあらかじめプログラム中に定義しておき、 先頭から第 10 項までの aisi を出力するようなプログラムにすること。 たとえば、初項が 10 、公差が 5 だった場合、出力の最初の数行は次のようになれば良い。

ArithmeticalProgression (c=10, d=5)

1: a=10 s=10
2: a=15 s=25
3: a=20 s=45
4: a=25 s=70
5: a=30 s=100
...

プログラム名は ArithmeticalProgression とする。

問題4

下のような九九の表を出力するプログラムを書きなさい。 プログラム名は Kuku とする。

1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81

問題5

サイコロを3つふり、少なくとも2つのサイコロの目が一致する確率を求めなさい。 繰り返しによってすべての場合の目の並びを求め、 問題文の条件を満たす目の並びの数を数えることにより求める。 なお、現時点では小数点以下を含むような数 (実数) の計算方法は学んでいないので、 確率は分数 (「m / n」という形式) で表示すればよい。約分の必要はない。 プログラム名は Sai とする。

サイコロ 1 個をふって出る目は 1 から 6 の 6 通りである。 これを 1 つの for 文で表わす。 すべての目の並びは 3 重の for 文で生成することができる。

プログラムの概略は次のとおり。

for (サイコロ 1 をふって出る目を登場させる繰り返し) {
    for (サイコロ 2 をふって出る目を登場させる繰り返し) {
        for (サイコロ 3 をふって出る目を登場させる繰り返し) {
            (この繰り返しの中では 3 つのサイコロのすべての目の出方が登場することになる) 
            if (サイコロの2つの目が一致する場合) {
                「一致した回数」を 1 増やす
            }
            「目の数」を 1 増やす
        }
    }
}

「一致した数」と「目の数」を表示

なお、数学の問題として解くなら以下のようになる。

すべての目の並び - 目がすべて異なる場合の並び
1 - 1x(5/6)x(4/6) = 1 - 20/36 = 1 - 120/216 = 96/216 (= 0.44)