3 関数(サブルーチン)の作り方

3.1 関数の書き方の基本

関数を使うためには、以下のようにすれば良い。図3を見 ながら、以下を理解せよ。
図 3: 関数を使ったプログラムの基本的な書き方
\includegraphics[keepaspectratio, scale=0.7]{figure/how_to_make_function.eps}

3.2 データの受け渡し

関数を使うときにもっとも気を付けなくてはならないのがデータの受け渡しである。デー タによって、いろいろな方法があるのでよく理解する必要がある。しかし、ちゃんと理解 するためにはポインターが分かる必要があるが、それはまだなので、ここで示すパターン のみを憶えて欲しい。ポインターについては、2年生で学習する。

以下では、4つのパターンについて、例を示す。

3.2.1 引数や戻り値が無い場合

この場合、プロトタイプ宣言や関数定義の文では、void(空っぽの)と宣言する。
	#include <stdio.h>
	void hello(void);

	/*--------------- メイン関数 ---------------------*/	
	int main(void){
	  int i;

	  for(i=0; i<100; i++){
	    hello();
	  }

	  return 0;
	}

	/*--------------- 関数 ---------------------*/	
	void hello(void){
	
	  printf("Hello World \n");

	}

3.2.2 戻り値が一つの場合

	#include <stdio.h>
	double func(double u, double v);

	/*--------------- メイン関数 ---------------------*/	
	int main(void){
	  double x, y, z;
  
	  for(x=0; x < 1; x+=0.1){
	    for(y=0; y < 1; y+=0.1){
	      z=func(x, y);
	      printf("%lf\t%lf\t%lf\n",x,y,z);
	    }
	  }
  
	  return 0;
	}

	/*--------------- 関数 ---------------------*/	
	double func(double u, double v){
	  double w;

	  w = u*u + v*v;

	  return w;  
	}

3.2.3 戻り値が複数の場合

	#include <stdio.h>
	void menseki(double a, double *circle, double *square);

	/*--------------- メイン関数 ---------------------*/	
	int main(void){
	  double x;
	  double c, s;
  
	  for(x=0; x < 1; x+=0.1){
	    menseki(x, &c, &s);
	    printf("%lf\t%lf\t%lf\n",x,c,s);
	  }
  
	  return 0;
	}

	/*--------------- 関数 ---------------------*/	
	void menseki(double a, double *circle, double *square){
	  double pi;

	  pi=3.141592;

	  *circle = pi*a*a;
	  *square = 4.0*a*a;
	}

3.2.4 配列の場合

#include <stdio.h>
void twice(int n,int a[32][32]);

/*--------------- メイン関数 ---------------------*/	
int main(void){
  int a[32][32];
  int i,j;

  for(i=0; i < 32; i++){
    for(j=0; j < 32; j++){
      a[i][j]=i+j;
    }
  }

  twice(32, a);

  return 0;
}

/*--------------- 関数 ---------------------*/	
void twice(int n, int a[32][32]){

  int i,j;

  for(i=0; i < n; i++){
    for(j=0; j < n; j++){
      a[i][j] = 2*a[i][j];
    }
  }
}



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成17年1月26日


no counter