関数2

第5講 関数(つづき)
1.関数の宣言
例題
関数を用いて整数のべき乗を計算するプログラムを作る。
ただし、主プログラムの後で関数を記述する。
[問題の分析]
①べき乗を算出する関数 pow()
入力(引数):x、n
出力(返却値):xのn乗を返す(標準出力に出力)。結果は
long int型。
②データの入出力
標準入力からのx、nの入力、標準出力への結果の出力は、
main()で行う
[プログラムの作成]
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
/*----------------------------------------------べき乗を求めるプログラムの主プログラム部分
-------------------------------------------------*/
#include<stdio.h>
/*関数の宣言*/
long int
pow(int x,int n);
main()
{
int
x,n; /*入力データ*/
long int
y;
/*結果*/
/*データの入力*/
printf("input x n:");
scanf("%d %d",&x,&n);
/*べき乗の算出*/
y=pow(x,n);
/*結果の表示*/
printf("x=%d n=%d\n",x,n);
printf("x**n=%ld\n",y);
}
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
/*----------------------------------------------関数部分:べき乗の算出
-------------------------------------------------*/
long int
pow(int a,int b)
{
int
i;
/*添字*/
long int
kekka=1;
/*結果*/
/*aをb回掛ける*/
for(i=0;i<b;i++) kekka *= a;
return(kekka);
}
[実行結果]
input x n: 10 4
x=10 n=4
x**n= 10000
関数の宣言文
文法 【関数の宣言】
意味
関数の返却値、関数に渡す値(引数)の型を明らかにする。
関数を使用する時、変数や配列と同様、あらかじめ宣言する。
関数呼び出しの後で関数記述を行う場合→関数の宣言を行わなけれ
ばならない。
形式 関数の宣言の一般形
型指定子
関数名(仮引数型並び);
または
型指定子
関数名(識別子並び);
型指定子:関数の返却値の型
仮引数型並び:関数に渡す引数と識別子の並び(識別子は省
略可)
プログラムのコンパイル時に、コンパイラは引数の型のチェック
を行うことができる。
解説(補足)
• 【return文】
– return文に出会うと、ただちに呼び出し側に戻る。
– 関数の処理の本体の最後でなくてもよく、関数内にいくつ書いてもよ
い。
– Return文が省略されている時→ }で代用。
• 【main()】
– C言語では、プログラムのすべてを関数の形で記述する。
– main()も関数。Main()は、プログラム起動時にシステムから呼び出さ
れ、必ず1つだけ存在しなければならないことを除き、その扱いは他
の関数とまったく同様。
• 【void型】
– 関数に返却値がない場合、型指定子にはvoldと記述する。
– 上の例題では、関数は求めたべき乗を返却値として呼び出し側に返
し、呼び出し側(main())で標準出力に出力しているが、これを、関数
内ですべて行い、関数は値を返さないように変更したプログラムを以
下にしめす。
2.Void型関数の例
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
/*----------------------------------------------べき乗を求める
-------------------------------------------------*/
#include<stdio.h>
/*関数の宣言*/
vold
pow_p(int x,int n);
/*べき乗を算出して表示*/
main()
{
int
x,n; /*入力データ*/
/*データの入力*/
printf("input x n:");
scanf("%d %d",&x,&n);
/*べき乗の算出と表示*/
pow_p(x,n);
}
関数記述部分
•
•
•
•
•
•
•
•
•
•
•
•
•
•
/*----------------------------------------------べき乗の算出
-------------------------------------------------*/
vold
pow_p(int a,int b)
{
int
i;
/*添字*/
long int
kekka=1;
/*結果*/
/*aをb回掛ける*/
for(i=0;i<b;i++) kekka *= a;
/*結果の表示*/
printf("べき乗=%ld\n",kekka);
}
3.関数ライブラリーの利用
• 良く使われる関数はライブラリーの形で、あら
かじめシステムに用意されている。
• それらを用いるときは以下のようにする。
プログラムの先頭に次のような行を入れる
形式
#include <math.h>
(数学関係の関数 sin, cos, sqrt, pow などが対象)
#include<stdio.h>
(入出力関数 printf, scanf などが対象)
意味 #include文に出会うと処理系はその場所に該当するファ
イルを入れる。その後でプログラムをコンパイルして実行す
る。
上の場合は、math.h などの関数プログラム群を挿入する。
すると以後の部分で、math.h に含まれる関数を使う事が出
来る。
4.関数を含むプログラムの構造
以下の事項はテキストで調べる
1.関数の中で関数を呼ぶ構造
2.関数の中で関数を定義する構造
3.変数の型の適用範囲
演習
• プログラム課題1と2を実施