• 締切済み

配列受け渡し

要素数nであるint型配列xから値がkである要素の添え字を返却する関数(ただし、値がkである要素が存在しなければ-1を返却するものとし、そのような要素が複数存在する場合は、先頭側の最も小さい添え字を返却する)を作成しています。 #include<iostream.h> #include<iomanip.h> int search(int x[],int n,int k) { int i,j; int result=-1; for(i=0;i<n;i++){ if(x[i]==k){ result=i; return(result); } else return(-1); } } int main(void) { const int ninzu = 5; int height[ninzu]; cout << ninzu << "要素:\n"; int i; for (i = 0; i < ninzu; i++) { cout << setw(2) << i+1 << "番目:"; cin >> height[i]; } cout << "検索要素は?:"; int target; cin >> target; int result=search(height, ninzu, target); if(result==-1) cout<<"ないよ"<<endl; else cout<<result+1<<"番目が"<<target<<endl; return (0); } このようにしたのですが、うまくいきません。また、複数の要素が発生したときの返却の仕方がわかりません。 どなたかアドバイス等よろしくお願いします。

みんなの回答

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

search関数の中が間違ってます。 x[i]とkとを比較した後、一致した場合はresultを返り値にreturnする、までは合ってます。 でも、不一致の時に(else節以降)いきなり-1でreturnしてはダメです。 最初の要素で不一致だったら、2番目以降の要素で一致する可能性があっても、常に-1で返ってしまいます。 不一致の場合は、for文が全要素について繰り返すまで、returnしてはいけません。 あと、一致する要素が複数あった場合は「先頭側の最も小さい添え字を返却する」なので「0番目から順に見て行って、最初に見付かったのを返せ」って事です(プログラムを組む能力を身に付ける前に、問題文を読解する為の国語の学力を身に付ける必要がありそうですね(笑)

KEN4979
質問者

お礼

確かに、そのとおりでしたね・・・笑 お蔭様で理解することができました。ありがとうございました。