プログラミングC: 投稿 8 – C言語での関数
コンテンツ
1. 関数の先頭で
入力して実行します 2 例, 結果とコメントを観察.
例 1:
// e.g 1 about function in C - code by nguyenvanquan7826 #include <stdio.h> void loiKhuyen() { printf("Neu hoc nghiem tuc va cham chi thi ban se thay:\n"); printf("Khong co viec gi kho\n"); printf("Chi so long khong ben\n"); printf("Dao nui va lap bien\n"); printf("Quyet chi at lam nen\n"); printf("\n"); } int main() { printf("Hoc bai nay kho qua!\n"); loiKhuyen(); printf("Hoc C kho qua!\n"); loiKhuyen(); return 0; }
結果:
レッスンはこの倉庫を通じて学習!
ノイ本格的な研究と努力、あなたが表示されます:
何も倉庫
ホーチミンベン限り、コン
ラップ偉大なのDAOのVAビエン
NENの逃走時に決定アドホックC·ストレージ上!
ノイ本格的な研究と努力、あなたが表示されます:
何も倉庫
ホーチミンベン限り、コン
ラップ偉大なのDAOのVAビエン
NENの逃走時に決定
例 2:
// e.g 2 about function in C - code by nguyenvanquan7826 #include <stdio.h> void vechu(char chu, int soluong) { int i; for (i = 0; i < soluong; i++) { printf("%c", chu); } printf("\n"); } int main() { vechu('h', 20); vechu('a', 30); vechu('h', 12); vechu('a', 5); vechu('p', 10); return 0; }
結果:
gggggggggggggggggg
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
hhhhhhhhhhhh
AAAAA
PPPPPPPPPP
プログラムはコマンドの数を有する場合, または異なる位置に繰り返し、数回に同一または類似の形を持っているジョブ, 我々は整理し、コマンドの一部にそれを構築する必要があるコマンドシーケンスをコピーするために浪費する時間と労力を避けるために、, プログラムは、彼らは単にセグメントのみそのコマンドを呼び出すことを仕事をする必要がある場合. 機能コマンドと呼ばれる段落.
ハムは、ブロックコマンドジョブを実行するの一部は、プログラムを実行している間、数回繰り返し、あるいは複雑なプログラムをサポートするために、別々のブロック、特定の作品を使用されています.
例では、 1: 持っている 2 プログラム, 1 主プログラム: メイン と 1 追加プログラム: loiKhuyen パラメータとリターンは機能のデータ型には値がvoidで宣言されていない. どちらもメインとloiKhuyenは、関数と呼ばれている. 主な機能は、実行された機能で、私達の全体のプログラムを実行する. ハムloiKhuyenはいくつかの作業を行って (出力 5 上記の単語). 主な機能では、持っている 2 場所コールloiKhuyen();
例では、 2: 同様の例 1, それが含まれて 2 顎, 1 主な機能はある メイン と 1 サブルーチン, しかしサブルーチンがある Vecht(チューCHAR, int型soluong); 持っている 2 パラメータの形式は、 サイクル char型のと soluong int型の. ハムは、関数の戻り値のデータ型がvoidとして宣言すべきではないvechu. 主な機能では、持っている 3 パラメータが実際にプログラムとしてターンvechu関数呼び出し.
2. 機能の動作原理
- マシンが始動を行われる機能の任意の場所に関数呼び出しを満たしたとき, すぐに呼び出される関数に行くエリアを残す。.
- 関数のパラメータと、マシンは機能に対応する仮パラメータの実際の通信パラメータを実行します.
- マシンがreuturn順序またはチェックまで、関数本体内の文を順番に実行し始めた } 顎の、停止エスケープ関数は、それを呼び出して、このプログラムのステートメントを作るためのプログラムを返す.
- 関数は、値、関数の関数の戻り値の式の値を返す場合.
注意: 関数の宣言 無効vechu(チューCHAR, int型soluong) その後 サイクルと数量パラメータフォーム, 呼び出した場合でも、 Vecht(「H」, 20); その後 H」’ と 20 本当にパラメータ.
3. 顎の構造
私たちは、次の関数宣言を構造化しています:
KieuTraVe TenHam(Cac tham so) { ThanHam; }
関数名は変数の命名規則に設定されています.
4. 機能の例
例 1: 関数は値を返しません。
我々が持っている上記 2 例えば、開口部は、関数が値を返すと宣言された戻り型がありません 空隙.
例 2: 貴重な関数が戻ります
機能の構築N! そして、いくつかの表現は階乗. nは知っています! = 1.2.3…N
// e.g about function in C - code by nguyenvanquan7826 #include <stdio.h> long giaiThua(int n) { long gt = 1; int i; for (i = 2; i <= n; i++) { gt *= i; // <=> gt = gt * i } return gt; } int main() { printf("5! = %ld \n", giaiThua(5)); printf("6! + 1 = %ld \n", giaiThua(6) + 1); return 0; }
結果:
5! = 120
6! + 1 = 721
ドン! かなり大きな整数関数とすることができること型の値を返します 長いです (int型よりも大きいです – Cのデータ型を確認). オーダー リターンGT すなわち、変数を返すGT, GTは、関数のデータ型と同じデータ型でなければなりません (そして、ドラゴン).
この例ではgiaiThua関数は、数値の階乗を返すnは、それがあると考えることができるように渡される 1 式で使用される変数と, 常に結果を印刷するために使用. どこでも関数を満たした場合、それが送信されます 1 パラメータ機能に対応すると最後のコマンドの戻り値を返す.
例 3: 機能テスト
建物検査機能の利いはそこにいくつかではありません? 美しい数は数割り切れます 2 そして、割り切れます 5.
これを行うには, 私たちは数がものです。この機能がチェックされるかを決定する必要があります, そのため、我々は正しい値を返す必要があります (1) または間違いました (0). だから、この関数は整数を返します。.
// e.g about function in C - code by nguyenvanquan7826 #include <stdio.h> int kiemTraChiaHet(int n) { if(n % 2 == 0 && n % 5 == 0) { return 1; } return 0; } int main() { int x; printf("Nhap x = "); scanf("%d", &x); if( kiemTraChiaHet(x) == 0) { printf("day khong phai so dep @@\n"); } else { printf("day la so dep !!!\n"); } return 0; }
関数kiemTraChiaHetで, nが割り切れるとき 2 と 5, それは、コマンドを実行します リターン 1, 最後すなわち、この関数を実行中, コマンドが残したかどうかをもう一度、この機能では何もしません. 数nは割り切れない場合には 2 と 5 それは、コマンドを実行します リターン 0.
例 4: これらの機能は、お互いを呼び出す
// e.g about function in C - code by nguyenvanquan7826 #include <stdio.h> int max2(int a, int b) { return a > b ? a : b; } int max3(int a, int b, int c) { return max2( max2(a, b), c); } int main() { int a = 7, b = 13, c = 4; printf("So lon nhat la %d \n", max3(a, b, c)); return 0; }
結果:
最高 13
この例では、ビルド 2 の最大数を見つけるための機能 2 番号と 3 数. MAX2機能では、使用します 条件演算子 最も多くのを見つけるために 2 数. MAX3機能でMAX2を呼び出すことでした 2 時間は、最大の番号を見つけるために, いくつかの発見は、C最大の番号を見つけると比較したBと取った.
注目: それが宣言される前に関数の後に関数の宣言が呼び出されますが、関数は、関数の宣言を呼び出す前に宣言されていません. 我々はそれ以降のレベルでMAX2機能を構築する場合、すなわち上記の例では、マシンはMAX3をエラーします. この問題を解決するために、我々は通常、我々はどこにでもプログラムで関数を定義し、プログラム内の関数を宣言し、私たちに一例であり、:
例 5: 関数定義の前に関数の宣言
// e.g about function in C - code by nguyenvanquan7826 #include <stdio.h> // khai bao cac ham max2, max3, max4 int max2(int a, int b); int max3(int a, int b, int c); int max4(int a, int b, int c, int d); int max3(int a, int b, int c) { return max2( max2(a, b), c); } int max2(int a, int b) { return a > b ? a : b; } int main() { int a = 7, b = 13, c = 4, d = 16; printf("So lon nhat trong a, b, c la %d\n", max3(a, b, c)); printf("So lon nhat trong a, b, c, d la %d\n", max4(a, b, c, d)); return 0; } int max4(int a, int b, int c, int d) { return max2( max2(a, b), max2(c, d) ); }
結果:
で最も多く, B, C 13
で最も多く, B, ℃, の 16
作業する場合、我々は前に、このような関数を宣言し、次を定義する必要があります. したがって、私たちはそれぞれの関数を使用したいときに我々はいくつかのエラーを回避します.
私はすでに関数がお互いを呼び出すことができます知っているおよび機能も自分自身を呼び出すことができます, 私たちは、再帰関数を使用していること.
例 6: 帰納的関数
私は式nを知っていました! = 1.2.3…N. しかし、一つはまた、n個を書くことができます! = (-1)!.N. この表記では、Nを算出します! 我々は、計算を必要とします (-1)!. だから、それはあまりにも、再帰的に発現および機能と呼ばれることができ, コールバック関数自体は、再帰関数と呼ばれています.
// e.g about function in C - code by nguyenvanquan7826 #include <stdio.h> int giaiThua(int n) { if(n == 0) return 1; // dieu kien dung return giaiThua(n-1) * n; // loi goi chinh no } int main() { int n = 5; printf("%d! = %d",n, giaiThua(n)); return 0; }
注意 常に再帰関数で 2 要因は、条件が停止され、自分自身を呼び出す.
例 7: 簡単な関数を定義するには、ナビゲーションの#defineを使用して、
#include <stdio.h> #define tong(x, y) x + y int main() { int a = 5, b = 8; printf("%d + %d = %d",a, b, tong(a, b)); return 0; }
この時点で、関数の基本的な理解を持っている, しかし機能について言って、より多くのものがあります, 特に、関数配列とポインタについて. 私たちは、配列とポインタと次のポストでそれらを見つけるしていきます.
エクササイズ
- S = 1 + 2 +を合計する機能を書きます….+N.
- チェック機能の素数を書きます, 完全数.
- n個の数字と発表すべき素数のシーケンスを入力します。, 完全数か.
私は上に書いたように彼は私に尋ねました”プログラムでは、 1: 持っている 2 プログラム, 1 主プログラム: メインと 1 追加プログラム: はパラメータをloiKhuyenず、関数の戻り値のデータ型はvoidとして宣言されるべきではありません.
しかし、プログラム中 2, vechu機能はまだ無効スターとして宣言されたパラメータを持つA
私は感謝します
パラメータと戻り値があります 2 互いに全く異なると関係のないあなた、ああ
あなたはなぜ彼里があるとして、それらの多くは関数を宣言見ました :
ノード * searchnode(木T , フロートK)
機能は、ノートのポインタ型を返します。
関数の宣言はまた、直流AKに彼にポインタを与えました
あなたの大丈夫を置きます.
私は、再帰関数のためのサイトの広告を尋ねました, 戻り停止条件 1 サー・ラ・スター? 私は復帰を考えました 1 それは値を返します 1 むしろ?
値を返すことは事実であります 1. しかし、順序は再帰の停止条件であります, すなわち停止したい、彼らはそのTHに停止する必要があります.
広告は説明することができ、それは良いとは限りません. リターン 1 取得していないなぜこれほど価値関数は、先生をgiaithua? 電子感謝
それだけで戻っ 1 時はn = 0 あなただけ. nがまだある場合> 0 それはまだ自分自身と呼ばれるが、減少したnの.
VDのn = 4 我々はプロセスが行っています.
B1: やるのn> 0 giaithuaを返す必要があります(3)*4
B2. それは同じgiaithuaを返します。(2)*3*4
B3, リターンgiaithua(1)*2*3*4
B4. 戻りgiaithua(0)*1*2*3*4
B5. この段階ではgiaithuaを数え(0) そしてそれは、n = 0を返すを参照してください。 1 すなわちgiaithua(0) = 1. その結果が持っています
1*1*2*3*4
彼はBH最小最大関数を定義したいことを私に尋ねました 1 nはTNとして、それを入力するのは、n個の連鎖 ????
なぜ文字列の最小最大の定義があります.
giaiThuaを返します(-1) * N; // LOIは、自分自身を呼び出します
ウェイター, この曲、なぜそれがなりました 4!*5 その先生は、.
n = 5 その後、n個 – 1 = 4, giaiThua(-1) た 4!.
町のEMホイアンのリターンはリターンGTとして返します。 , 従ってGT – お互いの共同の先生には無関係とgiaithua ,
メイン関数呼び出しの星が出てgiaithua , 戻り値は、戻りGTであります ?
あなたのためのような期間を期待
関数名giaithua, GTはまた、変数は、私たちが退職のために支払うべき計算される値が含まれています.
Eは尋ねます: 私たちが行う必要がある機能を使用したいです?
ただ、それを大声で呼んで.
私は聞いてみよう: 私は、ライティング機能を見て, そのような人々は、渡されたとして、: int型A, int型 &ザ·, int型A, どのように異なること, そしてどのように使用してA
INT関数の引数は整数が正常です, int型 &関数の引数は整数変数のアドレスです. 非保存機能のうちの値を持つ関数をint型, しかし、int型 &、の値はオフ機能の後に保存することができます. あなたはより多くのために、この記事を参照することができます: https://cachhoc.net/2018/01/20/ham-hoan-vi-trong-c/#4_Ham_hoan_vi_trong_C
メインint型() {
int型のn = 5;
printfの(“%D! =%D”,N, giaiThua(N));
リターン 0;
}
返すために星 0 より多くの管理者
AT ALL 1 彼の記事はまた、ゴーン語ります. しかし、詳細については、我々はリターンを使用する理由 0, またはメイン関数の最後で特定の値を返します()?
答えは簡単です: ほとんどの場合、, それは必要ありません!
あなたはこの質問に興味があるなら、それの深い意味はほとんどNHEと懸念しています:
メイン関数の値を返すには, つまり、あなたのプログラムは、あなたのプログラムの状態にオペレーティングシステムを教えてくれます, このようなプログラム一定の誤差の範囲内で実行しているとき.
デフォルトのOSにより、, とき値 0 メインから返さ(), プログラムは、任意のバグに遭遇したことはありません. 反対, 非ゼロ値は、主機能に戻すと, それは、エラーが発生したことを通知します.
例, プログラムは、コマンドラインで指定されたファイルを開くことができません. 真の値は、プログラムから返されると、彼らは何のためにプログラムを意味していることを示しています: 彼らは、そのプログラムのプログラマによって定義されています.
ソース: http://diendan.congdongcviet.com/threads/t4057::SU-糞リターン-0-O-cuoi-HAM-メイン-CO-Y-教義-gi.cpp
彼はあなたが先生を読み違えていないことパラグラフはあなたに感謝し、あなたが私を助けて説明#defindすることはできません
これは定義であります 1 定数またはf速い機能.
私は、再帰関数議席を得ることはありません , 式星 (-1)*nはそれが出て作業することができます 5 = 120 故に , そして、電子の平均何でも先生の後ろに感嘆符を尋ねました , ありがとう
これは、階乗を表し、. 5! = 1*2*3*4*5 = 120.
KieuTraVeています(パラメータ)
{
ThanHam;
}
ウェイター, これらのパラメータ自体は、体内ではない彼の関数であることを, 例えば : パラメータは、 “int型のn”
, 彼の提供 “int型のn” この関数は彼ではありません, そのパラメータは空のまま
しかし、時には私たちは、NHEで、新しいユーザーに渡す必要があります.
渡さなぜ彼であります
あなたは簡単に可視化するために、理論と例を確認することができます.
私は聞いてみよう ” ? ザ· : B ” trongは返します > B ? ザ· : B; 先生は何ですか ?
それ以外の場合はそのようなものです. 慎重に研究ではないもの. ここしばらく参照してください。. https://cachhoc.net/2014/12/11/lap-trinh-c-bai-5-cau-truc-re-nhanh-if-else-switch-case-trong-c/#24_Toan_tu_dieu_kien_8211_If_else_rut_gon
サーHi.Em多くの感謝!
#含まれる
int型nguyento (int型のn) {
もし (N / 1 == 0&&π/ 2!= 0){
リターン 1;}
リターン 0;}
int型sohoanhao (int型のn){
int型S = 1;
のために (私は2 = int型;で>= N;私 ) {
もし (/ I N!= 0) {続ける;}
それ以外の場合 (N / I == 0) {S + = I;}
それ以外の場合 (S == N + N){リターン 1 ;}
ほかに{リターン 0;}}
}
メインint型(){
int型のn = 1;
同時に (N>0){
printfの(“入ります :”);
scanf関数(“%D”,&N);
もし (nguyento(N)== 1) {
printfの(“ nまでのように%D・ラ・グエン”,N);}
それ以外の場合 (sohoanhao(N)== 1){
printfの(“%Dが鉄/ Nに摺動するように”,N);
}
}
リターン 0;
}
プログラムはのみの導入に走ります (N) ?iにおけるKOミリアンペアベジタリアン ;脳によるAE世帯
あなたが入力すること数は素数ではありません, また、完全数ではありません.
私はint型の主を尋ねてみましょう(空隙) 様々な無効メインNTNサー
#含まれる
int snt(int型メートル)
{
int j;
もし(M<2) リターン 0;
ほかに
{
のために(j = 2;J<(m / 2 + 1);J )
もし(m%j == 0 && M!= 2) リターン 0;
}
リターン 1;
}
メインint型()
{
int型のn,で;
scanf関数(の "%D",&N);
int型A[N];
のために(I = 0;で<N;私 )
{
scanf関数(の "%D",ザ·[で]);
もし(SNT(ザ·[で])== 1) printfの(の "%D",ザ·[で]);
}
リターン 0;
}
なぜ停止するようにコーディングするのですか ???
エントリーA[で] それは間違っている.