8−1 関数の作り方

ここでは、整数のべき乗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);

 }

  

 

 

 

 

次へ