78の正解: テクノロジ系アルゴリズムとプログラミング

関数 checkDigitは、10進9桁の整数の各桁の数字が上位の桁から順に格納された整数型の配列 originalDigit を引数として、次の手順で計算したチェックデジットを戻り値とする。プログラム中の a に入れる字句として、適切なものはどれか。ここで、配列の要素番号は1から始まる。 [手順] (1)配列 originalDigit の要素番号1~9の要素の値を合計する。 (2) 合計した値が9より大きい場合は、合計した値を 10 進の整数で表現したときの各桁の数字を合計する。この操作を、合計した値が9以下になるまで繰り返す。 (3) (2) で得られた値をチェックデジットとする。 [プログラム] ○整数型:checkDigit(整数型の配列: originalDigit) 整数型:i, j, k j ← 0 for (iを1から originalDigitの要素数まで1ずつ増やす) j ← j + originalDigit[i] endfor while (jが9より大きい) k ← j ÷ 10 の商 /* 10進9桁の数の場合、jが2桁を超えることはない */ [ a ] endwhile return j

この設問が問うていること

各桁の合計値を繰り返し1桁になるまで足すチェックデジット計算プログラムの空欄補完について問う設問です。

j ← 10 - k
選択肢の解説: 単にkを引くだけの式であり、2桁の数値の各桁の合計値を求める式になっていません。
j ← k + (j - 10 × k)正解
選択肢の解説: 「10の位の数(k)」と「1の位の数(j - 10 × k)」の合計値を求め、それを新たなjとして代入しているため、適切です。
j ← k + (j ÷ 10) - k
選択肢の解説: 計算式の中に除算が含まれており、桁の和を求める式として正しく機能しません。
j ← k + j
選択肢の解説: 商であるkに元のjを足すだけでは、1の位の値が正しく処理されず正しい桁和になりません。

総合解説

プログラムのアルゴリズムを追って空欄 [ a ] に入る式を特定する問題です。 配列 originalDigit の全要素を合計した値 `j` が 9 より大きい(すなわち2桁以上である)場合に、`while` ループによって「各桁の数字の合計」を繰り返し求めます。 ループ内では以下が実行されます。 ・`k ← j ÷ 10 の商` : 2桁の数 `j` の「10の位の数字」を取り出して `k` に代入しています。(例:`j=15` のとき、`k=1`) ・[ a ] の処理を通過した後、ループを繰り返すか判断されます。ここで `j` を「10の位と1の位の合計値」に更新する必要があります。(例:`j=15` なら、新 `j=1+5=6` にする) 「10の位の数字」は `k` です。「1の位の数字」は、`j` から `10 × k`(10の位に10を掛けたもの)を引くことで求められます。(例:`15 - 10 × 1 = 5`) よって、10の位と1の位の合計値は `k + (j - 10 × k)` となり、これを新しい `j` に代入する式 `j ← k + (j - 10 × k)` が適切です。 したがって、選択肢bが正解です。

執筆・監修: 運営者 KH更新日: 2026-07-05出典: IPA公式PDF(過去問題・解答例)
AIAIにその場で質問(デモ応答)

こんな聞き方もできます(タップで質問)

令和4年度を本番同様のCBT形式で解いてみよう

無料登録なしでも一部体験可能。登録すれば採点・弱点分析・AI教科書まで使えます。

令和4年度の過去問CBTを解く