練習 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 点とするので十分に注意すること.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.