如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第7章用函数实现模块化程序设计程序设计的艺术模块化程序设计的核心:函数设计。重要概念:①把解决问题的方案设计成一个个独立的模块。②程序通过调用模块功能来解决问题。③这些模块通过函数来实现,又称为函数模块。④每一个函数具有独立的功能,程序通过各模块之间的协调工作完成复杂的程序功能。数学函数(1)数学函数(2)程序设计中的函数用函数解决问题的要点说明:一个源程序文件由一个或多个函数组成。一个C程序由一个或多个源程序文件组成。C程序的执行从main函数开始,调用其他函数后流程回到main函数,在main函数中结束整个程序运行。所有函数都是平行的,即函数定义时是互相独立的,一个函数并不从属于另一个函数。一、C语言中的函数二、函数的定义例如,编写自定义函数abs_sum(),求两个任意整数的绝对值的和。intabs_sum(intm,intn){if(m<0)m=−m;if(n<0)n=−n;return(m+n);}或直接调用系统函数来实现:intabs_sum(intm,intn){return(abs(m)+abs(n));}注意:函数abs()的声明在头文件math.h。三、函数参数和函数的值三、函数参数和函数的值四、函数的调用函数声明(函数原型)函数声明语句的形式:[返回值类型符]函数名([形参说明表]);如:intabs_sun(intm,intn);例1:编写程序,通过调用函数intabs_sum(inta,intb),求任意两个整数的绝对值的和。五、函数中的变量①局部变量:在函数内部或某个控制块的内部定义的变量。局部变量的作用域:函数内部。作用:增强了函数模块的独立性。②全局变量:在函数外面定义的变量称为全局变量。全局变量的作用域:从该变量定义的位置开始,直到源文件结束。作用:在同一文件中,所有函数都可以引用全局变量。增强了各函数间数据的联系。局部变量和全局变量的作用域如图所示:变量的存储类型变量的存储类型指的是变量的存储属性,它说明变量占用存储空间的区域。在内存中,供用户使用的存储区由程序区、静态存储区和动态存储区3部分组成。变量的存储类型:auto、register、static和extern4种。①auto型变量存储在内存的动态存储区;②register型变量保存在寄存器中;③static型和extern变量存储在静态存储器。局部变量的存储类型默认值为auto型。全局变量的存储类型默认值为extern型。注意:①一般情况下,常用auto型、register型定义局部变量。②static型既可作为局部变量,又可作为全局变量。作为局部变量时,局部变量的值将被保留,若定义时没有赋初值,则系统会自动为其赋0值;作为全局变量时,其有效范围为它所在的源文件,其他源文件不能使用。六、数组作为函数参数数组元素作函参值传递数组名作函参地址传递七、函数的嵌套调用八、函数的递归调用求最小公倍数变量的作用范围(1)例3:设计一个函数:longfac(intn),用来计算正整数的阶乘,编写程序进行测试。算法的核心思想:对于任意正整数n,如果知道(n−1)!,则n!=n×(n−1)!。可在函数中定义一个static型变量,用来保存每一次阶乘的计算结果。变量的作用范围(2)函数的声明不需声明的两种情况(1)不需声明的两种情况(2)1.按值传递2.地址传递形参和实参值传递函数的定义对形参的说明函数定义-----判断正误主函数和其他函数库函数和自定义函数有参函数和无参函数函数的返回值(1)函数的返回值(2)函数嵌套的形式递归调用的形式(1)递归调用的形式(2)(1)具备递归出口。递归出口定义了递归的终止条件,当程序的执行使它得到满足时,递归执行过程便终止。有些问题的递归程序可能存在几个递归出口;(2)在不满足递归出口的情况下,根据所求解问题的性质,将原问题分解成若干子问题,这些子问题的结构与原问题的结构相同,但规模较原问题小。子问题的求解通过以一定的方式修改参数进行函数自身调用加以实现,然后将子问题的解组合成原问题的解。递归调用时,参数的修改最终必须保证递归出口得以满足。算法为:intFact(intn){intm;if(n==0)return(1);else{m=n*Fact(n-1);return(m);}}intFibona(intn){intm;if(n==1)return(1);elseif(n==2)return(1);else{m=Fibona(n-1)+Fibona(n-2);return(m);}}