問 5(提出プログラム名:ex0905.h)
※ex0905.c ではなく ex0905.h を提出なので注意!
このプログラム(ex0905.c)とヘッダ(ex0905.h)をそれぞれダウンロードし,
ヘッダの中の関数 find_x を完成させなさい.
(書き換えるのは ex0905.h のみであり,ex0905.c はコンパイルと実行に使うだけなので間違えないこと)
関数 find_x では,引数として与えられた int 配列 a と int 型変数 x について,その配列 a の中で x と同じ値を持つ要素を先頭から探し,最初に見つかった位置(添字)を返すものとする(つまり,x と等しい a[i] が見つかったならば i を返す).なお,目的の値が見つからなかった場合は -1 を返すものとする.
この問題では,SIZE 個の整数を読み込んでいったんすべて配列へ格納し,その後に指定された整数 x が配列内の何番目に見つかったのか(ただし,その添字なので 0 から始まる)を表示させている.
なお,SIZE はマクロで定義されている.
【注意】
この問題では ex0905.h を提出しなさい(ex0905.c ではない).
また,マクロの定義部分以外に 5 や 4 と直接書いてはいけません.
【ヒント】
非常によく似た処理を先週の ex0807.c でやってもらっていましたが,今回は戻り値を持つかたちになっているので改めて関数 find_x の作り方の一例を以下に示します(他の方法もあります):
① for ( i = 0; i < SIZE; i++ ){ ... } として繰り返しながら,
その中で a[i] が x と等しいかどうかを調べます.
そして,もしも等しけれは return i; を実行して関数を終了します.
(※前回は break; でもって繰り返しから脱出するだけでした)
② 上の for 文が終わった後,return -1; を実行して関数を終了します.
(※前回は i の値を調べていましたが,今回は return -1; だけで十分です.
なぜなら,①の繰り返しの途中で return i; が実行されていたら,その時点で
for 文はおろか関数そのものの実行も途中で終わりになるので,この②に到達しません)
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
5 個の整数を入力してください:52 6 22 5 22 探している数は何ですか:22 22 は a[2] として見つかりました⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
※正しく「見つかりませんでした」と出力されているか確認せよ.
5 個の整数を入力してください:52 6 22 5 22 探している数は何ですか:100 100 は見つかりませんでした⏎
- 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
5 個の整数を入力してください:1 1 1 1 1 探している数は何ですか:1 1 は a[0] として見つかりました⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力が上の例と違う(きちんと確認していない).
(例1)見つかった位置(添字)が違っている.
(例2)見つかるはずのものが「見つかりませんでした」となっている.
■ 前回の ex0807.c で作った関数をコピー&ペーストしただけになってしまっている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
← [ 問 4 (ex0904.c) ]
ミスが無いことを確認したら次の問題へ → [ 問6 (ex0906.h) ]