本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成26年度 技術士第二次試験問題【必須科目】

T−8

次のC言語のコードは、配列 data を検索する関数 search のプログラムである。配列 data のサイズは2以上の値の length で、data[1] 〜 data[length-1] には、いろいろな整数値が入っている。 ある整数 x を与えられると、配列 data の中で x と等しい値が入っている最大の位置 (添え字) を返す関数 search として適切なものにするには、  *** (a) ***  の部分にどのようなコードを与えるとよいか。ただし、整数 x と等しい値が配列 data に含まれていなければ、0を返す。

 int Search ( int data[], int x, int length ) {
    *** (a) *** 
   while ( data[i] != x )
     i--;
   return i;
 }

@ int i = length;

A int i = length; data[length] = x;

B int i = length - 1;

C int i = length - 1; data[0] = x;

D int i = length - 1; data[length] = x;


正解

C


解説

while構文では、i の値を1ずつ減らしているので、配列 data の添え字を最大値から最小値まで順に減らし、 配列 data の値が x と一致するまで検索していることが分かる。
配列 data の最大値が length-1 であるから、
int i = length - 1;
である必要がある。この時点で答えはBCDに絞られる。

問題には「整数 x と等しい値が配列 data に含まれていなければ、0を返す。」とあるので、data[0] = x; としておくことで、配列 data に x が含まれていない場合でも、whileから抜け出すことができ、関数としても0を返すことができる。

T−7 目次 T−9