「05解説」の編集履歴(バックアップ)一覧はこちら
「05解説」(2008/07/25 (金) 19:29:26) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
//C
#include <stdio.h>
/*
C言語は上から順番に読みこんでいくので、main関数でいきなり「get_heikin関数呼べよゴラァ」と言っても
「そんな関数しらねえよタコ!」とコンパイラさんに怒られてしまいます。
そういう時はこのように前もって「get_heikin関数というものがあってな・・・」と教えて上げましょう。
ちなみにこれを関数のプロトタイプ宣言といいます。
*/
double get_heikin(int a, int b);
void main(){
/*
2つの整数の平均を格納する変数は、小数を取る可能性があるので実数型(小数点を含む数)を使います
実数型はdoubleとfloatの二つがありますが、今のところdouble使ってれば問題ないです。違いが気になる人は調べてみてくださいね
*/
int a, b;
double avr;
printf("数字を入力してください : ");
scanf("%d", &a);
printf("もういっちょ入力してください : ");
scanf("%d", &b);
/*
作った関数を呼び出してます。こういう風にするとget_heikin関数が戻すdouble型の値を変数avrに格納できます
*/
avr = get_heikin(a, b);
/*
実数を表すエスケープシーケンスは「%f」です。floatのfでしょうね。double型でも同じです。
*/
printf("2つの数字の平均は %f です。", avr);
return;
}
/*関数の定義です。関数が呼ばれたらこの中身の通りに処理をしてreturnで元の場所に処理をもどします。戻り値というお土産つきで。*/
double get_heikin(int a, int b){
double ret;
/*
計算に使ってる変数がint型(整数型)なので、実数を戻してくれるように実数型でキャストします
キャストってのは「この変数int型なんだけど、double型で読みたいんだよね・・・なんとかしてくれないかな?かな?」
ってな感じで無理やり型を読み替える操作です。このように整数から実数にキャストするのは(余程大きな数字で無い限り)大丈夫なのですが、
例えば「5.5」の入ったdouble型をint型にキャストすると「5」になってしまいます。小数以下切捨てですね。
流石にこれは困るのでキャストするときは変数の中身が変わってしまわないように気をつけてください。
*/
ret = ((double)a + (double)b)/2;
/*
戻り値で返したい値を指定します。この場合変数retの中身を返しますね
関数の先頭で宣言した戻り値の型で値は返されます。なので違う型の変数を返したい場合はキャストが必要です
*/
return ret;
}
//C
#include <stdio.h>
/*
C言語は上から順番に読みこんでいくので、main関数でいきなり「get_heikin関数呼べよゴラァ」と言っても
「そんな関数しらねえよタコ!」とコンパイラさんに怒られてしまいます。
そういう時はこのように前もって「get_heikin関数というものがあってな・・・」と教えて上げましょう。
ちなみにこれを関数のプロトタイプ宣言といいます。
*/
double get_heikin(int a, int b);
void main(){
/*
2つの整数の平均を格納する変数は、小数を取る可能性があるので実数型(小数点を含む数)を使います
実数型はdoubleとfloatの二つがありますが、今のところdouble使ってれば問題ないです。違いが気になる人は調べてみてくださいね
*/
int a, b;
double avr;
printf("数字を入力してください : ");
scanf("%d", &a);
printf("もういっちょ入力してください : ");
scanf("%d", &b);
/*
作った関数を呼び出してます。こういう風にするとget_heikin関数が戻すdouble型の値を変数avrに格納できます
*/
avr = get_heikin(a, b);
/*
実数を表すエスケープシーケンスは「%f」です。floatのfでしょうね。double型でも同じです。
*/
printf("2つの数字の平均は %f です。", avr);
return;
}
/*関数の定義です。関数が呼ばれたらこの中身の通りに処理をしてreturnで元の場所に処理をもどします。戻り値というお土産つきで。*/
double get_heikin(int a, int b){
double ret;
/*
計算に使ってる変数がint型(整数型)なので、実数を戻してくれるように実数型でキャストします
キャストってのは「この変数int型なんだけど、double型で読みたいんだよね・・・なんとかしてくれないかな?かな?」
ってな感じで無理やり型を読み替える操作です。このように整数から実数にキャストするのは(余程大きな数字で無い限り)大丈夫なのですが、
例えば「5.5」の入ったdouble型をint型にキャストすると「5」になってしまいます。小数以下切捨てですね。
流石にこれは困るのでキャストするときは変数の中身が変わってしまわないように気をつけてください。
*/
ret = ((double)a + (double)b)/2;
/*
戻り値で返したい値を指定します。この場合変数retの中身を返しますね
関数の先頭で宣言した戻り値の型で値は返されます。なので違う型の変数を返したい場合はキャストが必要です
*/
return ret;
}
実はこの程度の計算ならば、関数化するよりもマクロを使ったほうが高速です。
関数にするべき処理とは、マクロで記述するには長すぎる頻繁に行う処理ですかね。
マクロに関してはまた今度・・・