• 検索結果がありません。

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

N/A
N/A
Protected

Academic year: 2021

シェア "Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk"

Copied!
6
0
0

読み込み中.... (全文を見る)

全文

(1)

Week 1 理解度確認クイズ 解答・解説

【問題1】(4×2 点=8 点)

以下の各問いに答えよ。

【問題1-1】32bit 版の Windows8.1 に Java をインストールする時、必要なパッケージはどれか。但し、 Java のコンパイルができる環境をインストールするものとする。 1. jdk-8u65-windows-i586.exe 2. jre-8u65-windows-i586.exe 3. jdk-8u65-linux-i586.rpm 4. jdk-8u65-windows-x64.exe 5. jre-8u65-windows-x64.exe 正解:1

Java をコンパイルできる環境が必要なことから、JRE ではなく JDK が必要。Windows の 32bit 版であ るので、windows-i586 を選択する。 【問題1-2】“javac Hello.java”というコマンドは、何を実行しているのか。 1. Hello.java が実行できるように、java をインストールしている 2. Hello.java が実行できるように、環境変数の設定をしている 3. Hello.java という名前のファイルを編集しようとしている 4. Hello.java という名前のプログラムをコンパイルしている 5. Hello.java というファイルに含まれる Hello クラスを実行する 正解:4 javac は、プログラムをコンパイルするためのコマンド。実行するのは java。

(2)

【問題1-3】以下に示す while 文と同じ動きをするプログラムを for 文を用いて作成した。【空欄 ア】の 中身として適切なものを選べ。 --- while 文によるプログラム --- int i=10; while(i>=1){ 何かのプログラム i = i - 1; } --- --- for 文によるプログラム --- int i; for( 【空欄 ア】 ){ 何かのプログラム } --- 1. i=10;i==0;i-- 2. i==10;i>0;i-- 3. i=10;i>0;i-- 4. i=9;i>=0;i-- 5. i=0;i<10;i++ 正解:3

while 文では i が 10 から 1 ずつ減りながら、1 まで繰り返されているため、for 文でも同じように、i=10 を初期値とし、1 ずつ減らしながら、i>0 まで(i=1 まで)繰り返すように指定すればよい。

【問題1-4】以下のプログラムを実行すると、何が出力されるか。 ---

class CalcSum{

public static void main(String []args){ int i=0, sum=0;

while (i<10){ sum = sum + i; } System.out.printf("合計:%d¥n", sum); } } ---

(3)

1. 「合計:1」と出力する 2. 「合計:10」と出力する 3. 「合計:45」と出力する 4. 「合計:55」と出力する 5. 何も出力せず、プログラムが終わらない 正解:5 0 から 9 までの合計を計算させようとしているようだが、while 文の中で i の値が変更されていないため、 いつまでたってもi=0 のままである。そのため、while 文が終了せず、無限ループとなってしまう。正常 に計算させる場合は、while 文のループの中で、i=i+1; とする必要がある。 【問題2】(6×2 点=12 点) 以下のプログラムは、3 店舗ある店舗別の売上伝票を集計し、売上全体に対する各店舗の割合を計算する プログラムである。売上伝票は、ひとつの店舗に対して複数枚あるため、プログラム内部で同じ店舗に 対する売上金額の合計を計算している。データの入力は、店舗番号(1~3)と売上金額を整数で入力し ていき、すべての伝票(枚数は固定ではない)の入力が終わったら、店舗番号として 0 を入力すること になっている。 入力系列と、その時の出力の例は、以下のとおりである。 --- 店舗番号と売上金額は? 1 200 店舗番号と売上金額は? 2 500 店舗番号と売上金額は? 3 100 店舗番号と売上金額は? 1 200 店舗番号と売上金額は? 3 1000 店舗番号と売上金額は? 0 店舗番号1:シェア 20.00% 店舗番号2:シェア 25.00% 店舗番号3:シェア 55.00% ---

(4)

このプログラムが正しく動くように、各空欄に最も適切なコードを選択せよ。 ---

import java.util.Scanner; class CalcShare{

public static void main(String []args){ 【空欄 イ】

int i, j, total=0;

Scanner scan=new Scanner(System.in); 【空欄 ウ】{ System.out.println("店舗番号と売上金額は?"); i=scan.nextInt(); if (i==0){ 【空欄 エ】 } 【空欄 オ】 sum[i] = sum[i] + j; total = total + j; } for(【空欄 カ】){ 【空欄 キ】 System.out.printf("店舗番号 %d : シェア %.2f%%¥n", i, s); } } } --- 【問題2-1】【空欄 イ】 1. int sum; 2. int sum[];

