函数1.降低程序的耦合性关联度减少重复代码。2.让程序模块化增强代码的复用性。1.函数定义函数的具体实现返回值 函数名形参表{函数体}返回值类型说明符int、char...等基本数据类型、构造数据类型、void返回函数最终结果void空类型当函数执行完不需要有任何结果返回时可以使用void类型的返回值函数名标识符遵循标识符的命名规则见名知意strcpy ——string copy动宾 ——get_max_val();print_star(); show_menu();形参表函数执行过程中需要用到的条件形式数据类型 形参名数据类型 形参名数据类型 形参名,...2.函数的调用函数名(实参表);实参表传递给函数的具体的条件值1值2值3...【注意】1.实参的个数和形参的个数必须一致2.实参和形参数据类型要一致或者要相兼容3.实参和形参名字可以相同也可以不相同4.函数不被调用则不执行调用几次则执行几次函数名(实参表); ——表达式的结果是函数的返回值类型当函数的返回值有一个明确的返回类型时必须要return如果不return系统会返回一个随机值。 void返回值类型时可以不return或者直接写return主调函数调用函数的函数称为主调函数main被调函数被调用的函数3.函数的声明声明1.当被调函数定义在了主调函数的后边编译器报“implicit declaration” 可以将该该函数在主调函数前边进行声明。2.多文件使用函数的时候需要对其声明允许被其他文件调用语法返回值 函数名形参表4.函数的调用过程函数在调用的时候存在保护现场和恢复现场的操作保护现场当函数要被调用的时候会将函数调用位置的下一条指令地址保存在栈空间恢复现场当被调函数执行完时通过出栈保护现场的地址决定cpu继续执行的位置在函数被调用的 下一条指令位置。5.函数的传参1. 函数传参过程其实是实参向形参拷贝的过程实参有实参的空间形参有形参的空间值传递。2.值传递在被调函数中无法修改主调函数中的变量。3.函数传参的顺序自右向左。6.函数的递归调用递归调用函数直接或者间接的调用自己本质循环方式【注意】1.递归要有递归的出口否则会成为死循环。2.递归调用系统开销比循环大比如栈内存。【练习】封装一个函数判断数字能否被3整除真1假0。【练习】封装一个函数判断平年闰年。【练习】封装一个函数打印出1900—2026所有闰年。【练习】封装一个函数输出某年某月的天数。【练习】封装一个函数判断是否为素数。【练习】用递归调用求123……100的和。【练习】用递归调用求阶乘。【练习】用递归调用求斐波那契数列的第n项。1 1 2 3 5 8 ……