为了使程序大而不繁,简单明了,程序设计者要根据软件的总体要求,把相同的功能或相似的操作归纳成模块的形式,并设计成函数,以实现程序设计的结构化。分解的结果像一颗倒立的大树。
函数定义的一般格式
类型标识符 函数名([参数表列])
{
[声明语句部分]
执行语句部分
}
调用后续声明的函数时,必须在调用之前先进行声明
如果不需要从被调函数带回返回值,可以不要return语句。还可以用不带表达式的return作为函数和逻辑结尾,这时候return的作用是将控制权交给调用函数,而不是返回一个值。
函数的定义与声明例:
1.先定义,后使用
2.main函数在前,定义在后,须在main函数中调用调用前用下面语句进行说明
类型说明符 函数名(类型说明符 形参变量1,类型说明符 形参变量2,....)
函数的参数与返回值
函数的参数分为实参和形参,作用是实现数据的传送。
实参:主调函数传递来的参数为实际参数简称实参,进入被调函数后,实参变量也不能使用在整个函数体内都可以使用,离开该函数则不能使用。
形参:函数名后的参数称为形式参数简称形参,在整个函数体内都可以使用,离开该函数则不能使用。
实参和形参之间的关系:
1.实参的个数、类型应该和形参的个数和类型一致。调用函数时,系统给形参分配储存单元,并把实参的数值传递给形参。
2.实参和形参分别属于主调函数和被调函数,有不同的单元,在函数调用时形参发生变化,不会影响到实参
3.实参和形参是单向值传递,只有实参传递参数给形参,形参不回传参数给实参。
4.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
函数调用方式
C语言中函数的调用一般形式为:函数名([实际参数列表])
1.函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例:c=add(a+b);
2.函数语句:函数调用的一般形式加上分号即构成函数语句。例如: printf("%d",a)
3.函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实 参进行传送, 因此要求该函数必须是有返回值的 。 例如:d=add(a,add(b,c));
调用说明(函数的调用时应注意)
1.函数名称必须与具有该功能的自定义函数名称完全一致
2.实参在数量、类型、顺序上应严格和形参一一匹配
3.函数调用也是一种表达式,其值是函数的返回值
4.被调函数可以是自定义函数,也可以是系统函数,还可以调用自身
5.被调函数中还可以调用函数 6.调用后续声明的函数时,必须在调用之前先进行声明 7.函数调用时,被调函数可以是库函数或者用户自定义的函数
比如,求两个整数的最大公约数和最小公倍数:
局部变量和全局变量
局部变量也称为内部变量
在函数内作定义说明的。
随函数的调用而生成,随函数调用结束而释放
作用域仅限于定义它的函数内,离开该函数后再使用这种变量是非法的。
全局变量也称为外部变量
它是在函数外部定义的变量。
它不属于哪一个函数,它属于一个源程序文件。
其作用域是从定义变量的位置开始到所在源程序文件结束。
在函数中使用全局变量,一般应作全局变量说明。只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。但在函数之前定义的全局变量,在该函数内使用可不再加以说明。
变量的储存类型
从变量值存在的生存期来分,可以分为静态存储方式和动态存储方式。
静态存储方式:是指在程序运行期间分配固定的存储空间的方式。
动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。
C语言中,具体的存储类别有自动、寄存器、静态及外部四种
自动存储类型(auto):具有动态性,随函数调用而生成,随调用结束而释放;局部变量默认
定义格式如下:auto 数据类型 变量名; 关键字auto可省略
寄存器存储类型(register):大量重复调用时,提高执行效率;仅限于定义它的函数
定义格式如下:register 数据类型 变量名;
外部存储类型(extern):多个程序文件之间进行变量调用;不是变量定义,扩展变量作用域
定义格式如下:extern数据类型 变量名;
静态存储类型(static):存储在固定的内存单元,直到程序运行结束才释放
例如:static double x,y;
注意:
局部变量默认为auto型
register型变量个数受限,且不能为long、double、float型
局部static变量具有全局寿命和局部可观性,具有可继承性
extern不是变量定义,可扩展外部变量作用域
常用函数介绍:
终端与环境变量
getopt()分析命令参数
ttyname()获取终端机名称
日期时间函数<time.h>
time()获取当前时间
ctime()获取字符串格式的日期时间
gmtime()获取当前日期和时间
difftime()计算时间差
字符串处理<string.h>
index()查找字符串中第一个字符出现的位置
strcat()拼接字符串
strcmp()比较字符串
strcpy()复制字符串
数学函数<math.h>
abs()绝对值
cos()余弦
ceil()不小于参数的最小整数
exp()指数
sqrt()开平方
数据结构与算法
crypt()将数据或密码加密
bsearch()二元搜索
lfind()线性搜索
lsearch()线性搜索
rand()产生随机数
srand()设置随机数种子