質問: タイトルにもあるように、int型配列に対して探索鍵を二分探索で調べて結果を表示するプログラムを作成したいのですが、 探索鍵にどのような数字を入力しても、見つからないという意の表示がされてしまいます。 とりあえず私は以下のようにプログラムを作成しました。 ``` #include #define MAX_SIZE 100 int bsearch(int a[],int p,int q,int x) { int t=(p+q)/2; if(p>q){ return -1; } if(a[t]==x){ return t; } if(a[t]>x){ q=t-1; } else { p=t+1; } return bsearch(a,p,q,x); } void get_array(int a[],int size) { int i; for(i=0;i=0){ printf("探索鍵%dがa[%d]に見つかりました。\n",key,pos); } else{ printf("探索鍵%dは見つかりませんでした。\n",key); } return 0; } ``` 実行結果 ``` $ ./a.out データ数: 4 a[0]: 1 a[1]: 2 a[2]: 3 a[3]: 4 1 2 3 4 探索鍵: 3 探索鍵3は見つかりませんでした。 ``` 自分が見た限りでは関数に問題があるようにも思えなかったので、どこを修正したらいいのかがよくわからず困っています。 どこに問題があるのでしょうか。また、どのように修正したらいいのでしょうか。
回答: main関数に問題があります。bsearch関数は問題ないと思います。 metropolisさんのコメントのとおり、`pos=bsearch(a,0,MAX_SIZE-1,key);` の `MAX_SIZE-1`はsizeの間違いだと思います。 bsearchで配列aの入力していない要素を参照しているために意図通り動作していないのだと思います。