関数の活用 I

http://www.tuat.ac.jp/~kamelab/CPII/2005/051216/function.html

Cクラス 担当 亀田・佐藤

サブルーチンとメインルーチン


fig-1

第1節 引数と返り値

例題1
1: /*prog01.c 例題1*/
2: #include <stdio.h>
3: int task_a(int aa, int bb);/*関数task_a()のプロトタイプ宣言*/
4: void main(void)
5: {
6: int a,b,c;
7: printf("a:\n");
8: scanf("%d",&a);
9: printf("b:\n");
10: scanf("%d",&b);
11: c=task_a(a,b);/*実引数a,bとして関数task_a()を呼び出し, 返り値をcに代入*/
12: printf("a * b =%d\n",c);
13: }
14: int task_a(int aa, int bb)/*実引数a,bの値は仮引数aa,bbへコピーされる*/
15: {
16: int cc;
17: cc = aa * bb;
18: return cc;/*返り値はcc*/
19: }
fig-2

課題1

教科書p.55練習問題3.1 ふたつの数を比較して大きい方を返す関数imaxとそれを使うプログラムを作ろう.

第3節 標準関数の利用例

例題4
1: /*prog04.c 例題4 乱数を10個表示する*/
2: #include <stdio.h>
3: #include <stdlib.h> /*srand()とrand()を利用するために必要なヘッダーファイル*/
4: void main(void)
5: {
6: int i, rn;
7: unsigned int seed;
8: printf("乱数の種(0以上の整数値)を入力して下さい=>");
9: scanf("%d",&seed);
10: srand(seed); /*乱数の種を作成する関数srand()*/
11: printf("乱数10個表示\n");
12: for(i=0; i< 10 ; i++)
13: {
14: rn=rand(); /*乱数を呼び出して変数rnに代入*/
15: printf("%d\n",rn);
16: }
17: }

課題2

教科書例2-2.3(p29,p30)の, 円周率計算プログラムを修正しましょう(乱数の範囲が誤っているため, このプログラムのままでは正しい値が計算されません). 教科書内プログラム行10のlong nowtime,i,n;を, long i,n; int nowtime;と2行に変更し, 同様に行13(下記のプログラム中では行12), 行22(同、行20), 行23(同、行21)の65536という数値を2147483647に変更, 円周率を計算して下さい.

課題2サンプルプログラム

1: /*kadai2.c*/ /*課題2 円周率の計算*/
2: #include <stdio.h>
3: #include <stdlib.h>
4: #include <time.h>
5: void main(void)
6: {
7: int seed,ix,iy;
8: float x,y;
9: long i,n; /*変更済*/
10: int nowtime; /*変更済*/
11: time(&nowtime);
12: seed=(int)(nowtime%  2147483647); /*変更済*/
13: srand(seed);
14: printf("ただいま計算中です\n");
15: n=0;
16: for(i=1;i<=100000L;i++)
17: {
18: ix=rand();
19: iy=rand();
20: x=ix/2147483647; /*変更済*/
21: y=iy/2147483647; /*変更済*/
22: if(x*x+y*y<=1.0)
23: n++;
24: }
25: printf("pi=%10.8f\n",n/25000.0);
26: }

課題3

例題4, 5, 課題2を参考にして, 次のプログラムを完成させて下さい. 4つの整数乱数を発生させ, 2147483647で割り算し, 0以上1以下の実数x0,x1,y0,y14つとし, xy平面上の2点の座標(x0,y0),(x1,y1)とします. この2点間の距離を計算し, 画面上に2点の座標と共に表示します. なお, 平方根を計算する関数sqrt()はヘッダーファイルとしてmath.hをincludeする必要があります. また, 関数sqrt()の返り値と引数は以下の通りになります.

double sqrt(double x);

***ここまで***

CP II (亀田・佐藤クラス)トップページへ