(13) 関数

ライブラリ関数

最初に読み込むライブラリを #include で使いたい関数が定義されているヘッダファイルを指定することにより、関数を使用できるようになる

標準入出力 stdio.h ファイル関係

標準ライブラリ stdlib.h 汎用関数(メモリ管理、プロセス管理、その他)

/* list 13-1 */
#include <stdio.h>
#include <stdlib.h>
#define NUM 100
int main(void)
{
int i;

srand(100);
for(i=0; i<NUM; i++){
 printf("%3d ", rand()%1000);
}
printf("\n");

return(0);
}

数学 math.h 数学関数の集まり

/* list13-2 */
#include <stdio.h>
#include <math.h>
int main(void)
{
int i;

for(i=0; i<=10; i++){
 printf("%dの平方根は%.10f\n", i, sqrt((double)i));
}
for(i=0; i<=10; i++){
 printf("2の%d乗は%f\n", i, pow(2,i));
}

return(0);
}

ユーザー関数

通常の関数

/* list6-1 */
#include <stdio.h>
int maxof(int x, int y)
{
if(x>y){
 return(x);
}else{
 return(y);
}
}

int main(void)
{
int na, nb;

puts("二つの整数を入力してください。");
printf("整数1:"); scanf("%d", &na);
printf("整数2:"); scanf("%d", &nb);

printf("大きい方は%dです。\n", maxof(na, nb));

return(0);
}
/* list6-1をもう少し分かりやすくすると */
#include <stdio.h>
int maxof(int x, int y)
{
int m;

if(x>y){
 m=x;
}else{
 m=y;
}

return(m);
}

int main(void)
{
int na, nb, big;

printf("二つの整数を入力してください。\n");
printf("整数1:"); scanf("%d", &na);
printf("整数2:"); scanf("%d", &nb);

big=max(na, nb);
printf("大きい方は%dです。\n", big);

return(0);
}

課題13

以下のプログラムを作成する

  1. 整数を入力し、1からその数までの合計を求めるプログラムを作る。入力した整数を受け取り、1からその数までの合計を返す関数を 作成して使用すること。
  2. 大きさ100の整数型の配列を用意し、0から99までの乱 数を求めて格納するプログラムを作る。
    乱数はライブラリのrand関数を用いる。初期値は適当な値とする。
    1. さらに、100個の乱数の平均値、最小値、最大値を表示するプログラムを作る(List5-11参照)
    2. さらに、100個の乱数の10ごとの分布グラフを作成して表示するプログラムを作る(分布グラフはList5-13参照)
    3. さらに、100個の乱数の分散を求める。
      分散:((各データ - 平均値)の2乗)の総和÷個数
  3. (発展問題) 2. の乱数を使用し、以下を参考にして円周率を求めてみる。
    ある正方形の中にデタラメ(ランダム)に点を打つ時、その点が正方形の一片を直径とする円の中にある確率は、
    (円内の点の数)÷(正方形の中の点の数)
    となる。これは、
    (円の面積)÷(正方形の面積)
    と等しくなる。正方形の一辺をLとすると、
    ((L÷2)×(L÷2)×π)÷(L×L)=(L×L×π÷4)÷(L×L)=π÷4
    そこで、でたらめに点を打って求めた個数の比を4倍すれば円周率が求まることになる。
    π=4×(円内の点の数)÷(正方形の中の点の数)

注意

次回予告

理解度テスト