下記の言語でWhile文をreturn一つで表現するのはどの様に表現したらよいのか教えてください。
#include <stdio.h>
#define NUMBER 5
#define FAILED -1
// 要素数noの配列vcからkeyと一致する要素を探索
int search(const int vc[], int key, int no)
{
int i=0;
while(1)
{
if(i==no)
return(FAILED);
if(vc[i]==key)
return(i);
i++;
}
}
int main(void)
{
int i, ky, idx;
int vx[NUMBER];
for(i=0;i<NUMBER; i++)
{
printf("vx[%d}:",i);
scanf("%d",&vx[i]);
}
printf("探す値:");
scanf("%d",&ky);
idx=search(vx,ky,NUMBER);
if(idx==FAILED)
printf("\a探索に失敗しました\n");
else
printf("%dは%d番目にあります。\n",ky,idx+1);
return(0);
}
目的はなんだろう。とんち問題かな。
int search(const int vc[], int key, int no)
{
int i=0;
int result=FAILED;
while(1)
{
if(i==no) /* i>=no の方がいいかも */
break;
if(vc[i]==key)
{
result=i;
break;
}
i++;
}
return result;
}
for文なら
int search(const int vc[], int key, int no)
{
int i;
int result = FAILED;
for (i = 0; i < no; i++) {
if (vc[i] == key) {
result = i;
break;
}
}
return result;
}
とんちではないのですが、rituenひとつで表現できないかと
思い考えたのですが、うまくいかずちょっと人の手が借りたくなりました。
本当にありあがとうございました。
とんちと思ってこんなのも考えてた。
int search(const int vc[], int key, int no)
{
int i;
for (i = 0; (i < no) && (vc[i] != key); i++) {
}
return (i < no) ? vc[i] : FAILED;
}
いろいろな方法があり奥深いことを教えていただきました。
ありがとうございました。
勉強になります。
また、なにかありましたらよろしくおねがいいたします。
ツイート | ![]() |