エンジニア成長日記 swaponQ

コンピュータサイエンス専攻の一般人のブログです。

新・明解 Java 入門 演習 6-16, 6-17, 6-18, 6-19 解答

Hello, Terminal!swaponQです!

今回は演習 6-16, 6-17, 6-18, 6-19 に取り組んでいこうと思います。

  • 演習 6-16

4行3列の行列なと3行4列の行列の積を求めるプログラムを作成せよ。各要素の値はキーボードから読み込むこと。

ソースコード

import java.util.Scanner;

class ex06_16 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int[][] array1 = new int[4][3];
		int[][] array2 = new int[3][4];
		int[][] ans = new int[4][4];
    //標準入力よりarray1を作成
		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 3; j++) {
				System.out.printf("array1[%d][%d]:", i, j);
				array1[i][j] = stdIn.nextInt();
			}
		}
    //標準入力よりarray2を作成
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 4; j++) {
				System.out.printf("array2[%d][%d]:", i, j);
				array2[i][j] = stdIn.nextInt();
			}
		}
    //ansの計算
		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				for (int k = 0; k < 3; k++) {
					ans[i][j] += array1[i][k] * array2[k][j];
				}
			}
		}
    //ansの出力
    System.out.println("--------------");
    System.out.println("ans = ");
		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				System.out.printf("%3d", ans[i][j]);
			}
			System.out.println();
		}
	}
}

・実行結果

array1[0][0]:1
array1[0][1]:2
array1[0][2]:3
array1[1][0]:1
array1[1][1]:2
array1[1][2]:3
array1[2][0]:1
array1[2][1]:2
array1[2][2]:3
array1[3][0]:1
array1[3][1]:2
array1[3][2]:3
array2[0][0]:1
array2[0][1]:2
array2[0][2]:3
array2[0][3]:4
array2[1][0]:1
array2[1][1]:2
array2[1][2]:3
array2[1][3]:4
array2[2][0]:1
array2[2][1]:2
array2[2][2]:3
array2[2][3]:4
--------------
ans = 
  6 12 18 24
  6 12 18 24
  6 12 18 24
  6 12 18 24
  • 演習 6-17

6人の2科目(国語・数学)の点数を読み込んで、科目ごとの平均点、学生ごとの平均点を求めるプログラムを作成せよ。

ソースコード

class ex06_17 {
	public static void main(String[] args) {
                int n = 6;
		int[][] score = {
      {84,79},{67,97},{67,92},{85,83},{87,80},{91,88}
    };
		for (int i = 0; i < 6; i++) {
      System.out.printf("学生%d:",i + 1);
			for (int j = 0; j < 2; j++) {
				System.out.printf(" %3d", score[i][j]);
			}
			System.out.println();
		}
		System.out.println("\n科目ごとの平均点");
		double japanese = 0;
		double math = 0;
		for (int i = 0; i < 6; i++) {
			japanese += score[i][0];
			math += score[i][1];
		}
		System.out.printf("国語: %.1f  数学: %.1f\n", (japanese / n), (math / n));
		System.out.println();
		System.out.println("学生ごとの平均点");
		for (int i = 0; i < 6; i++) {
			System.out.printf("学生%d: %.1f\n", (i + 1), (double) (score[i][0] + score[i][1]) / 2);
		}
	}
}

・実行結果

学生1:  84  79
学生2:  67  97
学生3:  67  92
学生4:  85  83
学生5:  87  80
学生6:  91  88

科目ごとの平均点
国語: 80.2  数学: 86.5

学生ごとの平均点
学生1: 81.5
学生2: 82.0
学生3: 79.5
学生4: 84.0
学生5: 83.5
学生6: 89.5
  • 演習 6-18

行数・各行の列数・各要素の値をキーボードから読み込むようにlist6-18を書き換えたプログラムを作成せよ。

ソースコード

import java.util.Scanner;

class ex06_18 {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int[][] c;
		System.out.print("行数:");
		int n = stdIn.nextInt();
		c = new int[n][];
		System.out.println("列数:");
		for (int i = 0; i < c.length; i++) {
			System.out.printf("c[%d] =", i);
			int t = stdIn.nextInt();
			c[i] = new int[t];
		}
		System.out.println("要素:");
		for (int i = 0; i < c.length; i++) {
			for (int j = 0; j < c[i].length; j++) {
				System.out.printf("c[%d][%d] =", i, j);
				c[i][j] = stdIn.nextInt();
			}
			System.out.println();
		}
		for (int i = 0; i < c.length; i++) {
			for (int j = 0; j < c[i].length; j++) {
				System.out.printf("%3d ", c[i][j]);
			}
			System.out.println();
		}
	}
}

・実行結果

行数:3
列数:
c[0] =4
c[1] =3
c[2] =5
要素:
c[0][0] =0
c[0][1] =0
c[0][2] =0
c[0][3] =0

c[1][0] =0
c[1][1] =0
c[1][2] =0

c[2][0] =0
c[2][1] =0
c[2][2] =0
c[2][3] =0
c[2][4] =0

  0   0   0   0 
  0   0   0 
  0   0   0   0   0
  • 演習 6-19

クラス数・各クラスの人数・全員の点数を読み込んで、点数の合計点と平均点を求めるプログラムを作成せよ。合計点と平均点は、クラスごとのものと、全体のものとを表示すること。

ソースコード

import java.util.Scanner;

class ex06_19 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		System.out.print("クラス数:");
		int classNum = stdIn.nextInt();
		int[][] classArray = new int[classNum][];
		int n = 0;
		for (int i = 0; i < classArray.length; i++) {
			System.out.printf("%d組の人数:", i + 1);
			int studentNum = stdIn.nextInt();
			n += studentNum;
			classArray[i] = new int[studentNum];
			for (int j = 0; j < classArray[i].length; j++) {
				System.out.printf("%d組%d番の点数:", i + 1, j + 1);
				classArray[i][j] = stdIn.nextInt();
			}
			System.out.println();
		}
		int[] sumArray = new int[classArray.length];
		double[] aveArray = new double[classArray.length];
		System.out.println("  組 |     合計  平均 ");
		System.out.println("---------------------");
		for (int i = 0; i < classArray.length; i++) {
			for (int j = 0; j < classArray[i].length; j++) {
				sumArray[i] += classArray[i][j];
				aveArray[i] = sumArray[i] / (double) classArray[i].length;
			}
			System.out.printf("%2d組 | %7d %6.1f \n", i + 1, sumArray[i], aveArray[i]);
		}
		int sum = 0;
		for (Integer i : sumArray) {
			sum += i;
		}
		double ave = (double) sum / n;
		System.out.println("---------------------");
		System.out.printf("  計 | %7d %6.1f \n", sum, ave);
	}
}

・実行結果

クラス数:2
1組の人数:3
1組1番の点数:50
1組2番の点数:63
1組3番の点数:72

2組の人数:2
2組1番の点数:79
2組2番の点数:43

  組 |     合計  平均 
---------------------
 1組 |     185   61.7 
 2組 |     122   61.0 
---------------------
  計 |     307   61.4 

今回で「第6章:配列」は終了です。お疲れ様でした!
次回からは「第7章:メソッド」に入ります。

Goodbye, Terminal… swaponQでした!