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