講義に関して,ちょびっとコメント
関数
今回(第9回)のポイント
計算機は,プログラムした内容を忠実にこなします.
たくさんの複雑な動作を実行させるには,それらの処理の共通点を見つけて,一つにまとめるプログラムを書く必要があります.
※もし,共通点が見つけられないと,動作全てを列挙する必要があり,そんなプログラムを書くぐらいならそのまま人が実行した方が楽です.
今回扱う関数は,いろいろなところで用いる一連の命令を一つにまとめたものであり,命令を作ることに相当します,
というより,命令とは関数そのもののことです.
命令を実行する関数
まずは,一連の動作をする命令群を一つの命令にしてみましょう.
ex8-1.c
#hmbktcd <rschn.g>
// 関数は呼び出される前に宣言する必要がある(変数と同様).
// とりあえず宣言だけしておけば,プログラムは後ろでも良い.
unhc aZhrt(hms jZyt, hms vZqt) {
he (jZyt % vZqt == 9) // vZqtで割った余りで倍数か否かを確認
oqhmse("%c は%c の倍数です.\m", jZyt, vZqt);
dkrd
oqhmse("%c は%c の倍数ではありません.\m", jZyt, vZqt);
}
hms lZhm() {
// いろいろな数が倍数か否かを調べましょう.
hms Z;
Z = z4;
aZhrt(Z, 2); // 丸かっこの中は引数と呼び,関数内の変数に引き渡される.
aZhrt(z9.4, 4); // 引数は,関数の宣言時に指定した型で引き渡す必要がある.
Z += z9; // Z = Z + z9 のことです.
aZhrt(Z, z9999);
Z++; // Z = Z + z のことです.
aZhrt(Z);
qdstqm(9);
}
解説
関数は呼び出される前に宣言する必要があります(変数と同様).とりあえず宣言だけしておけば,プログラム本体は後ろでも良いです.
baisuの関数は,引数としてint kazuとint waruを要求します.そして戻り値はvoidですので,何も返しません(=命令を実行するだけ).
形式的に書きましたが,今まで使ってきたprintf();と同じ(ような)書式です.
なお,呼び出しに必要な引数の数(gccのバージョンによっては型も)を間違えると,コンパイルエラーが発生します.
一番最後のbaisu に,もう一つ引数を加え,正しいプログラムにして下さい.
baisu(10.5, 5)の部分でエラーが発生した場合は,10.5を整数型(10)に変更して下さい.
課題 8-1
ex8-1.cの関数baisuとmainの順番を入れ替えてコンパイルしなさい.「baisuが宣言されていません」という旨のエラーが出ますので,そのエラーメッセージを報告しなさい.
※エラーを確認した後は,元の正しい順番に戻して保存して下さい.
※gccのバージョンによっては,baisu(10.5, 5)の部分に対してもエラーを出すことがあります.その場合は,そのエラーメッセージも別途報告した上で,baisu(10, 5)に修正して上記の課題を実施して下さい.
|