ここでは、整数のべき乗Xのn乗を関数をもちいてもとめる。
整数のべき乗Xのn乗を関数をもちいてもとめる。べき乗とは、Xをn回掛け合わせた積である。Xとnとは標準入力から入力し、結果を標準出力に出力する。結果はlong int型で求める。
[問題の分析]
@べき乗を算出する関数 pow()
入力(引数):x、n
出力(返却値):xのn乗を返す
Aデータの入出力
標準入力からの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文は、必ずしも関数の処理の本体の最後でなくてもよく、関数内にいくつ書いてもよい。Return文が省略されている時は、関数の終わりを示す }で代用される。
【main()】 C言語では、プログラムのすべてを関数の形で記述する。今まで、説明もなく、main()を使ってきたが、実は、これも関数だったのである。Main()は、プログラム起動時にシステムから呼び出され、必ず1つだけ存在しなければならないことを除き、その扱いは他の関数とまったく同様です。
【void型】 関数に返却値がない場合、型指定子にはvoldと記述する。上の例題では、関数は求めたべき乗を返却値として呼び出し側に返し、呼び出し側(main())で標準出力に出力しているが、これを、関数内ですべて行い、関数は値を返さないように変更したプログラムを以下にしめす。
/*-----------------------------------------------
べき乗を求める
-------------------------------------------------*/
#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);
}
次へ