例を使用した C プログラミングの関数:再帰とインライン
C の関数とは?
C プログラミングの関数 プログラムを理解しやすくし、テストしやすくし、呼び出しプログラムを変更せずに簡単に変更できる再利用可能なコード ブロックです。関数はコードを分割し、プログラムをモジュール化して、より効果的で効果的な結果をもたらします。つまり、より大きなプログラムは、関数として呼び出されるさまざまなサブプログラムに分割されます
大規模なプログラムをさまざまな機能に分割すると、各機能を個別に管理することが容易になります。プログラムでエラーが発生するたびに、問題のある機能を簡単に調査して、それらのエラーのみを修正できます。必要なときにいつでも関数を簡単に呼び出して使用できるため、時間とスペースを自動的に節約できます。
このチュートリアルでは、次のことを学びます-
- 図書館対。ユーザー定義関数
- 関数宣言
- 関数定義
- 関数呼び出し
- 関数の引数
- 変数のスコープ
- 静的変数
- 再帰関数
- インライン関数
ライブラリ対。ユーザー定義関数
すべての「C」プログラムには、メイン関数である少なくとも 1 つの関数がありますが、プログラムには任意の数の関数を含めることができます。 C の main () 関数は、プログラムの開始点です。
「C」プログラミングでは、関数は次の 2 つのタイプに分けられます。
<オール>ライブラリ関数と C のユーザー定義関数の違いは、ライブラリ関数のコードを記述する必要がないことです。これは、プログラムの最初に常にインクルードするヘッダー ファイル内に既に存在します。関数の名前を入力し、適切な構文で使用するだけです。 Printf、scanf はライブラリ関数の例です。
一方、ユーザー定義関数は、関数の本体を記述し、関数がプログラム内で何らかの操作を実行する必要があるときはいつでもその関数を呼び出す必要がある関数の一種です。
C のユーザー定義関数は常にユーザーによって記述されますが、後で「C」ライブラリの一部になる可能性があります。これは「C」プログラミングの大きな利点です。
C プログラミング機能は、次のような 3 つのアクティビティに分けられます。
<オール>関数宣言
関数宣言とは、プログラムの名前を書くことです。コードで関数を使用するための必須部分です。関数宣言では、変数宣言のようにプログラムで使用する関数の名前を指定するだけです。プログラムで宣言されていない関数は使用できません。関数宣言は「関数プロトタイプ」とも呼ばれます .」
関数宣言 (プロトタイプと呼ばれます) は、通常、main () 関数の上で行われ、一般的な形式を取ります:
return_data_type function_name (data_type arguments);
- return_data_type :呼び出しステートメントに返される値関数のデータ型です。
- 関数名 :の後に括弧が続きます
- 引数 データ型宣言を含む名前は、オプションで括弧内に配置されます。
整数変数のキューブ値を計算するキューブ関数を宣言する方法を示す次のプログラムを検討します
#include <stdio.h> /*Function declaration*/ int add(int a,b); /*End of Function declaration*/ int main() {
関数は必ずしも値を返すとは限らないことに注意してください。この場合、キーワード void が使用されます。
たとえば、output_message 関数宣言は、関数が値を返さないことを示しています。 void output_message();
関数定義
関数定義とは、関数の本体を書くことを意味します。関数の本体は、特定のタスクを実行するステートメントで構成されます。関数本体は、単一のステートメントまたはステートメントのブロックで構成されます。関数の必須部分でもあります。
int add(int a,int b) //function body { int c; c=a+b; return c; }
関数呼び出し
関数呼び出しとは、プログラムで必要なときに関数を呼び出すことを意味します。関数を呼び出すときはいつでも、設計された操作を実行します。関数呼び出しは、プログラムのオプションの部分です。
result = add(4,5);
これが完全なコードです:
#include <stdio.h> int add(int a, int b); //function declaration int main() { int a=10,b=20; int c=add(10,20); //function call printf("Addition:%d\n",c); getch(); } int add(int a,int b) //function body { int c; c=a+b; return c; }
出力:
Addition:30
関数の引数
関数の引数は、関数呼び出しによって必要な値を受け取るために使用されます。それらは位置によって一致します。最初の引数は最初のパラメーターに渡され、2 番目の引数は 2 番目のパラメーターに渡されます。
デフォルトでは、引数は値で渡されます 呼び出された関数にデータのコピーが渡されます。実際に渡された変数は変更されません。
値によって渡されるパラメータを示す次のプログラムを検討します:
int add (int x, int y); int main() { int a, b, result; a = 5; b = 10; result = add(a, b); printf("%d + %d\ = %d\n", a, b, result); return 0;} int add (int x, int y) { x += y; return(x);}
プログラムの出力は次のとおりです:
5 + 10 = 15
a と b の値のみがパラメーター x に渡されたため、add 関数に渡された a と b の値は変更されていないことに注意してください。
変数のスコープ
変数のスコープとは、プログラムのコード内の変数の可視性を意味します。
C では、関数内で宣言された変数はそのコード ブロックに対してローカルであり、関数の外で参照することはできません。ただし、すべての関数の外で宣言された変数はグローバルであり、プログラム全体からアクセスできます。 #define で宣言された定数 プログラムの一番上に、プログラム全体からアクセスできます。メイン関数とユーザー定義関数の両方からグローバル変数の値を出力する次のプログラムを検討します:
#include <stdio.h> int global = 1348; void test(); int main() { printf("from the main function : global =%d \n", global); test () ; return 0;} void test (){ printf("from user defined function : global =%d \n", global);}
結果:
from the main function : global =1348 from user defined function : global =1348
プログラムの詳細について説明します:
C では、引数が関数パラメーターに渡されると、パラメーターは関数を終了するときに破棄されるローカル変数として機能します。
グローバル変数を使用する場合は、注意して使用してください。エラーが発生する可能性があり、プログラム内のどこでも変更される可能性があるためです。使用する前に初期化する必要があります。
静的変数
静的変数にはローカル スコープがあります。ただし、関数を終了しても破棄されません。したがって、静的変数はその値を永久に保持し、関数が再入力されたときにアクセスできます。静的変数は宣言時に初期化され、接頭辞 static が必要です。
次のプログラムは静的変数を使用しています:
#include <stdio.h> void say_hi(); int main() { int i; for (i = 0; i < 5; i++) { say_hi();} return 0;} void say_hi() { static int calls_number = 1; printf("Hi number %d\n", calls_number); calls_number ++; }
プログラムは以下を表示します:
Hi number 1 Hi number 2 Hi number 3 Hi number 4 Hi number 5
再帰関数
次のように計算される数の階乗を考えてみましょう 6! =6* 5 * 4 * 3 * 2 * 1.
この計算は、ファクトが 1 になるまでファクト * (ファクト -1) を繰り返し計算することで行われます。
再帰関数は、それ自体を呼び出し、再帰呼び出しを終了するための終了条件を含む関数です。階乗数計算の場合、終了条件は事実が 1 に等しいことです。再帰は、終了条件が真になるまで呼び出しを「積み重ねる」ことによって機能します。
例:
#include <stdio.h> int factorial(int number); int main() { int x = 6; printf("The factorial of %d is %d\n", x, factorial(x)); return 0;} int factorial(int number) { if (number == 1) return (1); /* exiting condition */ else return (number * factorial(number - 1)); }
プログラムは以下を表示します:
The factorial of 6 is 720
ここでは、プログラムの詳細について説明します:
基本ケースまたは停止条件に到達するまで関数自体を呼び出すことで構成される再帰メカニズムをより理解するために、次のチャートを検討してください。その後、前の値を収集します。
インライン関数
C プログラミングの関数は、最も頻繁に使用される命令を格納するために使用されます。プログラムのモジュール化に使用されます。
関数が呼び出されるたびに、命令ポインターは関数定義にジャンプします。関数の実行後、命令ポインタは、関数定義にジャンプした場所からステートメントに戻ります。
関数を使用するときはいつでも、関数定義にジャンプしてステートメントに戻るために、追加のポインター ヘッドが必要です。このようなポインター ヘッドの必要性をなくすために、インライン関数を使用します。
インライン関数では、関数呼び出しが実際のプログラム コードに直接置き換えられます。すべての操作はインライン関数内で実行されるため、どのブロックにもジャンプしません。
インライン関数は主に小規模な計算に使用されます。大規模なコンピューティングが含まれる場合、それらは適していません。
インライン関数は、キーワード inline が関数名の前にあることを除いて、通常の関数に似ています。インライン関数は次の構文で作成されます:
inline function_name () { //function definition }
インライン関数を実装するプログラムを書きましょう。
inline int add(int a, int b) //inline function declaration { return(a+b); } int main() { int c=add(10,20); printf("Addition:%d\n",c); getch(); }
出力:
Addition: 30
上記のプログラムは、インライン関数を使用して 2 つの数値を加算する方法を示しています。ご覧のとおり、余分な行を記述せずに、インライン関数内の 2 つの数値の加算のみを返しました。関数呼び出し中に、加算を実行する必要がある値を渡しました。
まとめ
- 関数はミニプログラムまたはサブプログラムです。
- 関数は、プログラムをモジュール化するために使用されます。
- ライブラリとユーザー定義は、2 種類の関数です。
- 関数は、宣言、関数本体、関数呼び出し部分で構成されます。
- 関数の宣言と本文は必須です。
- 関数呼び出しは、プログラム内でオプションにすることができます。
- C プログラムには少なくとも 1 つの関数があります。それがメイン関数 () です。
- 各関数には、名前、戻り値のデータ型または void、パラメーターがあります。
- 各関数は、C プログラムで定義および宣言する必要があります。
- C 関数内の通常の変数は、関数呼び出しを終了するとすぐに破棄されることに注意してください。
- 関数に渡される引数は、アドレスではなく値で渡されたため、変更されません。
- 変数のスコープは、プログラム内の変数の可視性と呼ばれます
- C プログラミングにはグローバル変数とローカル変数があります
C言語