ITパスポートの過去問
令和4年度
テクノロジ系 問96
このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。
問題
令和4年度 ITパスポート試験 テクノロジ系 問96 (訂正依頼・報告はこちら)
関数calcXと関数calcYは、引数inDataを用いて計算を行い、その結果を戻り値とする。関数calcXをcalcX(1)として呼び出すと、関数calcXの変数numの値が、1 → 3 → 7 → 13 と変化し、戻り値は13となった。関数calcYをcalcY(1)として呼び出すと、関数calcYの変数numの値が、1 → 5 → 13 → 25 と変化し、戻り値は25となった。プログラム中のa, bに入れる字句の適切な組合せはどれか。
〔プログラム 1〕
〇整数型:calcX(整数型:inData)
整数型:num, i
num ← inData
for(iを1から3まで1ずつ増やす)
num ←[ a ]
endfor
return num
〔プログラム 2〕
〇整数型:calcY(整数型:inData)
整数型:num, i
num ← inData
for([ b ])
num ←[ a ]
endfor
return num
〔プログラム 1〕
〇整数型:calcX(整数型:inData)
整数型:num, i
num ← inData
for(iを1から3まで1ずつ増やす)
num ←[ a ]
endfor
return num
〔プログラム 2〕
〇整数型:calcY(整数型:inData)
整数型:num, i
num ← inData
for([ b ])
num ←[ a ]
endfor
return num
- a:2 × num + i b:iを1から7まで3ずつ増やす
- a:2 × num + i b:iを2から6まで2ずつ増やす
- a:num + 2 × i b:iを1から7まで3ずつ増やす
- a:num + 2 × i b:iを2から6まで2ずつ増やす
正解!素晴らしいです
残念...
この過去問の解説 (3件)
01
4が正解です。
aの箇所では1、2で「2 × num + i」、3、4で「num + 2 × i」の処理が行われています。
結果はそれぞれ、
「2 × num + i」
i = 1 2×1 + 1 = 3
i = 2 2×3 + 2 = 8
i = 3 2×8 + 3 = 19
「num + 2 × i」
i = 1 1 + 2×1 = 3
i = 2 3 + 2×2 = 7
i = 3 7 + 2×3 = 13
となり、aは「num + 2 × i」が正しいため、3または4のどちらかが正解ということになります。
続いて、bの処理は3が「iを1から7まで3ずつ増やす」、4が「iを2から6まで2ずつ増やす」となっています。
結果はそれぞれ、
「iを1から7まで3ずつ増やす」
i = 1 1 + 2×1 = 3
i = 4 3 + 2×4 = 11
i = 7 11 + 2×7 = 25
「iを2から6まで2ずつ増やす」
i = 2 1 + 2×2 = 5
i = 4 5 + 2×4 = 13
i = 6 13 + 2×6 = 25
となり、bは「iを2から6まで2ずつ増やす」が正しいことが分かり、正解は4となります。
参考になった数11
この解説の修正を提案する
02
まずプログラム1の各変数の推移を確認します。
i num 演算結果のnum
1 1 3
2 3 7
3 7 13
上記の演算結果が成り立つための式は、i×2+num になります。
次にプログラム2の i の変化を考えます。
i num 演算結果のnum
? 1 5
? 5 13
? 13 25
3回の処理のそれぞれを i を a として解きます。
a×2+1=5
2a=4
a=2
よって、numが1の場合の i は2になります。
a×2+5=13
2a=8
a = 4
よって、numが5の場合の i は4になります。
a×2+13=25
2a=12
a = 6
よって、numが13の場合の i は6になります。
これにより、iは2から2ずつ増加(2、4、6)ということがわかります。
そのため、4が正解です。
参考になった数5
この解説の修正を提案する
03
このようなプログラムの実行結果を問う問題では、実際に値を代入してトレースをします。
いくつか専門用語の説明をしておきます。
引数(ひきすう)・・・計算に使う値のことです。例えば足し算をするプログラムに対して漠然と「足し算をしなさい」といっても、足す値と足される値がないと実行できません。設問ではcalcXの引数として1が設定されており、引数を代入する変数がinDataです。
実際のプログラミング言語でも、関数を定義するときは()括弧の中に引数を受け取る変数とデータ型(整数や文字列など)を定義する場合がほとんどです。
戻り値・・・関数の実行結果です。ある関数によって計算された結果を、別の関数で使う場合にはこの戻り値を使います。C言語やJavaでは、設問のようなreturn文が使われます。
for文・・・繰り返し処理をするためのコードです。多くのプログラミング言語では設問のように、処理を繰り返す条件を括弧の中に書きます。条件は、(初期値;条件式;増分)のようにセミコロンで区切る場合がほとんどです。
例) メッセージを3回繰り返すC言語コード
for(i = 1;i<=3;i++){
printf(“繰り返し処理です。¥n”);
}
では、inDataの値を1として計算していきましょう。
■プログラム1について
/*2 × num + iの場合*/
numに1を代入
2 × 1+ 1 = 3
numが3になる
iを1増やして2になる
2 × 3 + 2 = 8
numが8になる
iを1増やして3
2 × 8 + 3 = 19
numが19になる
iが3なので繰り返し処理を終了
/*num + 2 × iの場合*/
numに1を代入
1 + 2 × 1 = 3
numが3になる
iを1増やして2になる
3 + 2 × 2 = 7
numが7になる
iを1増やして3になる
7 + 2 × 3 = 13
numが13になる
iが3なので繰り返し処理を終了
変数numの値が設問の通り1 → 3 → 7 → 13と変化しているのは選択肢3及び4の「num + 2 × i」です。プログラム2の空欄aにはこの式を採用します。
選択肢3と4の「b」について、プログラム2を検証します。
■プログラム2について
/*iを1から7まで3ずつ増やす場合*/
numに1を代入
iの初期値を1に設定
1 + 2 × 1 = 3 ← ここがnum + 2 × i
numが3になる
iの値を3増やして4
3 + 2 × 4 = 11
numが11になる
iの値を3増やして7
11 + 2 × 7 = 25
numが25になる。
iが7なので繰り返し処理を終了
/*iを2から6まで2ずつ増やす場合*/
numに1を代入
iの初期値を2に設定
1 + 2 × 2 = 5 ← ここがnum + 2 × i
numが5になる
iの値を2増やして4
5 + 2 × 4 = 13
numが13になる
iの値を2増やして6
13 + 2 × 6 = 25
numが25になる
iが6なので繰り返し処理を終了
変数numの値が設問の通り1 → 5 → 13 → 25と変化しているのは選択肢4です。よって正解は4となります。
参考になった数1
この解説の修正を提案する
前の問題(問95)へ
令和4年度問題一覧
次の問題(問97)へ