资源描述:
《模块化程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、函数模块化程序设计C程序源程序文件1源程序文件i源程序文件n预编译命令函数1函数n说明部分执行部分C程序结构模块化程序设计–基本思想:将一个大的程序按功能分割成一些小模块,–特点:•各模块相对独立、功能单一、结构清晰、接口简单•降低了程序设计的复杂性•提高元件的可靠性•缩短开发周期•避免程序开发的重复劳动•易于维护和功能扩充–开发方法:自上向下,逐步分解,分而治之特点&C是函数式语言&一个程序由多个函数组成&必须有且只能有一个名为main的主函数&C程序的执行总是从main函数开始,在main中结束&函数不能嵌套定义,可以嵌套调用&所有函数都是平行结构–函数分类
2、•从用户角度–标准函数(库函数):由系统提供,include包含–用户自定义函数•从函数形式–无参函数–有参函数什么时候定义独立的函数–当某一功能要被反复使用时(如输入/输出)。–当某一功能相对独立时(复杂问题的划分)。函数的定义——一般格式函数返回值类型,无返回值时为:合法标识符首部,没有分号void(可省)函数类型函数名(形参类型说明表){形式参数,说明部分每个参数都语句部分有类型标识}符,逗号间函隔数体例无参函数printstar(){printf(“**********”);}intx,inty或printstar(void)例有参函数(现代风格){
3、printf(“**********”);}intmax(intx,y){intz;(×)例空函数z=x>y?x:y;dummy()return(z);{}}函数体为空例子•计算两个整数的最大值intimax(intx,inty){inttemp;if(x>y)temp=x;elsetemp=y;return(temp);}说明函数首部(三个部分)•类型标识符(可有/可无):表明函数的结果类型。如果函数名前带有类型标识符,函数体内必须对应有return语句返回一致类型的表达式值。•函数名部分:满足标识符的命名规则•参数表部分:表示形式参数,指明自变量的类型和
4、名称,特别注意,每个自变量前必须有类型标识符(不能写成:intimax(intx,y))。参数表内可以没有参数,但是括号必须出现。函数的参数只在函数体内起作用!传统风格(最好不用)函数类型函数名(形参表)形参类型说明{说明部分语句部分}例有参函数(传统风格)intmax(x,y)intx,y;{intz;z=x>y?x:y;return(z);}“形参”与“实参”•形参:定义函数时,在参数表中出现的参数;变量形式。•实参:调用函数时对应的参数;可以是表达式形式。•形参与实参的严格对应关系!对函数的调用•基本格式:函数名(参列表)•出现的位置:–以语句形式出现;–
5、以表达式形式出现(包括出现在其它函数参数中);•对库函数的调用,需要用#include包含库的名字;•调用函数中的参数,称为实在参数(实参)#include例intimax(int,int);//函数原型voidmain(void)//主函数,没有参数,没有类型子{intx1,x2,x3,x4,z;scanf(“%d,%d,%d,%d”,&x1,&x2,&x3,&x4);z=imax(imax(x1,x2),imax(x3,x4));//调用实参printf(“%d,%d,%d,%d,%d”,x1,x2,x3,x4,z);}//可以将z赋值
6、语句的右部直接取代printf中的zintimax(intx,inty)//计算最大值函数的定义{return(x>y?x:y);}形参函数原型声明•被调用的函数在后面定义,则被调用之前一定要有一个原型声明。原型声明(不要忘记分号;)有两种方式:–直接声明(见前面例子,),格式:函数类型函数名(参数类型1,参数类型2,…,);函数类型函数名(参数类型1,参数1,参数类型2,参数2,…,);–间接声明(用#include)•如被调用函数先定义后调用,则可以不声明原型。•为什么需要函数原型(先定义,后使用规范!)参数传递(续)•形参传递–实际参数传给形式参数是传值,
7、不是传地址!因此,每个实参会分配临时存储单元。函数调用完后释放。实参也不要求是变量,可以是表达式–实参与形参个数相同–实参与形参满足赋值兼容性以及内部类型转换原则;–实参不能回传值,参数传递是单向的。交换两个数(不能交换!)调用前:x:7y:11/*ch7_2.c*/#includex:7y:11main(){intx=7,y=11;调用:printf("x=%d,ty=%d",x,y);a:7b:11printf("swapped:");swap:x:7y:11swap(x,y);printf("x=%d,ty=%d",x,y
8、);a:11b:7}sw