定義と関数を使用して:
最初の関数宣言を呼び出す前に:
関数が呼び出しポイントの前に定義されている場合▫、あなたは特に明記していません。
▫コールポイント後の関数定義場合は、関数プロトタイプを呼び出す前に、以下のフォームに必要事項を宣言する必要があります。
識別子と呼ばれる関数名(タイプ記述を含むパラメータ・リスト)を入力します。
•関数名(引数リスト)の形を呼び出し
•ネストされた呼び出し
▫関数本体機能は、ネストされた呼び出しと呼ばれる別の関数を呼び出すことができます。
•再帰呼び出し
▫機能は、直接的または間接的に自分自身を呼び出します。
インライン関数:
•キーワードインライン文を使用している場合。
•コンパイル時のコールでパラメータの受け渡し、コントロール転送およびその他の費用を節約し、関数本体で置き換えること。
•注:
▫
インライン関数ループとボディは、switch文を持つことはできません。
▫インライン関数内で宣言の前に現れなければならない最初のインライン関数が呼び出されます
▫インライン関数は、例外インターフェース宣言することはできません。
デフォルトのパラメータ値を持つ関数
デフォルトのパラメータ値は、順序を指定します
•最後に、右のパラメータ値は、パラメータのパラメータリストのデフォルトパラメータ値かどうかではない必要があり、デフォルトでデフォルトのパラメータがあります。左から右に呼び出す際に、パラメータの実際の参加が結合するので。
•例:INT追加(int型のx、int型、Y = 5、INT Z = 6); //正しいです
int型の追加(INT X = 1、INTのY = 5、int型Z); //错误
int型の追加(INT X = 1、Y INT、INT Z = 6); //错误543.3
デフォルトのパラメータ値と位置の関数を呼び出します
関数プロトタイプ宣言と定義の前にプロトタイプ宣言がある場合•、デフォルトのパラメータ値は、関数のプロトタイプ宣言で指定する必要があります。
唯一の関数定義、関数定義やフロントは、デフォルトのパラメータ値は、関数定義で指定する必要がある場合。
関数のオーバーロード
同じ関数名は、それによって過負荷を形成し、同じスコープ内で宣言にC ++は機能と同様の機能を可能にします。覚えやすい、使いやすいです、。
異なるパラメータint型の追加(int型のx、int型のY)、フロート追加(フロートX、フワッ)。
異なるパラメータINTアド(int型のx、int型のy)の数、INT追加(int型のx、int型Y、Z INT)。
パラメータ▫オーバーロード機能が異なっていなければならない:異なる数または異なるタイプの、コンパイラが最良のマッチングパラメータ引数の種類と数に応じて選択された関数を呼び出します
たとえば、バイナリ進:
#include <ビット/ STDC ++ H>
の#define ENDL '\ N'
の#define _for(I、B)(iは= INT I ++; I <B)のための
名前空間の使用STDと、
CONST INT N = 1E5 + 5 。
長い長いtypedefのLL。
INT メイン(){ IOS :: sync_with_stdio(0)、cin.tie(0)、cout.tie(0 )。 INT塩基= 1、、RES = 0 。cinを>> ; 一方、(){RES + =ベース*(%2 )。ベース* = 2 ; A / = 10 。} COUT << RES << ENDL。0を返します。}
区分関数を解きます
#include <ビット/ STDC ++ H> の#define ENDL '\ N' の#define _for(I、B)(iは= INT I ++; I <B)のための 使用 名前空間STDを、 const int型 ESP = 1E- 10 ; typedefの長い 長いLL。 ダブル SIN(ダブルX){ ダブル RES = 0、X =加えます。int型ダウン= 1 ; // 一方(){ // ダウン+ = 2; // アップ* =(X * X)。 // addはアップ/ダウン=; // (%4 == 3ダウン)= -addを追加した場合、 // RES + =追加します。 // <<アップ<< "ダウン"はcout << "=アップ" <<ダウン<<"=追加" <<追加します。 // } COUT << ENDL。 // 追加= 行う{ RES + = 追加します。 追加 = -add *(X * X)/(ダウン+ 1)/(ダウン+ 2 )。 ダウン + = 2 ; } 一方(ファブ(ADD)> ESP)。 リターンのres; } int型のmain(){ IOS :: sync_with_stdio(0)、cin.tie(0)、cout.tie(0 )。 >> R >> S。 もし(R *、R <= S * S){ K = SQRT(SIN(R)* SIN(R)+ SIN(S)* SIN(S))。 } 他{ K = 0.5 * SIN(R * S)。 } COUT << K << ENDL。 リターン 0 ; }
結果を決定するアナログサイコロ、
#include <ビット/ STDC ++ H> の#define ENDL '\ N' の#define _for(I、B)(iは= INT I ++; I <B)のための 使用 名前空間STDを、 CONST INT N = 1E5 + 5 。 typedefの長い 長いLL。 INT ド(){ int型 =ランド()%6 + 1、B =ランド()%6 + 1 。 COUT << " 選手圧延" << << " + " << B << " = " << +のB << ENDL。 A + B; } int型のmain(){ IOS :: sync_with_stdio(0)、cin.tie(0)、cout.tie(0 )。 裁判所未満 << 「符号なし整数を入力してください:」 << てendl; 符号なし整数 N; cinを>> N; srand関数(N) 一方、(1 ){ int型の和= ド()。 もし(合計== 7 ||和== 11 ){ COUT << " プレイヤーが勝つ" << ENDL。 休憩; } そう であれば(和== 2 ||和== 3 ||和== 12 ){ COUT << " プレイヤーが負け" << ENDL。 休憩; } } 戻り 0 。 }
ハノイ再帰の塔
書式#include <iostreamの> 使用して 名前空間はstdを、 ボイド移動(チャー SRC、チャーDEST){ COUT << SRC << " - > " << DEST << ENDL。 } ボイドハノイ(整数 nは、チャー SRC、チャー媒体、チャーDEST){ 場合(N == 1 )移動(SRC、DEST)。 他{ ハノイ(N - 1 、SRC、DEST、培地)。 移動(SRC、DEST)。 ハノイ(N - 1、媒体、SRC、DEST)。 } } int型のmain(){ int型、M。 裁判所未満 << 「diskesの数を入力します。」; cinを >> メートル。 COUT << " 移動にステップ" << M << " diskes:" << ENDL。 ハノイ(M、' A '、' B '、' C ' )。 リターン 0 ; }