練習 [10] ポインタ①(5/5)

練習 5(提出プログラム名:p1005a.c)※加点対象

この問題は中級クラスの受講生は必須ではない(提出しなくてもよい)が,
上級クラスの受講生は必須とする.
なお,どちらのクラスであっても適切に正解すれば加点対象として扱う.

まず,このプログラム(p1005a.c)をダウンロードしなさい.
そして,この中の関数 find_max を編集して以下の実行例のように実行できるようにしなさい.

このプログラムでは,以下の処理を行っている:
① 3 つの int 型変数 x, y, z を用意し,最初にそれぞれの番地を出力する.
② 3 つの整数を入力として受け取り,x, y, z それぞれに格納する.
③ 関数 find_max を呼び出して,
 最大値を格納している変数の番地(ポインタ)を調べる.
find_max で得られた番地がどの変数のものだったのかを調べて出力する.

【編集すべき内容】
上記の手順のうち,③で呼び出されるfind_max の内容を編集し,3 つの変数の中で最大値を格納している変数の番地を return で返しなさい.(ダウンロードしたプログラムでは,単に変数 z に対応する番地を返すだけになっている)
なお,最大値が複数ある場合は,x, y, z の順に優先であると見なしなさい(実行例 2, 3 参照).
この問題では finx_max の中身のみを編集し,それ以外は変更しないこと.

【補足説明】
講義資料では説明していませんが,ポインタを関数の戻り値として使うこともできます.
より高度なプログラミングではよく使います.)
その際には find_max の宣言部分にあるように,関数名の前に * を付けて「戻り値がポインタで
ある」こと
を示します.

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
    ※Mac 環境の場合は番地の表記法が異なります.
     また,各自の環境では番地が以下の例とは異なる場合もあります.
変数 x の番地:0061FF18
変数 y の番地:0061FF14
変数 z の番地:0061FF10
x, y, z を入力してください:1 2 3
最大なのは 0061FF10 番地の変数 z でした
  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
変数 x の番地:0061FF18
変数 y の番地:0061FF14
変数 z の番地:0061FF10
x, y, z を入力してください:2 2 2
最大なのは 0061FF18 番地の変数 x でした
  • 【プログラムの実行例】(その3)赤字は実行時にキーボードから入力する内容
変数 x の番地:0061FF18
変数 y の番地:0061FF14
変数 z の番地:0061FF10
x, y, z を入力してください:1 2 2
最大なのは 0061FF14 番地の変数 y でした

【過去にあったミス(減点となり,やり直しを命じられる)】
3 種類の実行例を確認せずに提出してしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


第10回(Cプログラミング;3 限目の方)の練習問題は以上の5問です.
p1001a.c ~ p1005a.c を Moodle から提出してください.※ただし,p1005a.c は必須ではないです.
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.
なお,コンパイルエラーや無限ループになるプログラムを 1 個でも提出した場合は総合評価を 0 点とするので十分に注意すること.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.