課題 [9] 関数②(5/9)

問 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 ではない).
また,マクロの定義部分以外に 54 と直接書いてはいけません.

【ヒント】
非常によく似た処理を先週の 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 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 問6 (ex0906.h) ]