ITパスポート 2025年 問99
問題文
関数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
選択肢
ア:1,000
イ:1,500
ウ:3,000(正解)
エ:5,500
🔒 解説は解答すると表示されます
関数calculateAmountOfPrizeの賞金額合計【ITパスポート 解説】
正解の理由
問題の関数は、改善額(improvement)と短縮期間(period)に応じて賞金額を決めます。ここで「整数型」は整数を扱うデータ型、「if文」は条件によって処理を分岐する命令、「戻り値」は関数が外に返す値、という意味です。
与えられた二つの改善は、
- 改善額が20万円(200,000円)、短縮期間が3日
- 改善額が5万円(50,000円)、短縮期間が14日
それぞれを関数の条件に当てはめると、賞金は2000円と1000円になります。合計は 円です。したがって選択肢は ウ が正しいです。
解法ステップ
- 条件を確認する
- if文の最初の判定は「improvementが100000より小さい」(つまり improvement < 100000)です。
- 次の判定は「periodが7より小さい」(つまり period < 7)で、7日ちょうどは含まれません。
- ケース1(改善額20万円、期間3日)を評価する
- 200000 < 100000 ? → いいえ(偽) → elseブロックへ移動
- 期間3日は 3 < 7 → はい(真) → 賞金は2000円
- ケース2(改善額5万円、期間14日)を評価する
- 50000 < 100000 ? → はい(真) → 内側の判定へ
- 14 < 7 ? → いいえ(偽) → 賞金は1000円
- 合計を計算する
- 円
選択肢別の誤答解説
- ア: 1,000円
可能な間違い:片方の改善だけを計算して合計と勘違いしたケース。どちらか一方(たとえば1000円のみ)を合計と誤認するとこの値になります。 - イ: 1,500円
可能な間違い:各ケースをそれぞれ500円と1000円と誤って計算し、さらに平均など別の処理をしてしまった誤り。問題の条件に500円が該当するのは「改善額 < 100000 かつ period < 7」の場合で、ここでは該当していません。 - ウ: 3,000円
正しい。上の計算どおり 2000円 + 1000円 = 3000円。 - エ: 5,500円
可能な間違い:各ケースで最大の値(5000円と500円)を混同して合算した、またはどちらも大きい方の分岐と小さい方の分岐を混在させてしまった誤り。
よくある誤解
- 「100000(10万円)と200000(20万円)の大小を取り違える」
- 数字の桁数を見誤り、20万円を10万円より小さいと判断するミスがあります。桁数に注意してください。
- 「'7より小さい' を '7以下' と誤解する」
- 条件は strict(厳密)な比較です。period = 7 のときは「7より小さい」には当てはまらず else 側になります。
- 「改善額を金額の割合(%)だと誤解する」
- improvement は金額(円)です。パーセンテージではありません。
補足コラム
条件と賞金の対応をまとめると分かりやすいです(improvement のしきい値は 100000 円、period のしきい値は 7 日):
- improvement < 100000(小さい)かつ period < 7(小さい) → 賞金 500円
- improvement < 100000 かつ period >= 7 → 賞金 1000円
- improvement >= 100000 かつ period < 7 → 賞金 2000円
- improvement >= 100000 かつ period >= 7 → 賞金 5000円
このように「二段階の条件分岐」で結果を決める典型的な if 文の例です。業務で条件分岐を見るときは、まず上位の判定(ここでは改善額の大小)から順に追うとミスが減ります。
FAQ
Q1: improvement = 100000 のときはどちらのブロックになる?
A1: 「100000より小さい」かどうかの判定なので、100000 は小さくありません。else 側(improvement >= 100000 の扱い)になります。
A1: 「100000より小さい」かどうかの判定なので、100000 は小さくありません。else 側(improvement >= 100000 の扱い)になります。
Q2: period = 7 のときはどちらのブロックになる?
A2: 同様に「7より小さい」ではないので else 側(period >= 7 の扱い)になります。
A2: 同様に「7より小さい」ではないので else 側(period >= 7 の扱い)になります。
Q3: improvement や period が負の値だったら?
A3: 問題文で「値はそれぞれ0以上」とあるため負の入力は想定外です。実際のプログラムでは入力チェックで防ぐのが一般的です。
A3: 問題文で「値はそれぞれ0以上」とあるため負の入力は想定外です。実際のプログラムでは入力チェックで防ぐのが一般的です。
関連キーワード: if文, 条件分岐, 比較演算, 整数型, しきい値, 合計計算

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

