iOS开发分分钟搞定C语言——函数

来源:互联网 发布:淘宝怎么改默认地址 编辑:程序博客网 时间:2024/05/16 04:39

一、什么是函数?
C语言源程序是由函数组成的。虽然在前面各章的程序中大都只有一个主函数main(),但实用程序 往往由多个函数组成。函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能。

这里写图片描述

二、函数的分类
在C语言中可从不同的角度对函数分类。
(1)从函数定义的角度看,函数可分为库函数和用户定义函数两种。 stdio.h stdlib.h.
(2)库函数:由C系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。在前面各章的例题中反复用到printf、scanf、getchar、putchar、gets、puts、strcat等函数均属此类。
(3)用户定义函数:由用户按需要写的函数。对于用户自定义函数,不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。
(4)C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。
(5)从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。
(6)C语言提供了丰富的库函数,这些库函数又可从功能角度作以下分类。如下:
· 字符类型分类函数:用于对字符按ASCII码分类:字母,数字,控制字符,分隔符,大小 写字母等。
· 转换函数:用于字符或字符串的转换;在字符量和各类数字量(整型,实型等)之间进行 转换;在大、小写之间进行转换。
· 目录路径函数:用于文件目录和路径操作。
· 诊断函数:用于内部错误检测。
· 图形函数:用于屏幕管理和各种图形功能。
· 输入输出函数:用于完成输入输出功能。
· 接口函数:用于与DOS,BIOS和硬件的接口。
· 字符串函数:用于字符串操作和处理。
· 内存管理函数:用于内存管理。
· 数学函数:用于数学函数计算。
· 日期和时间函数:用于日期,时间转换操作。
· 进程控制函数:用于进程管理和控制。
· 其它函数:用于其它各种功能。
· 以上各类函数不仅数量多,而且有的还需要硬件知识才会使用,因此 要想全部掌握则需要一个较长的学习过程。应首先掌握一些最基·本、最常用的函数,再逐步深入。

还应该指出的是,在C语言中,所有的函数定义,包括主函数main在内,都是平行的。在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。函数还可以自己调用自己,称为递归调用。

main 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。因此,C程序的执行总是从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程 序。一个C源程序必须有,也只能有一个主函数main。

在iOS开发中,函数的调用在混合编程中是很常用的,但在普通编程的开发中是用得很少的。

三、函数的定义
用户定义函数:由用户自己写的函数。对于用户自定义函数,不仅要在程序中定义函数本身,而且在主程序中需声明,然后才能使用。
书写格式为:

返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…)
{
函数体
}

定义函数的步骤-三步走
第一步:函数名:函数叫什么名字
第二步:函数体:函数是干啥的,里面包含了什么代码
第三步:返回值类型: 函数执行完毕返回什么和调用者

1.无参无返回值函数定义格式
void 函数名()
{
函数体
}

2.无参有返回值函数定义
返回值类型 函数名()
{
函数体
return 0;
}

3.有参无返回值函数定义
void 函数名(参数类型 形式参数1,参数类型 形式参数2,…)
{
函数体
}

4.有参有返回值函数定义
返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…)
{
函数体
return 0;
}

函数定义注意
函数不能嵌套定义。

四、形式参数和实际参数
(1)形式参数:在定义函数时,函数名后面的小括号()中定义的变量称为形式参数,简称形参。
(2)实际参数:在调用函数时传入的值称为实际参数,简称实参。
(3)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。

形式参数、实际参数·注意点
(1)调用函数时传递的实参个数必须和函数的形参个数必须保持一致。
(3)当使用基本数据类型(char、int、float等)作为实参时,实参和。形参之间只是值传递,修改形参的值并不影响到实参函数可以没有形参。
(3)形参实参类型不一致, 会自动转换为形参类型。

五、return使用及注意事项
(1)一个函数内部可以多次使用return语句,使用了return语句后,函数就会马上停止执行,return语句后面的代码就不再被执行.
(2)函数返回值的类型和return实际返回的值类型应保持一致。如果两者不一致,则以返回值类型为准,自动进行类型转换
(3)return后面不可写任何定义

六、函数的弱语法
(1)如果没有写返回值类型,默认是int
(2)如果写了返回值,可以不返回
(3)调用一个没有定义过的函数

七、函数的声明
在C语言中,函数的定义顺序是有讲究的:默认情况下,只有后面定义的函数才可以调用前面定义过的函数。

如果想把函数的定义写在main函数后面,而且main函数能正常调用这些函数,那就必须在main函数的前面进行函数的声明

函数的声明格式:

返回值类型 被调函数名( 类型 形参, 类型 形参… );
返回值类型 被调函数名( 类型, 类型…);

八、函数的调用
函数调用的一般形式为
函数名(实际参数表);
对无参函数调用时则无实际参数表。
实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。
多个参数各实参之间用逗号分隔。

函数表达式
函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数 是有返回值的。

函数的嵌套调用
C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。

九、递归函数
一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。说得直白点,就是自己搞自己。

递归函数构成条件:
·自己调用自己
·存在一个条件能够让递归结束
·问题的规模能够缩小
注意:递归在一般情况此循环能做的事情,递归都可以做到,但是用递归要注意,要有一个明确的条件,否则会进入死循环模式。

在学习递归函数的时候,很多像我一样的人,会老纠结,稍不注意就自己搞自己,跳不出来了,造成了死循环,但是在iOS开发中很少用到递归这样的函数的,所以作为iOS开发者没有太多必要死纠结这块,只要掌握基础,面试是没有任何问题的。

用递归法求N的阶乘

int factorial(int n){
int result = 0; //定义变量用于存放阶乘的结果
if (n==1) { //如果n=1的时候,1!的结果还是1
result = 1;
}else{
result = factorial(n-1)*n; //如果不是1,阶乘=(n-1)!*n;
}
return result;
}

这里写图片描述

0 0
原创粉丝点击