Report#4{〜12/25(Mon)}
オフライン試験のQ23〜Q38のついて考察せよ。
目次
- 課題
- 問23〜問33
- 問34
- 問35〜36
- 問37
- 問38
課題
オフライン試験のQ23〜Q38のついて考察せよ。
コードと実行結果を示し、各問について考察すること。
問23〜33
01; class report6_23_33 {
02; public static void main(String arg[]) {
03;
04; //問23------------------------------------------
05; System.out.println("---Q23---");
06;
07; int x1,y;
08; x1 = 100; x1 += 1; x1--; y = 200 + x1;
09; System.out.println(y++);
10;
11; //問24------------------------------------------
12; System.out.println("---Q24---");
13;
14; int a1 = 0, x2 = 0;
15; a1 = 5; a1 += 3; x2 = ++a1;
16; System.out.println(x2);
17;
18;
19; //問25------------------------------------------
20; System.out.println("---Q25---");
21;
22; int a2 = 9, b1 = 3;
23; a2 /= b1;
24; System.out.println(a2 %= b1);
25;
26;
27; //問26------------------------------------------
28; System.out.println("---Q26---");
29;
30; int i1, j1;
31; for(i1=0, j1=0; i1<3; i1++) ++j1;
32; System.out.println(i1 * j1);
33;
34;
35; //問27------------------------------------------
36; System.out.println("---Q27---");
37;
38; int i2 = 2;
39; while(i2-- > 0) System.out.print(i2);
40;
41;
42; //問28------------------------------------------
43; System.out.println("¥n---Q28---");
44;
45; int num1 = 10000;
46; for(int i3 = 0; i3 < 4; i3++) num1 >>= i3;
47; System.out.println(num1);
48;
49;
50; //問29------------------------------------------
51; System.out.println("---Q29---");
52;
53; int num2 = 0;
54; for(int i4 =1; i4 <= 10; i4++){
55; if(++num2 % i4 == 0) num2++;
56; }
57; System.out.println(++num2);
58;
60;
61; //問30------------------------------------------
62; System.out.println("---Q30---");
63;
64; int a3 = 9;
65; if(a3++ != 10 | a3++ == 10) a3++;
66; System.out.println(a3);
67;
68;
69; //問31------------------------------------------
70; System.out.println("---Q31---");
71;
72; for(int i5 = 0; i5 < 5; i5++)
73; System.out.println("i == " + i5);
74; System.out.println("Hello");
75;
76;
77; //問32------------------------------------------
78; System.out.println("---Q32---");
79;
80; int i6;
81; for(i6 = 0; i6 < 9; i6 += 3) {}
82; System.out.println(i6);
83;
84;
85; //問33------------------------------------------
86; System.out.println("---Q33---");
87;
88; for(int i7 = 0; i7 < 8; i7++) {
89; System.out.println(i7);
90; i7 += 3;
91; }
92; }
93; }
実行結果
---Q23---
300
---Q24---
9
---Q25---
0
---Q26---
9
---Q27---
10
---Q28---
156
---Q29---
12
---Q30---
12
---Q31---
i == 0
i == 1
i == 2
i == 3
i == 4
Hello
---Q32---
9
---Q33---
0
4
問22〜33の考察
問23
- L8でx1に100を代入、そして「x1 + 1 - 1」を行っている。
その後、yに「200 + x1」を代入しているので、「x1 == 100 + 1 - 1」より
yの値は300。
出力される値は「y++」、よって「300」が出力される。
(出力後の y の値は「301」)
問24
- L16でa1に5を代入、そして「a1 + 3」をしているので「a1 == 8」。
x2に代入する値は「++a1」なので、a1に+1する値になる。
よって、出力される値は「 9 」。
問25
- L24でa2に「a2 / b1」の値、つまり3を代入している。
「a2 %= b1」の値を出力するのだから(%は剰余)出力される値は「 0 」。
問26
- L32で初期値を「i1=0,j1=0」として、条件を「i1<3」としている。
i1=0なので条件より、++j1。そしてi++ (i1 = 0 , j1 = 1)
i1=1なので条件より、++j1。そしてi++ (i1 = 1 , j1 = 2)
i1=2なので条件より、++j1。そしてi++ (i1 = 2 , j1 = 3)
i1=3なので条件より、for文を抜ける。
「i1 * j1」の値は「3 * 3」で「 9 」。よって、出力される値は「 9 」。
問27
- L40より、ループ条件は「i2-- > 0」。
i2=2なので条件より(i2-1)、「 1 」が出力される。
i2=1なので条件より(i2-1)、「 0 」が出力される。
i2=0なので条件より、while文を抜ける。
改行を出力していないので、「 10 」が出力される。
問28
- L47で初期値をint型の「i3 = 0」、条件を「i3 < 4」としている。
i3=0なので条件より、num1 >>= i3(「num1 >> i3」を行ったものをnum1に代入)
そして、i3++ (num1 = 10000 , i3 = 0)
i3=1なので条件より、num1 >>= i3、そしてi3++ (num1 = 5000 , i3 = 1)
i3=2なので条件より、num1 >>= i3、そしてi3++ (num1 = 1250 , i3 = 2)
i3=3なので条件より、num1 >>= i3、そしてi3++ (num1 = 156 , i3 = 3)
i3=4なので条件より、for文を抜ける。
よって、出力される値は「 156 」。
問29
- L55で初期値をint型の「i4 = 1」、条件を「i4 <= 10」としている。
L56のif文の条件(++num2 % i4 == 0)を満たせば、「num2++」の処理が行われる。
i4=1,++num2(num2=1)なので条件より、num2++、そしてi4++ (i4 = 1,num2 = 2)
i4=2,++num2(num2=3)なので条件より、i4++ (i4 = 2,num2 = 3)
i4=3,++num2(num2=4)なので条件より、i4++ (i4 = 3,num2 = 4)
i4=10,++num2(num2=11)なので条件より、i4++ (i4 = 10,num2 = 11)
i4=11なので条件より、for文を抜ける。(i4 = 11,num2 = 11)
よって、出力される値は「++num2」なので「 12 」。
問30
- L65でif文の条件を「a3++ != 10 | a3++ == 10」としている。
if文の条件文ORの左「a3++ != 10」はa3++ = 9なので真。(a3 = 10)
if文の条件文ORの右「a3++ == 10」はa3++ = 10なので真。(a3 = 11)
上記より、条件を満たしているのでa3++の処理が行われる。(a3 = 12)
よって、出力される値は「 12 」。
問31
- L72で初期値をint型の「i5 = 0」、条件を「i5 < 5」としている。
i5=0なので条件より、「i == 0」が出力される。そしてi5++(i5=0)
i5=1なので条件より、「i == 1」が出力される。そしてi5++(i5=1)
i5=2なので条件より、「i == 2」が出力される。そしてi5++(i5=2)
i5=3なので条件より、「i == 3」が出力される。そしてi5++(i5=3)
i5=4なので条件より、「i == 4」が出力される。そしてi5++(i5=4)
i5=5なので条件より、for文を抜ける。L74より「Hello」が出力される。
よって、Helloは1回出力される。
問32
- L82で初期値を「i6 = 0」、条件を「i6 < 9」としている。
i6=0なので条件より、i6 += 3 (i6 = 3)
i6=3なので条件より、i6 += 3 (i6 = 6)
i6=6なので条件より、i6 += 3 (i6 = 9)
i6=9なので条件より、for文を抜ける。
よって、出力される値は「 9 」。
問33
- L88で初期値をint型の「i7 = 0」、条件を「i7 < 8」としている。
i7=0なので条件より、i7の値「 0 」と改行コードを出力。
そしてi7 += 3とi7++の処理を行う。(i7 = 3)
i7=4なので条件より、i7の値「 4 」と改行コードを出力。
そしてi7 += 3とi7++の処理を行う。(i7 = 7)
i7=8なので条件より、for文を抜ける。
よって、「 0 」、「 4 」の順番で2行に渡って出力される。
問34
ソース
01; class report6_34 {
02; public static void main(String args[]) {
03; int i = 0;
04; for(sayHello(); i <= 6; i += 3) {
05; sayHello();
06; }
07; }
08; static void sayHello() {
09; System.out.println("Hello");
10; }
11; }
実行結果
Hello
Hello
Hello
Hello
問34の考察
-
L4でsayHello();を呼び出す(「Hello」を出力)、条件を「i <= 6」としている。
i=0なので条件より、sayHello();を呼び出す(「Hello」を出力,2回目)
そしてi += 3。 (i = 3)
i=3なので条件より、sayHello();を呼び出す(「Hello」を出力,3回目)
そしてi += 3。 (i = 6)
i=6なので条件より、sayHello();を呼び出す(「Hello」を出力,4回目)
そしてi += 3。 (i = 9)
i=9なので条件より、for文を抜ける。
よって、出力には改行コードも含まれているので、Helloが1行に1回、4行に渡って出力される。
(「Hello」は4回出力される)
問35〜36
ソース
01; class report6_35_36{
02; public static void main(String args[]) {
03; Player p1 = new Player();
04; Player p2 = new Player();
05; p1.id = 1000;
06; p2.id = 2000;
07; //問35-------------------------------------------
08; System.out.println("------Q35------");
09;
10; p1.num += p1.id;
11; p1.num += p2.id;
12; System.out.println(Player.num);
13;
14;
15; //問36-------------------------------------------
16; System.out.println("------Q36------");
17;
18; Player.num2 += p1.id;
19; Player.num2 += p2.id;
20; System.out.println("p1.num == " + p1.num2);
21; System.out.println("p2.num == " + p2.num2);
22;
23; }
24; }
25; class Player {
26; int id = 0;
27; static int num = 0, num2 =0;
28; }
実行結果
------Q35------
3000
------Q36------
p1.num == 3000
p2.num == 3000
問35〜36の考察
問37
ソース
01; class report6_37 {
02; public static void main(String args[]) {
03; Card c1 = new Card();
04; Card c2 = new Card();
05; Card c3 = c1;
06; c1.deposit = 1000;
07; c2.deposit = 2000;
08; c3.deposit = 3000;
09; int sum = c1.deposit + c2.deposit + c3.deposit;
10; System.out.println(sum);
11; }
12; }
13; class Card {
14; int deposit;
15; }
実行結果
8000
問37の考察
問38
ソース
01; class Test4 {
02; public static void main(String args[]) {
03; Card c1 = new Card();
04; Card c2 = c1;
05; c1.deposit = 1000;
06; c2.deposit = 2000;
07; Bank.useCard(c1);
08; Bank.useCard(c2);
09; /* A */
10; //追加---------------------
11;
12; System.out.println("c1.deposit == " + c1.deposit);
13; System.out.println("c2.deposit == " + c2.deposit);
14;
15; //-------------------------
16; }
17; }
18; class Card { int deposit; }
19; class Bank {
20; public static void useCard( Card c ) {
21; c.deposit -= 500;
22; }
23; }
実行結果
c1.deposit == 1000
c2.deposit == 1000
問38の考察
L6でc2.depositに2000を代入している。ここで、「c1」と「c2」は同一の
オブジェクトなので、「c1.deposit」の値も2000となる。
L7,L8で行っている処理「c.deposit -= 500」もc1.deposit,c2.depositの両方に
行われているので、/*A*/の時点で「 c1.deposit = c2.deposit 」である。
(確認:実行結果よりc「1.deposit = c2.deposit」だと分かる)
感想
- オンラインのテストに気を取られていて筆記テストの対策を全然していなかったのでボロボロでした。このレポートを通して復習してみると基本的なところをミスっていたりしたので、次は気をつけようと思いました。
参考文献
topへ戻る