C言語:関数

| トラックバック(0)
※C言語初心者の為、内容に不備がある可能性があります。

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言語プログラミング (猫でもわかるプログラミングシリーズ)
粂井 康孝
ソフトバンククリエイティブ
売り上げランキング: 46045
おすすめ度の平均: 4.0
3 悪いわけではありませんが
5 猫の好きな私に向いた入門書
5 困ったもんだ
3 手前のレビュアー達の書く通り
4 猫でもわかるかな?

トラックバック(0)

トラックバックURL: http://www.mogumagu.com/mt/mt-tb.cgi/9

2012年1月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

ウェブページ

このブログ記事について

このページは、モグマグが2010年4月 2日 23:59に書いたブログ記事です。

ひとつ前のブログ記事は「C言語:forでコサインカーブ」です。

次のブログ記事は「C言語:ポインタ突入」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.01