関数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
令和4年度 ITパスポート試験 問96
这道题的解析和你的作答记录。
問96
頻出度★★☆
解説
問 96
错误ア
a 取为 2×num+i,把它代入 calcX 时,i=1 时 2×1+1=3 虽然符合,但 i=2 时 2×3+2=8,与所需的 7 不一致。a 的表达式有误,无法重现变化序列 1→3→7→13。
错误イ
a 取为 2×num+i,与 ア 一样无法重现 calcX(i=2 时得到 8 而非 7)。b 的范围虽然正确,但由于 a 有误,作为组合并不合适。
错误ウ
a=num+2×i 正确,但 b 为「i 从 1 到 7 每次增加 3」时,i=1,4,7 共 3 次,首次 i=1 时得到 1+2×1=3,与所需的 5 不一致,无法重现 calcY 的 1→5→13→25。b 有误。
- エ
正解 首先用 calcX 确定 a。calcX(1) 让 num 从 1 开始,for 循环使循环变量 i 按 1→2→3 变化,共 3 次。把 a 取为 num+2×i,则 i=1 时 1+2×1=3,i=2 时 3+2×2=7,i=3 时 7+2×3=13,与变化序列 1→3→7→13 及返回值 13 一致。因此 a=num+2×i。接着用 calcY 确定 b。calcY 也使用同一个 a=num+2×i,让 num 按 1→5→13→25 分 3 次变化,所以循环也必须是 3 次。若 b 为「i 从 2 到 6 每次增加 2」,则 i=2,4,6 共 3 次,i=2 时 1+2×2=5,i=4 时 5+2×4=13,i=6 时 13+2×6=25,恰好一致。因此 a=num+2×i、b=「i 从 2 到 6 每次增加 2」的组合 エ 正确。
ここがポイント
- for 循环的追踪:从初始 num 出发,对 i 的每个取值反复套用循环体的赋值表达式,反推出与给定变化序列和返回值一致的表达式(a)和循环范围(b)并据此选择。
- 伪代码中 for「i 从 ○ 到 △ 每次增加 □」的读法:正确数出 i 的序列和迭代次数(例如:从 2 到 6 每次增加 2 → i=2,4,6 共 3 次)。
用語