编程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;
}

结果:

经验教训通过这个仓库中了解到!
NEU认真学习和努力工作,你会看到:
没有仓库
驰奔这么久康元
一圈巨大的刀VA边
确定在嫩江林

特殊碳储量超过!
NEU认真学习和努力工作,你会看到:
没有仓库
驰奔这么久康元
一圈巨大的刀VA边
确定在嫩江林

例 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类型. 火腿vechu函数没有返回值的数据类型应该被声明为void. 在主函数我们 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.! = 1.2.3…ñ

// 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 时间找到最多的, b和采取了一些发现进行比较到c发现数量最多.

注意: 该功能后的函数声明称它被宣布之前,但功能调用函数声明之前未申报. 即在上面的例子,如果我们在以后的水平建立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, ç 13
在数量最多, B, Ç, 的 16

工作时,我们应该在宣布这样的功能,并定义如下. 因此,我们将避免一些错误,当我们要使用在每个功能.

我已经知道该功能可以相互调用和功能也可以拨打自己, 我们使用递归函数.

例 6: 递归函数

我知道式N! = 1.2.3…ñ. 但是人们也可以写ñ! = (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 +….+ñ.
  2. 写检查功能的素数, 完美的数字.
  3. 输入n数和公告应素数的序列, 完美的数字或不.