プログラミング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;
}

この時点で、関数の基本的な理解を持っている, しかし機能について言って、より多くのものがあります, 特に、関数配列とポインタについて. 私たちは、配列とポインタと次のポストでそれらを見つけるしていきます.

エクササイズ

  1. S = 1 + 2 +を合計する機能を書きます….+N.
  2. チェック機能の素数を書きます, 完全数.
  3. n個の数字と発表すべき素数のシーケンスを入力します。, 完全数か.