模块化程序设计.课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《模块化程序设计.课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模块化 程序设计 课件
- 资源描述:
-
1、模块化程序设计模块化程序设计u基本思想:将一个大的程序按功能分割成一些小模块基本思想:将一个大的程序按功能分割成一些小模块u特点:特点:各模块相对独立、功能单一、结构清晰、接口简单各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性控制了程序设计的复杂性提高元件的可靠性提高元件的可靠性缩短开发周期缩短开发周期避免程序开发的重复劳动避免程序开发的重复劳动易于维护和功能扩充易于维护和功能扩充u开发方法开发方法: 自上向下自上向下,逐步分解,分而治之逐步分解,分而治之C是模块化程序设计语言是模块化程序设计语言源程序文件1预编译命令说明部分执行部分函数1函数n源程序文件i源程序文件nC程
2、序C程序结构u C C是是函数式函数式语言语言(c7_1.cc7_1.c)u 必须有且只能有一个名为必须有且只能有一个名为mainmain的主函数的主函数u C C程序的执行总是程序的执行总是从从mainmain函数开始,在函数开始,在mainmain中结束中结束u 函数函数不能嵌套定义不能嵌套定义, ,可以可以嵌套嵌套调用调用函数分类函数分类u从用户角度从用户角度标准函数(库函数):由系统提供标准函数(库函数):由系统提供用户自定义函数用户自定义函数u从函数形式从函数形式无参函数无参函数有参函数有参函数使用使用库函数库函数应注意:应注意:1、函数功能、函数功能2、函数参数的数目和顺序,及各参
3、数意义和类型、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型、函数返回值意义和类型4、需要使用的包含文件、需要使用的包含文件例例 无参函数无参函数 void printstar( ) printf(“*n”); 或或 void printstar(void ) printf(“*n”); 例例 有参函数(现代风格)有参函数(现代风格) int max(int x, y) int z; z=xy?x:y; return(z); 例例 空函数空函数dummy( ) 函数体为空函数体为空一般格式一般格式合法标识符函数返回值类型缺省int型无返回值void函数体函数类型函数类型 函数
4、名函数名(形参类型说明表形参类型说明表)说明部分说明部分语句部分语句部分u现代风格:现代风格:例例 有参函数(现代风格)有参函数(现代风格) int max(int x, int y) int z; z=xy?x:y; return(z); 函数类型函数类型 函数名(形参表)函数名(形参表)形参类型说明形参类型说明 说明部分说明部分 语句部分语句部分u传统风格传统风格: :例例 有参函数(传统风格)有参函数(传统风格) int max(x,y) int x,y; int z; z=xy?x:y; return(z); u说明:说明:实参必须有确定的值实参必须有确定的值形参必须指定类型形参必须指
5、定类型形参与实参形参与实参类型一致,个数相同类型一致,个数相同若形参与实参类型不一致,自动按形参类型转换若形参与实参类型不一致,自动按形参类型转换 函数调用转换函数调用转换参数传递方式为参数传递方式为值传递值传递方式:函数调用时方式:函数调用时,为形参分为形参分配单元配单元,并将实参的值并将实参的值复制复制到形参中;调用结束,形到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值。特参单元被释放,实参单元仍保留并维持原值。特点:形参与实参占用点:形参与实参占用不同不同的内存单元;的内存单元;单向单向传递传递8.3.1 形式参数与实际参数形式参数与实际参数u形式参数:定义函数时函数名后面
6、括号中的变量名形式参数:定义函数时函数名后面括号中的变量名u实际参数:调用函数时函数名后面括号中的表达式实际参数:调用函数时函数名后面括号中的表达式 c=max(a,b); (main 函数函数) (max 函数函数)max(int x,int y) int z; z=xy?x:y; return(z); 例例 比较两个数并输出大者比较两个数并输出大者#include (c7_2.c)void main(void) int a,b,c; int max(int x,int y); scanf(%d,%d,&a,&b); c=max(a,b); printf(Max is %d,c);int m
7、ax(int x,int y) int z; z=xy?x:y; return(z);形参形参实参实参例例 计算计算x的立方的立方#include float cube(float x) return(x*x*x);main() float a, product; printf(Please input value of a:); scanf(%f,&a); product=cube(a); printf(Cube of %.4f is %.4fn,a,product);x xa aproductproduct1.21.21.21.21.7281.7287 71111x:x:y:y:调用前:调
8、用前:调用结束:调用结束:7 71111x:x:y:y:例例 交换两个数交换两个数/*c7_3.c*/#include void main(void) int x=7,y=11; printf(x=%d,ty=%dn,x,y); printf(swapped:n); swap(x,y); printf(x=%d,ty=%dn,x,y);void swap(int a,int b) int temp; temp=a; a=b; b=temp;调用:调用:7 71111a:a:b:b:7 71111x:x:y:y:swap:swap:7 71111x:x:y:y:11117 7a:a:b:b:te
9、mptemp运行结果:运行结果:x=7, y=11 swapped: x=7, y=11值传递方式,单向传递值传递方式,单向传递u地址传递地址传递方式:函数调用时,将数据的方式:函数调用时,将数据的存储地址存储地址作为参数作为参数传递给形参传递给形参特点:特点: 形参与实参占用形参与实参占用同样同样的存储单元的存储单元 “双向双向”传递传递 实参和形参必须是实参和形参必须是地址地址常量或变量常量或变量/*ch9_3.c*/swap(p1,p2)int *p1,*p2; int p; p=*p1; *p1=*p2; *p2=p;main() int a,b; scanf(%d,%d,&a,&b)
10、; printf(“a=%d,b=%dn”,a,b); printf(“swapped:n”); swap(&a,&b); printf(”a=%d,b=%dn,a,b);例例 交换两个数交换两个数a59b调前:调前:a59b调调swap:p1&a&bp2a95b交换:交换:p1&a&bp2a95b返回:返回:8.3.2 函数的函数的返回值返回值返回语句返回语句u形式:形式: return(表达式表达式);或或 return 表达式表达式;或或 return;u功能:使程序控制从被调用函数返回到调用函数中,功能:使程序控制从被调用函数返回到调用函数中,同时把返同时把返回回值带给调用函数值带给调
11、用函数u说明:说明:函数中可有多个函数中可有多个return语句语句若无若无return语句,遇语句,遇 时,自动返回调用函数时,自动返回调用函数若若函数类型函数类型与与return语句中表达式值的类型不一语句中表达式值的类型不一致,按前者为准,自动转换致,按前者为准,自动转换-函数调用转换函数调用转换void型函数型函数用来明确表明函数不带回任何值用来明确表明函数不带回任何值例例 无返回值函数无返回值函数void swap(int x,int y ) int temp; temp=x; x=y; y=temp;例例8-3 函数返回值类型自动转换为函数类型函数返回值类型自动转换为函数类型#in
12、cludevoid main(void) float a,b; int c; int max(float x,float y); scanf(%f,%f,&a,&b); c=max(a,b); printf(Max is %dn,c);int max(float x, float y) float z; z=xy?x:y; return(z);运行结果:运行结果:1.5, 4.7Max is 4printstar() printf(*);main() int a; a=printstar(); printf(%d,a);例例 函数带回不确定值函数带回不确定值输出:输出:*10void prin
13、tstar() printf(*);main() int a; a=printstar(); printf(%d,a);编译错误!编译错误!8.4.1 函数调用的一般形式函数调用的一般形式u一般形式一般形式 : 函数名函数名(实参表实参表);u说明:说明:实参与形参实参与形参个数相等,类型一致,按顺序个数相等,类型一致,按顺序一一对应一一对应#include main() int i=2,p; int f(int a,int b); p=f(i,+i); printf(%d,p);int f(int a,int b) int c; if(ab) c=1; else if(a=b) c=0; e
14、lse c=-1; return(c);例例8-4 参数求值顺序(参数求值顺序(c7_4.c和和c7-5.c)#include main() int i=2,p; int f(int a,int b); p=f(i, i+); printf(%d,p);int f(int a,int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c);运行结果:运行结果:0运行结果:运行结果:1 (在在TC中中)8.4.2 函数调用的方式函数调用的方式u 函数语句:函数语句:例例printstar();printf(“Hello,World
15、!n”);u 函数表达式:函数表达式:例例m=max(a,b)*2;u 函数参数:函数参数:例例printf(“%d”,max(a,b);m=max(a,max(b,c);8.4.3 对被调用函数的声明和函数原型对被调用函数的声明和函数原型u对被调用函数要求:对被调用函数要求:必须是必须是已存在已存在的函数的函数库函数库函数: #include 用户自定义函数用户自定义函数: 主调函数对被调函数作主调函数对被调函数作函数函数声明声明u函数声明函数声明一般形式:一般形式:函数类型函数类型 函数名函数名(形参类型形参类型1形参名形参名1,. );或:或:函数类型函数类型 函数名函数名();(不提倡
16、使用)(不提倡使用)作用:告诉编译系统作用:告诉编译系统函数类型、参数个数及类型,以便检验函数类型、参数个数及类型,以便检验函数定义与函数声明不同函数定义与函数声明不同函数声明位置:函数声明位置:程序的数据说明部分(函数内或外)程序的数据说明部分(函数内或外)下列情况下,可不作函数声明下列情况下,可不作函数声明 若函数返值是若函数返值是char或或int型型,系统自动按,系统自动按int型处理型处理 被调用函数定义出现在主调函数之前被调用函数定义出现在主调函数之前 在所有的函数定义之前,在函数的外部已做了函数声明在所有的函数定义之前,在函数的外部已做了函数声明有些系统有些系统(如如Borlan
17、d C+)要求函数声明指出函数返回值类型和要求函数声明指出函数返回值类型和形参类型,并且对形参类型,并且对void 和和 int 型函数也要进行函数声明型函数也要进行函数声明float add(float x,float y)float z;z=x+y;return (z);void main (void)float a,b,c;scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“%f”,c);char letter(char ,char);float f(float,float);int i(float,float);void main(void)char let
18、ter (char c1,char c2)float f(float x,float y)int i(flaot j,float k)#include float add(float x, float y) float z; z=x+y; return(z);main() float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(sum is %f,c);被调函数出现在主调函数被调函数出现在主调函数之前,不必函数声明之前,不必函数声明/*c7_7.c*/#include main() int a,b; int c; scanf(%d,%d,&a,&
19、b); c=max(a,b); printf(Max is %dn,c);int max(int x,int y) int z; z=xy?x:y; return(z);int型函数可型函数可不作函数声明不作函数声明 Borland C+不行不行/*c7_6.c*/#include main() float add(float x,float y); /*函数声明函数声明*/ float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(sum is %f,c);float add(float x, float y) float z; z=x+y; r
20、eturn(z);例例8.5 函数声明举例函数声明举例#include long sum(int a, int b);long factorial(int n);main() int n1,n2; long a; scanf(%d,%d,&n1,&n2); a=sum(n1,n2); printf(a=%1d,a);long sum(int a,int b) long c1,c2; c1=factorial(a); c2=factorial(b); return(c1+c2);long factorial(int n) long rtn=1; int i; for(i=1;i=n;i+) rt
21、n*=i; return(rtn);long sum(int a,int b);long factorial(int n);文件包含编译预处理命令文件包含编译预处理命令函数声明函数声明函数定义函数定义函数调用函数调用函数调用函数调用函数返回值函数返回值形参形参实参实参8.5 函数的嵌套调用函数的嵌套调用嵌套调用嵌套调用C规定:函数规定:函数定义不可嵌套定义不可嵌套,但可以,但可以嵌套调用嵌套调用函数函数main( )调用函数调用函数a结束结束a函数函数b函数函数调用函数调用函数b例例 求三个数中最大数和最小数的差值求三个数中最大数和最小数的差值#include void main() int
22、a,b,c,d; int dif(int x,int y,int z); scanf(%d%d%d,&a,&b,&c); d=dif(a,b,c); printf(Max-Min=%dn,d); int dif(int x,int y,int z)int min(int x,int y,int z); int max(int x,int y,int z); return max(x,y,z)-min(x,y,z); int max(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); int min(int x,int y,int z) int
23、 r; r=xy?x:y; return(rz?r:z); main( )调用函数调用函数dif输出输出结束结束dif函数函数max函数函数调用函数调用函数max调用函数调用函数minmin函数函数例例8.6 用弦截法求方程根用弦截法求方程根08016523xxxxyf(x)0 x1x2xf(x1)f(x2)()()()(121221xfxfxfxxfxx求求f(x1)与与f(x2)连线与连线与x轴的交点轴的交点x输入输入x1,x2,求求f(x1),f(x2)直到直到f(x1)与与f(x2)异号异号y=f(x),y1=f(x1)y与与y1同号同号真真假假x1=xy1=yx2=x直到直到|y|
24、root=x 输出输出 rootroot函数函数main( )调用函数调用函数root输出根输出根 x结束结束root函数函数xpoint函数函数调用函数调用函数xpoint调用函数调用函数ff函数函数#include #include float f(float x) float y; y=(x-5.0)*x+16.0)*x-80.0; return(y);float xpoint(float x1,float x2) float y; y=(x1*f(x2)-x2*f(x1)/(f(x2)-f(x1); return(y);float root(float x1,float x2) flo
25、at x,y,y1; y1=f(x1); do x=xpoint(x1,x2); y=f(x); if(y*y10) y1=y; x1=x; else x2=x; while(fabs(y)=0.0001); return(x);main() float x1,x2,f1,f2,x; do printf(Input x1,x2:n); scanf(%f,%f,&x1,&x2); f1=f(x1); f2=f(x2); while(f1*f2=0); x=root(x1,x2); printf(A root of equation is %8.4f,x);运行情况:运行情况:Input x1,x
展开阅读全文