1 #include <stdio.h> 2 #include <math.h> 3 4 double f(double x); //プロトタイプ宣言 5 6 //======================================================== 7 // メイン関数 8 //======================================================== 9 int main(void){ 10 double x, dx, xmin, xmax, y; 11 double max_y, max_x; 12 int i, ncal; 13 14 //--- 計算条件設定 --- 15 xmax = 10; 16 xmin = -10; 17 dx = 0.0001; 18 ncal = (xmax-xmin)/dx; 19 20 //--- 暫定最大値 --- 21 max_x = xmin; 22 max_y = f(xmin); 23 24 //--- 最大値検索 --- 25 for(i=1; i<=ncal; i++){ 26 x = xmin + i*dx; 27 y = f(x); 28 if(max_y <= y){ //最大値が見つかった場合 29 max_x = x; 30 max_y = y; 31 } 32 } 33 34 printf("%fのとき,最大%fとなる.\n",max_x, max_y); 35 36 return 0; 37 38 } 39 40 //============================================================ 41 // ユーザー定義関数 42 //============================================================ 43 double f(double x){ 44 double y; 45 46 y = -x*x + 10*x + 8 + 10*sin(x)*sin(x); // 関数の計算 47 48 return y; 49 }
リスト2の27-47行に記述している関数は,公約数に関する手 続きをまとめている.この関数の機能は,(1)2つの整数の公約数を表示,(2)公約数の個 数を返す--というものである.この関数の動作を見てみよう. -4pt
2つの整数を入力してください.公約数を表示します. 84 48 84と48の公約数は,以下の通りです. 1 2 3 4 6 12 公約数の数は,6個です.
1 #include <stdio.h> 2 3 int cmndiv(int m, int n); //プロトタイプ宣言 4 5 //======================================================== 6 // メイン関数 7 //======================================================== 8 int main(void){ 9 int hoge, fuga, num; 10 11 printf("2つの整数を入力してください.公約数を表示します.\n"); 12 scanf("%d", &hoge); 13 scanf("%d", &fuga); 14 15 num = cmndiv(hoge, fuga); 16 17 printf("公約数の数は,%d個です.\n", num); 18 19 return 0; 20 } 21 22 23 //============================================================ 24 // ユーザー定義関数 25 // 公約数(common diviser)を捜す 26 //============================================================ 27 int cmndiv(int m, int n){ 28 int i, small, count=0; 29 30 if(m<n){ 31 small = m; 32 }else{ 33 small = n; 34 } 35 36 printf("%dと%dの公約数は,以下の通りです.\n",m,n); 37 38 for(i=1; i<=small; i++){ 39 if(m%i == 0 && n%i ==0){ 40 count++; 41 printf("%d\n", i); 42 } 43 } 44 45 return count; 46 47 }
そのために,コンピュータープログラムの関数には2つの役割がある.一つ目の役割は, 同じような処理を一つにまとめることである.実際のプログラムの動作は,同じ処理,あ るいは似たような処理が非常に多い.いちいちそれを書くとプログラムが長くなり,プロ グラマーは大変である.そこで,ひとつにまとめ,必要なときに呼び出す.
分かりやすいプログラムの記述--が関数の二つ目の役割である.長いプログラムになる と,処理の内容がわかり難くなる.例えば,ソースプログラムが4000万行だと言われてい るWindows 2000 について,それぞれの実行文の役割など分からない.コンピューターは大量のト ランジスターからできているが,それぞれの役割が分からないのと同じである.このよう に大量の部品(実行文)から構成されるコンピューター(プログラム) の動作を考える際に 重要なことは,モジュール2に分解することである.モジュールと は,ある機能を果たす部品のことである.複雑な機械も,モジュールに分割すると動作の 内容が分かるようになる.長いプログラムを作る場合も同じで,モジュールに分け,分か りやすくすることが重要である.プログラムをモジュール--機能単位--に分割し, プログラムの動作内容をわかりやすくするために,C言語では関数を使う.
まとめると,関数の役割は -4pt
プロトタイプ宣言は,図5のように関数の定義より前に記 述しなくてはならない.実際には,コールよりも前に関数の定義を書けば,このプロトタ イプ宣言を省くことは可能である(教科書 [1]のリスト 5.3).しかし,それは良くないスタイルとされている.このプロトタイプ記述は簡単で, 関数の定義の先頭部分をコピーして,セミコロンをつければ良い.
プロトタイプ宣言を書くことにより,ソースプログラムを読みやすくなる.現在では,複 数のプログラマーによりひとつのプログラムが作成されるため,読みやすいあるいは分か り易いプログラムを書くことは重要である.
プロトタイプ宣言をまとめると -4pt
関数の定義をまとめると,次のようになる. -4pt