※C言語初心者の為、内容に不備がある可能性があります。
C言語の勉強の続き
今日は関数を書いてみる。
実行結果
最初のほうに書いた「int func(int int);」はプロトタイプ宣言というやつ。
標準関数であるprintfとかもstdio.hにプロトタイプ宣言が書いてあるらしい。
ボトムアップ式(自作関数の定義を先に書いて最後にmain関数を書く)の場合はプロトタイプ宣言は不要。
何も返さない関数の場合は「void」を利用する。
引数を持たない関数の場合は以下。
次はスコープ関係。
実行結果
「static」をつけないとaddに渡した引数がそのまま出ちゃいます。
「static」は記憶クラス指定子(storage class specifier)というものの一つ。
他には「extern」、「auto」、「register」がある。普通に変数を宣言するとauto扱い?
関数外で変数を宣言すると「グローバル変数」になる。
関数の再帰呼び出し。
階乗を求めるプログラムを書いてみる。
実行結果。
「kaijyo(4)」の場合の戻り値の例。
再帰呼び出しはスタック領域のメモリを大量に消費するから多用は避けたほうがいいとのこと。
Lispとかだと話しは違うと思うけど。。
猫の好きな私に向いた入門書
困ったもんだ
手前のレビュアー達の書く通り
猫でもわかるかな?
C言語の勉強の続き
今日は関数を書いてみる。
/* function01.c */ #include <stdio.h> int func( int, int ); int main() { int a,b,c; a = 10; b = 20; c = func( a, b ); printf( "%d * %d = %d", a, b, c ); return 0; } int func( int a, int b ) { int c; c = a * b; return c; }
実行結果
10 * 20 = 200
最初のほうに書いた「int func(int int);」はプロトタイプ宣言というやつ。
標準関数であるprintfとかもstdio.hにプロトタイプ宣言が書いてあるらしい。
ボトムアップ式(自作関数の定義を先に書いて最後にmain関数を書く)の場合はプロトタイプ宣言は不要。
何も返さない関数の場合は「void」を利用する。
void 関数名(引数の並び) { ・・・・ return; /* return のみで何も返さない */ }
引数を持たない関数の場合は以下。
戻り値の型 関数名( void ) { ・・・・ return 戻り値; }
次はスコープ関係。
/* span01.c */ #include <stdio.h> int add(int); int main() { int sum; sum = add(10); printf( "sum = %d\n", sum ); sum = add(20); printf( "sum = %d\n", sum ); sum = add(100); printf( "sum =%d\n", sum ); return 0; } int add( int x ) { static int gokei = 0; gokei += x; return gokei; }
実行結果
$ ./span01.exe sum = 10 sum = 30 sum =130
「static」をつけないとaddに渡した引数がそのまま出ちゃいます。
「static」は記憶クラス指定子(storage class specifier)というものの一つ。
他には「extern」、「auto」、「register」がある。普通に変数を宣言するとauto扱い?
関数外で変数を宣言すると「グローバル変数」になる。
関数の再帰呼び出し。
階乗を求めるプログラムを書いてみる。
/* recursive02.c */ #include <stdio.h> int kaijyo( int ); int main() { int i; for( i = 0; i < 11; i++ ) { printf( "%d! = %d\n", i, kaijyo(i) ); } return 0; } /* int kaijyo( int n ) { if( n == 0 ) { return 1; } else { return n * kaijyo( n - 1 ); } } */ /* 条件演算子を使ってみる */ int kaijyo( int n ) { return ( n == 0 ) ? 1 : n * kaijyo( n - 1 ); }
実行結果。
$ ./recursive02.exe 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800
「kaijyo(4)」の場合の戻り値の例。
4 * kaijyo(3) 4 * ( 3 * kaijyo(2) ) 4 * ( 3 * ( 2 * kaijyo(1) ) ) 4 * ( 3 * ( 2 * ( 1 * kaijyo(0) ) ) ) 4 * ( 3 * ( 2 * ( 1 * 1 ) ) )
再帰呼び出しはスタック領域のメモリを大量に消費するから多用は避けたほうがいいとのこと。
Lispとかだと話しは違うと思うけど。。
猫でもわかるC言語プログラミング (猫でもわかるプログラミングシリーズ)
posted with amazlet at 10.03.07
粂井 康孝
ソフトバンククリエイティブ
売り上げランキング: 46045
ソフトバンククリエイティブ
売り上げランキング: 46045
おすすめ度の平均:
悪いわけではありませんが猫の好きな私に向いた入門書
困ったもんだ
手前のレビュアー達の書く通り
猫でもわかるかな?