11.9
系统函数
是操作系统以函数的形式提供的一些功能,系统函数不能算是真正的函数,这些功能包括:
内存管理,文件IO,信号处理,文件管理,进程管理,进程通信,线程管理,线程同步,网络通信
第三方库函数
一些开源或者收费的大三方代码
glog 日志记录
MD5 验证
自定义函数
为了更方便地管理代码,减少代码沉余,把代码封装成函数的形式使用
函数声明:
函数声明的目的是为了告诉其他代码该函数的调用格式,返回值类型 函数名(参数类型 参数名1,参数类型 参数名2,...);
1.C语言中,函数名一般全部小写,用下划线分隔
2.如果该函数不需要参数,建议参数写void,不要空着 (int func(void))
3.如果函数定义时,不写return语句也会有返回值,但是返回值是一个垃圾值
4.如果函数不需要返回值,返回值类型也要写void,否则什么都不写,会默认为int类型
隐式声明:
再调用函数之前,该函数既没有声明也没有定义,那么编译器会对该函数进行隐式声明,会猜测函数的格式,如果猜测的结果跟后面的函数定义格式一致,也可以调用成功
参数会根据实参猜测,返回值会猜测为int类型
函数定义: (函数真正的实现代码)
返回值类型 函数名(参数类型 参数名1,参数类型 参数名2,...)
{
函数体;
return val;
}
注意,函数声明,定义中,参数列表中的变量叫做形参变量
注意:如果函数定义在函数调用之前,那么函数声明可以省略
注意:建议一个函数最多不要超过50行
函数调用:
函数名(实参);
注意:调用函数后,需要立即接受或者显示返回值,否则后此次调用的结果在后面就没了
函数传参:
1.函数的形参只属于所在的函数,出了该函数就不能再使用了
2.实参与形参之间式以赋值的形式进行数据传递的(单向值传递)
3.return 其实是把返回值放到一个调用者和函数之间公共的区域内,如果不写return语句,该区域就是一个垃圾数据,一样可以被调用者读取到
4.当数组作为函数参数时,长度会丢失,因此需要额外传递一个长度参数
5.数组的传递是“址传递”,此时函数与调用者可以共享数组
练习1:
实现一个函数,找出数组的最大值
练习2:
实现一个函数,给数组排序
练习3
实现一个函数,查找数组中是否存在某个值,返回该数据在数组中的小标
设计函数的标准:
1.一个函数最好只解决一个问题,这样可以降低出错率,提高可读性
2.最好尽量不依赖其他自定义函数(耦合度)
3.函数的数据由调用者提供,结果返回给调用者(通用性,不要把函数写死)
4.对函数调用者提供的非法参数进行考虑处理,可以通过返回值告诉调用者,以及在注释中说明可能出现的非法参数情况(健壮性)
作业1:实现一个函数,判断整数是否是素数,调用它显示出100~10000之间的所有素数
作业2;输入两个日期,计算出两个日期之间间隔了多少天
作业3:实现一个函数,判断整数是否是回文数,调用它显示1亿-10亿之间的所有回文数
作业4:计算出100的阶乘
作业5:输入一个整数,显示出它的补码
作业6:计算出100的阶乘结果末尾开始连续有多少个0;