関数 calculateAmountOfPrize は,業務改善の効果における改善額と短縮期間を,それぞれ improvement と period で受け取り,賞金額を戻り値とする。改善額が20万円で短縮期間が3日の業務改善と,改善額が5万円で短縮期間が14日の業務改善があった。この二つの賞金額の合計は何円か。ここで,改善額と短縮期間の値はそれぞれ0以上とする。 〔プログラム〕 ○整数型: calculateAmountOfPrize(整数型: improvement, // 改善額(円) 整数型: period) // 短縮期間(日) 整数型: prize // 賞金額(円) if (improvement が 100000 より小さい) if (period が 7 より小さい) prize ← 500 else prize ← 1000 endif else if (period が 7 より小さい) prize ← 2000 else prize ← 5000 endif endif return prize
令和7年度 ITパスポート試験 問99
这道题的解析和你的作答记录。
問99
頻出度★★☆
解説
問 99
错误ア
1,000 日元只是第 2 项(改善额 5 万日元、缩短期间 14 天)单独的奖金额。它漏加了第 1 项(改善额 20 万日元、缩短期间 3 天)的 2000 日元,并不是两项的合计。
错误イ
1,500 日元是把第 1 项误判为 500 日元后与第 2 项的 1000 日元相加得到的 500+1000=1500。第 1 项的改善额 20 万日元不满足「小于 100000」,应进入 else 一侧,因此正确值是 2000 日元而非 500 日元,这是把外层判定弄反的错误。
- ウ
正解 该程序是一个共有 4 个分支的函数:外层 if 以 100000 日元区分 improvement(改善额),内层 if 以 7 天区分 period(缩短期间)。第 1 项的改善额为 20 万日元(=200000),不满足「小于 100000」,因此进入 else 一侧;缩短期间 3 天满足「小于 7」,所以 prize←2000,即 2000 日元。第 2 项的改善额为 5 万日元(=50000),满足「小于 100000」,因此进入最初的 if 一侧;缩短期间 14 天不满足「小于 7」,因此进入 else,prize←1000,即 1000 日元。于是两项奖金额的合计为 2000+1000=3000 日元,正确答案是 ウ(3,000)。
错误エ
5,500 日元是把第 1 项误判为最大额 5000 日元、把第 2 项误判为 500 日元后相加得到的 5000+500=5500。第 1 项的缩短期间 3 天满足「小于 7」,应为 2000 日元;第 2 项的缩短期间 14 天不满足,应为 1000 日元——这是把内层判定弄反的错误。
ここがポイント
- 对嵌套的 if-else 选择结构,按「外层条件(改善额是否小于 100000)→内层条件(缩短期间是否小于 7)」的顺序逐行跟踪,从 4 种分支中确定唯一正确的返回值。
- 「小于(<)」是不含等号的严格不等号,其 else 一侧即为「大于等于」。不要把恰好等于 100000 或 7 的边界值与不等号的方向弄错,这是答对的关键。
用語