3. int sum[] = new int[]; 4. int sum[] = {0,0,0}; 5. int sum[] = {0,0,0,0};

(5)

正解:5

整数型の配列sum を準備し、すべて 0 で初期化しておく。店舗は 3 店舗だが、店舗番号(1~3)をその まま配列の添字として使用するため、um[3]まで使えるように、要素数は 4 個(sum[0]~sum[3])必要 となる。なお、こうした実装は(sum[0]が使われないので)無駄があるため、配列 sum は要素数 3 個(sum[0] ~sum[2])で宣言しておき、値の入力や出力の時に、sum[i]ではなく、sum[i-1]とするのが正しい実装 である。但し、こうした実装をすると添字の値が 1 つずれるため、プログラムを書く方が混乱してしま い、バグを作り出してしまう場合が多い。そのため、慣れないうちは、多少の無駄があっても直感的に わかりやすい形でプログラムを書く方がよい。 【問題2-2】【空欄 ウ】 1. while() 2. while(true) 3. while(false) 4. while(1) 5. while(100000) 正解:2 売上伝票が何枚あるかわからないため、店舗番号として 0 が入力されるまで無限にループさせる必要が ある。そのため、常に真(=true)を条件として指定すればよい。 【問題2-3】【空欄 エ】 1. break; 2. continue; 3. jump; 4. next; 5. skip; 正解:1

while 文等のループを抜け出すためには break 文を使う。なお、continue 文を使うと、ループの最後ま での実行をスキップし、次のループへと実行を移す。

(6)

【問題2-4】【空欄 オ】 1. j=scan(); 2. j=scan.scan(); 3. j=scan.next(); 4. j=scan.nextInt(); 5. j=scan.nextDouble(); 正解:4 売上金額を整数型の変数 j に代入するので、整数を読みとる nextInt()を使用する。 【問題2-5】【空欄 カ】 1. i=1;i<3;i++ 2. i=0;i<4;i++ 3. i=0;i<sum.length;i++ 4. i=1;i<sum.length;i++ 5. i=sum.length;i<0;i-- 正解:4

店舗番号1~3 をループさせればよいので、i=1~i=3 までのループを作る。sum.length は配列 sum の要 素数(4 個)であるから、それ未満、という条件で i=3 までとなる。なお、今回は店舗数が 3 と決まって いたため、for(i=1;i<4;i++) としても同じであるが、今後店舗数が変更になった時、わざわざ値を変更し なくてすむよう、4 という固定の数字ではなく、sum.length を使っておく方がよい。 【問題2-6】【空欄 キ】 1. double s=sum/total*100; 2. double s=sum[i]/total*100; 3. double s=sum[i]/total*100.0; 4. double s=(double)sum[i]/total*100; 5. double s=sum/(double)total*100; 正解:4 売上の割合(パーセント表示)を計算するためには、売上金額sum[i]を合計金額 total で割り、100 を掛 ければよいが、そのまま計算してしまうと、すべて整数型のために整数の精度での演算が行われ、正し い答えが計算できない。精度を実数型にするために、sum[i]の前に(double)をつけて実数型に変換してか ら計算を行う必要がある。なお、選択肢の3 番では、100 のかわりに 100.0(これは実数である)を掛け ているが、これでは正しい答えは得られない。それは、先に sum[i]/total が計算され、その後で 100.0 が掛けられることになるが、sum[i]/total は整数の精度で計算されてしまい、この段階で答えが間違って しまうからである。

参照

関連したドキュメント

地盤の破壊の進行性を無視することによる解析結果の誤差は、すべり面の総回転角度が大きいほ

解約することができるものとします。 6

基本的金融サービスへのアクセスに問題が生じている状態を、英語では financial exclusion 、その解消を financial

その職員の賃金改善に必要な費用を含む当該職員を配置するために必要な額(1か所

上であることの確認書 1式 必須 ○ 中小企業等の所有が二分の一以上であることを確認 する様式です。. 所有等割合計算書

越欠損金額を合併法人の所得の金額の計算上︑損金の額に算入

2 次元 FEM 解析モデルを添図 2-1 に示す。なお,2 次元 FEM 解析モデルには,地震 観測時点の建屋の質量状態を反映させる。.

LUNA 上に図、表、数式などを含んだ問題と回答を LUNA の画面上に同一で表示する機能の必要性 などについての意見があった。そのため、 LUNA