1、2022-10-52/782022-10-53/78()yfx自变量自变量因变量因变量函数名函数名2022-10-54/782022-10-55/782022-10-56/782022-10-57/782022-10-58/78MoeCurlyLarry2022-10-59/782022-10-510/782022-10-511/782022-10-512/78返回值返回值类型类型函数名函数名标识符,标识符,说明运算规则说明运算规则参数表参数表相当于相当于运算的操作数运算的操作数返回返回运算的结果运算的结果函数出口函数出口2022-10-513/78函数体的定界符函数体的定界符参数表里的变量(
2、叫形式参数,参数表里的变量(叫形式参数,Formal Parameter)也是内部变量)也是内部变量函数体函数体2022-10-514/78函数无返回值,用函数无返回值,用void定义返回值类型定义返回值类型用用void定义参数定义参数,表示没有参数,表示没有参数return语句后无语句后无需任何表达式需任何表达式2022-10-515/78返回值类型返回值类型函数名说明函数名说明函数的功能函数的功能返回值作为函数返回值作为函数调用表达式的值调用表达式的值形参表,函形参表,函数入口数入口函数内部可以定义函数内部可以定义只能自己使用的变只能自己使用的变量,称内部变量量,称内部变量2022-10-
3、516/782022-10-517/782022-10-518/78末尾有一个分号,末尾有一个分号,声明时不要省略形声明时不要省略形参和返回值的类型参和返回值的类型2022-10-519/782022-10-520/78Why?传入负数实参传入负数实参会怎样?会怎样?2022-10-521/782022-10-522/782022-10-523/782022-10-524/782022-10-525/782022-10-526/782022-10-527/782022-10-528/782022-10-529/782022-10-530/781函数规模函数规模要小要小2函数功能函数功能要单一要
4、单一3函数接口函数接口定义定义要要清楚清楚入口参数有效性检查入口参数有效性检查敏感操作前的检查敏感操作前的检查调用成功与否的检查调用成功与否的检查2022-10-531/78main()a();a 函数函数b();return;b函数函数return;2022-10-532/782022-10-533/782022-10-534/782022-10-535/782022-10-536/782022-10-537/78n更大些更大些怎么办?怎么办?2022-10-538/782022-10-539/78AB2022-10-540/78AB2022-10-541/782022-10-542/782
5、022-10-543/78函数直接或间接调用函数直接或间接调用自己,称为递归调用自己,称为递归调用(Recursive Call)2022-10-544/78基线情况基线情况(base case)一般情况一般情况(general case)无需考虑无需考虑n0了了2022-10-545/782022-10-546/78n!=n(n-1)!(n-1)!=(n-1)(n-2)!(n-2)!.(n-3)!5!:4!=43!3!=32!2!=21!1!=1回推过程回推过程递推过程递推过程fact(5)=5*fact(4)=120 fact(4)=4*fact(3)=24 fact(3)=3*fact(
6、2)=6 fact(2)=2*fact(1)=2 fact(1)=12022-10-547/782022-10-548/78110)2()1(10)(nnnnfibnfibnfib2022-10-549/782022-10-550/782022-10-551/782022-10-552/782022-10-553/78全局变量使函数间的数据交换更容易,更高效,全局变量使函数间的数据交换更容易,更高效,但建议尽量少用,因为谁都可改写它,所以很难但建议尽量少用,因为谁都可改写它,所以很难确定是谁改写了它确定是谁改写了它全局变量全局变量2022-10-554/782022-10-555/78静态存储
7、区中的变量:静态存储区中的变量:与程序与程序“共存亡共存亡”动态存储区中的变量:动态存储区中的变量:与程序块与程序块“共存亡共存亡”寄存器中的变量:寄存器中的变量:同动态存储区同动态存储区2022-10-556/782022-10-557/78静态变量仅初始静态变量仅初始化一次,变量的化一次,变量的值可保存到下次值可保存到下次进入函数,使函进入函数,使函数具有记忆功能数具有记忆功能2022-10-558/78静态局部变量和静态局部变量和全局变量自动初全局变量自动初始化为始化为0 0值。自值。自动变量不初始化动变量不初始化时,值是随机值时,值是随机值2022-10-559/782022-10-5
8、60/78全局变量全局变量静态外部变量静态外部变量 (只限本文件使用)(只限本文件使用)外部变量外部变量(非静态外部变量允许其他文件引用(非静态外部变量允许其他文件引用)局部变量局部变量 自动变量自动变量,(离开函数,值就消失),(离开函数,值就消失)寄存器变量寄存器变量(离开函数,值就消失)(离开函数,值就消失)定义点之前定义点之前使用,需用使用,需用extern声明声明静态局部变量静态局部变量 (离开函数,值仍保留)(离开函数,值仍保留)动态局部变量动态局部变量2022-10-561/782022-10-562/782022-10-563/782022-10-564/782022-10-5
9、65/78为程序运行为程序运行所做的准备所做的准备工作工作在退出前要做的在退出前要做的事情,如打印结事情,如打印结果、资源释放等果、资源释放等自底向上自底向上自顶向下的模块化程序设计自顶向下的模块化程序设计2022-10-566/782022-10-567/782022-10-568/78处理用户输入,判断是否有输入错误,处理用户输入,判断是否有输入错误,是否在合法的数值范围内是否在合法的数值范围内 2022-10-569/782022-10-570/782022-10-571/782022-10-572/782022-10-573/782022-10-574/782022-10-575/782022-10-576/782022-10-577/782022-10-578/78