<問題> 教科書 71ページ - 73ページの準備
(1) 探索キー(1〜9)を入力する
(2) 1桁の正の整数 (1〜9) の乱数を10個、配列sに格納し、表示する
(3) 配列sに、探索キーと等しい要素があるかどうかを調べる(探索する/検索する)
あれば(そこで終了し)どこにあるかを出力する。ない場合は、ないと出力する。
(以下では、教科書にあわせて、英語のメッセージを出力する)
<実行例>
探索キーを入力してください(1-9) :6
s[0] = 2
s[1] = 9
s[2] = 4
s[3] = 2
s[4] = 1
s[5] = 1
s[6] = 6
s[7] = 6
s[8] = 9
s[9] = 1
6 is found in s[6] (← a[7]以降は調べていない)
探索キーを入力してください(1-9) :5
s[0] = 2
s[1] = 4
s[2] = 8
s[3] = 3
s[4] = 4
s[5] = 3
s[6] = 7
s[7] = 7
s[8] = 9
s[9] = 3
The element 5 is not in s (← 最悪。N個(最後まで)調べて、ない)
<ヒント> ループの中断 break よくわかるC p38 Cの絵本 p54
解答例 #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 10 int main(void) { int s[N]; int i; /* 配列の添え字 */ int x; /* キー x を探す */ printf("探索キーを入力してください(1-9) :"); scanf("%d", &x); /* &をお忘れなく */ /* 乱数の種をセット */ srand((unsigned int)time(NULL)); /* 乱数 N 個の生成。配列に格納、同時に表示 */ for (i = 0; i < N; i++) { s[i]= rand()%9 + 1; printf("s[%d] = %d \n", i, s[i]); } /* xを探索。1次元配列sに、xと等しい要素はどこに含まれているか */ for (i = 0; i < N ; i++) /* 以下、埋めよう */ /* メッセージの出力 */ printf("%d is found in s[%d]\n", x,i); /* あった場合 */ printf("The element %d is not in s\n", x); /* なかった場合 */ return 0; }