黑马程序员----C语言学习笔记之函数

来源:互联网 发布:淘宝买家可以延长收货 编辑:程序博客网 时间:2024/05/16 18:56
------Java培训、Android培训、iOS培训、.Net培训--------
C语言之函数
1.函数的概述

C源程序是由函数组成的。可以说C程序的全部工作都是由各种各样的函数完成的,所以也把C语言称为函数式语言。


2.函数的分类
2.1从函数定义的角度看,函数可分为库函数和用户自定义函数两种
库函数:由C系统提供,用户无须定义,也不在程序中做类型说明,只需要在程序前包含有该函数原型的头文件即可直接调用。如:printf,scanf等
用户自定义函数:由用户按需要编写的函数,对于用户自定义函数,不仅要在程序中定义函数本身,而且在主调用函数模块中还必须对该被调用函数进行类型说明,然后才能使用。


2.2 从语言的函数兼有其他语言中的函数和过程两种功能这个角度看,又可把函数分为有返回值函数和无返回值函数两种

有返回值函数:此类函数被调用执行完成后将向调用者返回一个执行结果
无返回值函数:无须向调用者返回执行结果


2.3 从主调函数和被调用函数之间数据传送的角度看又可分为无参函数和有参函数
无参函数:函数在定义,说明和调用时都不带参数
有参函数:函数在定义,说明和调用时都带参数


3.函数的基本格式:
返回值类型 函数名称(参数){
函数体;
}


4.函数的声明
4.1  在主调函数中,调用某函数之前应对该被调函数进行说明(声明),这与使用变量之前先要惊醒变量声明一样。


4.2 声明形式:
    返回类型 函数名(参数列表。。);


4.3 例如

void show();//在调用前先声明,否则主函数会无法识别show函数int main(int argc, const char * argv[]){    show();    return 0;}void show(){printf("A");}


4.4函数的使用流程
声明------> 定义 ----------> 调用


函数声明的作用:
告诉编译器这个函数已经存在了,告诉编译器被调函数返回的数据类型,以便在主调函数中处理被调函数返回的数据。


4.5 注意事项
a.函数声明的返回值类型是整型,则不用声明,会有警告,但不会有错误
b.如果被调函数写在主调函数之前,此时可以不用声明


5. 函数的调用


<span style="white-space:pre"></span>int max(int a, int b){ return a > b ? a : b; } int main(){ //5.1 实参是整型变量 int m = max(23,22); //5.2 实参是变量 int a = 4, b =6; m = max(a, b); //5.3 实参是一个表达式 m = max(a + 4, b + 5); // 5.4 函数调用时的注意事项 5.4.1 函数表达式 如:m = max(34, 10) + 10;//前提是函数有返回值 5.4.2 函数语句。函数调用作为另外一个函数的实参 如:求三个数的最大值 m = max(mac(1, 2), 3 );    5.4.3 函数名不能与变量名重名 }




6.递归函数概述及构成条件
6.1 一个函数在它的函数体内调用自身,就称为递归函数。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用自身,每调用依次就进入新的一层。
必须在函数中添加终止函数递归调用的条件,这样可以层层返回。


6.2 注意事项
6.2.1 主调函数就是被调函数
6.2.2 在地柜函数中应该存在能够让递归结束的条件

6.3 构成递归的条件:
6.3.1   存在自己调用自己
6.3.2 存在一个条件,能够让递归结束(否则,是死循环)
6.3.3 能够找到一个规律,让要解决的问题的规模缩小



6.5 递归举例


6.5.1 计算5的阶乘
分析:5! = 4! * 5;
4! = 3! * 4;
.....
n! = (n - 1)! * n;


<span style="white-space:pre"></span>int  calc(int a){    if (a == 0) {        return 1;    }    return a * calc(a -1);}int main(int argc, const char * argv[]){    int a = 5;    printf("5! = %d", calc(a));    return 0;}




6.5.2 实现x的y次方


分析:x^y = x * (x^(y-1));


<span style="white-space:pre"></span>int cifang(int x, int y){    if(y == 1){        return x;    }        return x * cifang(x, y - 1);}int main(int argc, const char * argv[]){    printf("5^2 = %d", cifang(5, 2));    return 0;}







0 0
原创粉丝点击