Javaプログラミング練習問題(制御構文の応用)

Java

こんにちは。ECF Tech
ブログ担当 Michiharu.Tです。

Javaプログラミング向け練習問題、今回は制御構文をまとめて出題です。プログラミング初学者には難しい問題もあるかもしれませんが、プログラミング学習にぜひお役立てください。

一般的なJavaの学習順序に沿ったテーマの一覧(※随時追加)は、こちらのリンクよりご確認頂けます。

Javaプログラミング

Javaのトピックスです。主に初心者向けにプログラミング学習ネタを提供していきます。

問題編

Q001

問題

  • キーボードで入力された値の階乗を求めるプログラムを記述してください。

※最大で10の階乗が求められれば良いこととします。

提供コード

//キーボード入力を使うための準備
import java.util.Scanner;

public class Quiz001 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        //キーボードからの入力を受けとり、nに入れる
        int n = (new Scanner(System.in)).nextInt();
        //ここからプログラムを記述します。
    }
}

実行結果

5を入力した場合

数値を入力してください:5
5! = 120

4を入力した場合

数値を入力してください:4
5! = 24

Q002

問題

  • 変数a,bを用い、aのb乗を求めて実行結果のように表示してください。

提供コード

public class Quiz002 {
    public static void main(String[] args) {
        //ここにプログラムを書きます。
    }
}

実行結果

a = 3, b = 4の場合

3の4乗は81です

a = 2, b = 8の場合

2の8乗は256です

Q003

問題

次の仕様に基づいて、プログラムを作成してください。
(仕様)

  • キーボードから数値を1つ受け取ります(nとします)。
  • 四角をn個、横並びに表示します。
  • 四角の並びは全部で8段表示し、奇数段は□、偶数段は■を表示します。
    ※nの最大値は10個の想定で構いません。

提供コード

//キーボード入力を使うための準備
import java.util.Scanner;

public class Quiz003 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        //キーボードより数値を受け取ります。
        int n = (new Scanner(System.in)).nextInt();
        for (int i = 0; i < 8; i++) {
            //ここにプログラムを書きます。
        }
    }
}

実行結果

ケース1

数値を入力してください:5
□□□□□
■■■■■
□□□□□
■■■■■
□□□□□
■■■■■
□□□□□
■■■■■

ケース2

数値を入力してください:8
□□□□□□□□
■■■■■■■■
□□□□□□□□
■■■■■■■■
□□□□□□□□
■■■■■■■■
□□□□□□□□
■■■■■■■■

Q004

問題

次の仕様に基づいて、プログラムを作成してください。
(仕様)

  • キーボードから数値を1つ受け取ります(nとします)。
  • 四角をn個、横並びに表示します。
  • 四角の並びは全部で8段表示します。
  • 実行結果のように、■と□を格子状に配置してください。
    ※nの最大値は10個の想定で構いません。

提供コード

//キーボード入力を使うための準備
import java.util.Scanner;

public class Quiz004 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        //キーボードより数値を受け取ります。
        int n = (new Scanner(System.in)).nextInt();
        for (int i = 0; i < 8; i++) {
            //ここにプログラムを書きます。
        }
    }
}

実行結果

ケース1

数値を入力してください:5
□■□■□
■□■□■
□■□■□
■□■□■
□■□■□
■□■□■
□■□■□
■□■□■

ケース2

数値を入力してください:8
数値を入力してください:8
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□

解答編

それでは解答編です。解答はあくまで一例となります。様々な作り方がありますので、実行結果と一致していれば特に問題ありません。

Quiz001

import java.util.Scanner;

public class Quiz001 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        int n = (new Scanner(System.in)).nextInt();
        int sum = 1;
        for (int i = 1; i <= n; i++) {
            sum *= i;
        }
        System.out.println(n + "! = " + sum);
    }
}

解説

  • 入力された値をfor文の終了条件に用います。
  • sumにかけ算の合計値を累積していきます。

Quiz002

import java.util.Scanner;

public class Quiz002 {
    public static void main(String[] args) {
        int a = 2;
        int b = 8;
        int sum = 1;
        for (int i = 0; i < b; i++) {
            sum *= a;
        }
        System.out.println(a + "の" + b + "乗は" + sum + "です");
    }
}

解説

  • bの値をfor文の終了条件に用います。
  • sumにかけ算の合計値を累積していきます。

Quiz003

import java.util.Scanner;

public class Quiz003 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        int n = (new Scanner(System.in)).nextInt();
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < n; j++) {
                if (i % 2 == 0) {
                    System.out.print("□");
                } else {
                    System.out.print("■");
                }
            }
            System.out.println();
        }
    }
}

解説

  • 段ごとの四角を出す回数は、入力値に依存するためfor文でその数だけ表示します。そのため二重ループとなります。
  • 外側のforループが段を表していますので、iの値の偶奇を判断し四角の種類を変えます。

Quiz004

import java.util.Scanner;

public class Quiz004 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        int n = (new Scanner(System.in)).nextInt();
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < n; j++) {
                int wk = i % 2;
                if ((j + wk) % 2 == 0) {
                    System.out.print("□");
                } else {
                    System.out.print("■");
                }
            }
            System.out.println();
        }
    }
}

解説

  • Quiz003の応用型ですので、基本的な構成はかわりません。
  • 変数wkは、奇数段目の時に1、偶数段目の時に0になります。四角の表示を分ける条件式(j + wk) % 2により、奇数段の時は□で始まり、偶数段の時は■で始まります。

おわりに

いかがでしたでしょうか。ポイントになる解説を記載しておりますが、二重ループやネストを伴うプログラムは丁寧にプログラムの流れを追いかける地道な理解も求められます。たくさんのプログラムを書いてぜひ、モノにしてみてください。ひきつづき単元ごとに問題を徐々に増やしていきたいと思っていますので、よろしければぜひご活用ください。


合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。

https://edu.e3factory.com/
タイトルとURLをコピーしました