基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成30年 秋期 基本情報技術者 午後 問08
問08   必須問題

 次のプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。

 整数式を受け取って,その値を返すプログラムである。例えば,例1に示す整数式を受け取ると, その値 50 を返す。

例1: 2 ×(34−(5+67)÷ 8) 〔プログラムの説明〕

(1)整数式は,文字の列で与えられる。整数式は,次のもので構成される。

  • 符号のない数字 Ø 〜 9 の並び
  • 演算子: 十,一,× ,÷
  • 括弧:  (,)
(2)引数 Expression[] で整数式を,引数 ExpLen で整数式の文字数を,それぞれ受け取る。

(3)プログラム中の破線で囲んだ解析処理の部分では,受け取った整数式を解析し, 計算に必要な情報を配列及び変数に設定する。

(4)プログラム中の破線で囲んだ計算処理の部分では,(3)で設定した情報を用いて, 整数式の値を計算する。整数式の値は,Value[Ø] に得られる。

(5)各配列の添字は,0 から始まる。各配列の要素数は,十分に大きいものとする。

(6)受け取った整数式に誤りはないものとする。また,計算の過程で, あふれやゼロ除算は発生しないものとする。

〔プログラム〕

 

〔プログラム(解析処理の部分)の説明〕

(1)Expression[] で渡された整数式を解析し,計算に必要な情報を配列 Operator[], Priority[],Value[] 及び変数 OpCnt に設定する。関数 int() は,引数の数字が表す値を整数型で返す。

(2)例1の整数式について,プログラム(解析処理の部分)を実行した直後の各配列及び変数の状態を, 図1に示す。

図1 プログラム(解析処理の部分)を実行した直後の状態

 

〔プログラム(解析処理の部分)の説明〕

〔プログラム(計算処理の部分)の説明〕

(1)整数式の値を計算していく。図1に示す各配列及び変数の状態から, プログラム(計算処理の部分)の最外側の繰返しを1回実行した直後の各配列及び変数の状態を,図2に示す。

図2 プログラム(計算処理の部分)の最外側の繰返しを1回実行した直後の状態

 

〔プログラム(計算処理の部分)〕

 

設問1   プログラム(解析処理の部分)に関する次の記述中の    に入れる 正しい答えを,解答群の中から選べ。

 

 プログラム(解析処理の部分)の行@〜Cで用いている定数について考察する。

 まず,行B及びCの処理では,定数として 10 を用いているが,この定数は 10 である必要はない。 このプログラムにおいては,定数が a であれば常に 正しい演算順序が保証される。

 また,行@及びAの処理では,定数として1及び2を用いているが, 次に示すように書き換えることが可能である。ここで,priLow 及び priHigh は整数の定数を表し, その値は priLow<priHigh とする。

@→  ・Priority[OpCnt] ← nest+priLow

A→  ・Priority[OpCnt] ← nest+priHigh

 このように表現したとき,行B及びCの処理では,nest の値を増減する定数が b のときに限り正しい演算順序が保証されることになる。

 

a に関する解答群 ア 1 以上       イ 2 以上

ウ 11 以下       エ 12 以下

b に関する解答群 ア priHigh 以上            イ priHigh + 1 以上

ウ priHigh − priLow 以上       エ priHigh − priLow + 1 以上

 

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

基本情報技術者試験


設問2    優先順位の等しい演算子が複数個含まれている整数式の,演算の実行順序について考察する。 プログラムに関する次の記述中の    に入れる正しい答えを, 解答群の中から選べ。ここで,c1 〜 c3 に入れる答えは,c に関する 解答群の中から組合せとして正しいものを選ぶものとする。

 

 プログラム(計算処理の部分)では,優先順位の等しい演算子が複数個含まれている場合, 演算を左から順に実行するようになっている。このプログラムでは, 演算を左から順に実行するか右から順に実行するかは,行 c1 の内容が c2c3 かで決まる。

 演算の実行順序によって,計算結果が異なることがある。例えば,次の四つの整数式のケースを考える。

ケース1:(12+3+1)× 4×2
ケース2:(12+3+1)÷ 4÷2
ケース3:(12−3−1)× 4×2
ケース4:(12−3−1)÷ 4÷2

 これらのケースのうち,演算を左から実行しても右から実行しても, プログラムによる計算結果が等しくなるのは,ケース d である。

 

c に関する解答群

 

d に関する解答群 ア 1           イ 1 及び 2

ウ 1 及び 3        エ 1 及び 4

 

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

基本情報技術者試験


設問3   プログラムの動作に関する次の記述中の    に入れる正しい答えを, 解答群の中から選べ。

 

 符号付き整定数(数字の並びの先頭に符号+又は一を付けた定数)を含む整数式を考える。 符号付き整定数は,例2のように括弧で囲んで記述する。ただし, 符号付き整定数の直前の文字が演算子でない場合は,例3のように括弧で囲まなくてもよい。 例2:(+2)×((−3)+(−4))

例3: +2 ×(−3+(−4))

 符号付き整定数を含む整数式 2 ×(−1)についてプログラム(解析処理の部分)を実行した結果を, 図3に示す。

 このように,符号付き整定数を含む整数式を受け取ったとき, プログラムは e

図3 整数式 2 ×(−1):こついてプログラム(解析処理の部分)を実行した結果

 

e に関する解答群 ア 整数式が符号付き整定数で始まる場合に,正しい値を返さない

イ 整数式中に符号−の付いた符号付き整定数がある場合に,正しい値を返さない

ウ 整数式中に二つ以上の符号付き整定数が含まれる場合に,正しい値を返さない

エ 正しい値を返す

f,g に関する解答群 ア −1       イ Ø       ウ 1       エ 2

 

解答 e ←クリックすると正解が表示されます

解答 f ←クリックすると正解が表示されます

解答 g ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]