次の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 |