SkillStack
テクノロジ系1 / 6問

基本情報技術者試験 令和7年度 科目B 公開問題 問1

次のプログラム中の「a」と「b」に入れる正しい答えの組合せを、解答群の中から選べ。

関数function1 が受け取る引数と、関数function2 が受け取る引数とが同じとき、二つの関数は同じ値を返す。ここで、引数n と引数m は正の整数であり、引数m は引数n よりも10 以上大きい数とする。

【プログラム】 ○整数型: function1(整数型: n, 整数型: m)  整数型: count ← 0  整数型: i  for (iをnからmまで1ずつ増やす)   if ((i mod 4)が0と等しい)    count ← count + 1   endif  endfor  return count

○整数型: function2(整数型: n, 整数型: m)  整数型: count ← 0  整数型: tempN ← n  整数型: i, j  for (「a」)   if ((tempN mod 4)が0と等しい)    繰返し処理を終了する   endif   tempN ← tempN + 1  endfor

 for (「b」)   count ← count + 1  endfor  return count

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】カ

function1は、n以上m以下の整数を一つずつ調べ、4の倍数の個数を数えています。function2でも同じ結果を得るには、まずn以上で最初に現れる4の倍数をtempNに求め、その後、4ずつ増やしながら数える必要があります。

4の倍数までの差は最大3です。例えばn=5、m=18なら、最初の繰返しでtempNは5→6→7→8と変化します。したがって、aは最大3回加算できる「iを1から3まで」とします。次の繰返しでは、jが8→12→16と変化し、countは0→1→2→3となります。これはfunction1が数える8、12、16の3個と一致するので、bはtempNから始めて4ずつ増やす処理です。

アは、aが2回までなので、nを4で割った余りが1の場合に最初の4の倍数まで到達できず、さらにbの増分もtempNなので誤りです。イは、aが2回では不足する場合があり、bも1ずつ増やして全ての整数を数えるので誤りです。ウは、bの増分は正しいものの、aが2回までなので誤りです。エは、aは正しいものの、nからtempNずつ増やしても4の倍数だけを列挙できないので誤りです。オは、tempNから1ずつ増やし、4の倍数以外も数えるので誤りです。

【ポイント】 ある数以上の最初の4の倍数を探すには、最大3回の加算が必要です。 倍数を順番に列挙するときは、その倍数の間隔である4を増分にします。

【参考】擬似言語の記述形式(基本情報技術者試験用)

擬似言語を使用した問題では、各問題文中に注記がない限り、次の記述形式が適用されているものとする。

〔擬似言語の記述形式〕 ・○手続名又は関数名  手続又は関数を宣言する。 ・型名: 変数名  変数を宣言する。 ・/* 注釈 */ 、 // 注釈  注釈を記述する。 ・変数名 ← 式  変数に式の値を代入する。 ・手続名又は関数名(引数, …)  手続又は関数を呼び出し、引数を受け渡す。

・if (条件式1)   処理1  elseif (条件式2)   処理2  elseif (条件式n)   処理n  else   処理n + 1  endif  選択処理を示す。条件式を上から評価し、最初に真になった条件式に対応する処理を実行する。以降の条件式は評価せず、対応する処理も実行しない。どの条件式も真にならないときは、処理n + 1を実行する。各処理は、0以上の文の集まりである。elseifと処理の組みは、複数記述することがあり、省略することもある。elseと処理n + 1の組みは一つだけ記述し、省略することもある。

・while (条件式)   処理  endwhile  前判定繰返し処理を示す。条件式が真の間、処理を繰返し実行する。処理は、0以上の文の集まりである。

・do   処理  while (条件式)  後判定繰返し処理を示す。処理を実行し、条件式が真の間、処理を繰返し実行する。処理は、0以上の文の集まりである。

・for (制御記述)   処理  endfor  繰返し処理を示す。制御記述の内容に基づいて、処理を繰返し実行する。処理は、0以上の文の集まりである。

〔演算子と優先順位〕(上ほど優先度が高い) ・式:() . ・単項演算子:not + - ・二項演算子(乗除):mod × ÷ ・二項演算子(加減):+ - ・二項演算子(関係):≠ ≦ ≧ < = > ・二項演算子(論理積):and ・二項演算子(論理和):or 注記 演算子 . は、メンバ変数又はメソッドのアクセスを表す。 演算子 mod は、剰余算を表す。

〔論理型の定数〕 true, false

〔配列〕 配列の要素は、"["と"]"の間にアクセス対象要素の要素番号を指定することでアクセスする。なお、二次元配列の要素番号は、行番号、列番号の順に","で区切って指定する。 "{"は配列の内容の始まりを、"}"は配列の内容の終わりを表す。ただし、二次元配列において、内側の"{"と"}"に囲まれた部分は、1行分の内容を表す。

〔未定義、未定義の値〕 変数に値が格納されていない状態を、"未定義"という。変数に"未定義の値"を代入すると、その変数は未定義になる。

出典:令和7年度 基本情報技術者試験 科目B 公開問題 問1
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。

この回の6問を、アプリで通しで解く

  • 本番と同じ問題数・制限時間で通し演習(模試モード)
  • 間違えた問題は自動で「復習すべき問題」に回る
  • 解説で分からない点はAIに質問できる
SkillStackで無料で始める