本文へスキップ

令和7年度 ITパスポート試験 問99

この問題の解説と、これまでの解答の記録です。

問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

出典 令和7年度 ITパスポート試験 問99
解説

問 99

  • 不正解ア

    1,000円は2件目(改善額5万円・短縮14日)単独の賞金額にすぎません。1件目(改善額20万円・短縮3日)の2000円を足し忘れており、二つの合計にはなっていません。

  • 不正解イ

    1,500円は1件目を500円と誤判定し2件目の1000円と足した500+1000=1500です。1件目は改善額20万円が「100000より小さい」を満たさず else 側へ進むので500ではなく2000円が正しく、外側の判定を取り違えた誤りです。

  • ウ

    正解 プログラムは外側の if で improvement(改善額)を100000円で分け、内側の if で period(短縮期間)を7日で分ける、計4分岐の関数です。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ちょうどの境界値と不等号の向きを取り違えないことが正答の鍵になる。
用語

解答の記録