の最近のブログ記事

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 猫でもわかるかな?
Lispの本を買ったはいいが試す環境が無いので入れることに。
本文中にCommon Lispとか書いてあったので、じゃあそれで。 

初めての人のためのLISP[増補改訂版]
竹内 郁雄
翔泳社 (2010-03-10)
売り上げランキング: 369
おすすめ度の平均: 5.0
5 Lispのおすすめテキストです



上記URLにアクセスして「gcl_2.6.7.mingw32_ansi_japi_20080106.exe」をダウンロード。

そのままクリックしてインストール開始。途中何かコマンドプロンプトが出てきて何か押せ
みたいなのがでるのでとりあえずおす。
するとインストール環境。
デスクトップにできたアイコンをクリックするとコマンドプロンプトが出るので試しに以下を入力。

lisp.jpg
とりあえず動いたみたい。次はLinuxにも入れてみよう。

C言語でFizzBuzz

| トラックバック(0)
C言語の勉強の続き。

Software Design 総集編 【2000~2009】(DVD付)

技術評論社
売り上げランキング: 83


「LLプログラミングことはじめ」に乗ってたので試しにやってみた。

/* fizzbuzz */
#include 

int main( void ) {
  int i;
  for( i = 0; i <= 100; i++ ) {
    if( i % 3 == 0 ) {
      if( i % 5 == 0 ) {
        printf( "FizzBuzz \n" );
      } else{
        printf( "Fizz \n" );
      }
    } else {
      if( i % 5 == 0 ) {
        printf( "Buzz \n" );
      } else{
        printf( "%d \n", i );
      }
    }
  }
  return 0;
}

そのまんま書いただけ。。
 
PerlのFIzzBuzzの所を読むとあーこんな書き方出来たねと思い出させてくれる。

#!/usr/bin/perl
for(1..100){print(($_%15)?($_%5)?($_%3)?$_:"Fizz":"Buzz":"FizzBuzz","\n");}
Perlの方が楽しいな・・・。
それにしてもプログラムは書かないと忘れちゃいますな。。
最近あんまり書けない。。
本屋に行ったらたまたま見つけたので。

まだ中身少ししか見れてないけど色々あって面白そう!


Software Design 総集編 【2000~2009】(DVD付)

技術評論社
売り上げランキング: 83

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        

ウェブページ

このアーカイブについて

このページには、過去に書かれたブログ記事のうちカテゴリに属しているものが含まれています。

前のカテゴリは日記です。

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

Powered by Movable Type 5.01