平成26年度 技術士第二次試験問題【必須科目】
【16】情報工学部門
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を返すことができる。

EXCELのVBAのご相談なら ファーストマクロ 



T−7 目次 T−9
ファーストマクロ TOPページ