模块化程序设计.ppt
《模块化程序设计.ppt》由会员分享,可在线阅读,更多相关《模块化程序设计.ppt(69页珍藏版)》请在课桌文档上搜索。
1、2023/3/28,C语言程序设计,1,第三章 模块化程序设计,3.1 模块化程序设计思想3.2 函数的定义3.3 函数调用3.4 函数的原型与声明3.5 函数嵌套与递归,3.6 库函数的使用3.7 变量的作用域与存储类型3.8 指针与函数3.9 典型例题,2023/3/28,C语言程序设计,2,函数是C程序的基本单位,每一个函数模块用来实现一个特定的功能。,教学要求1理解函数的功能。2掌握函数定义的一般形式。3掌握函数的形参与实参的对应关系、参数传递方法及函数返回值的概念。4掌握函数调用的几种形式。5掌握函数嵌套调用的一般过程。6.掌握指针的定义、使用以及指针作为函数的参数。7.掌握返回指针
2、值的函数。8掌握局部变量与全局变量的概念及它们的使用特点。,函数:main(),getchar(),putchar(),printf(),scanf(),exp(),fabs(),sqrt(),gets(),puts(),strcpy(),strcmp(),strcat(),strupr(),strlwr(),strlen()等。,3.1 模块化程序设计的思想,例:从键盘中输入两个数,分别求出这两个数的最小公倍数和最大公约数。,考虑:在主函数中完成数据x,y的输入和结果的输出;求解最小公倍数和求解最大公约数分别有两个自定义函数实现。,2023/3/28,C语言程序设计,4,int gys(in
3、t x,int y),int gbs(int x,int y),#include void main()int a,b,m,n;printf(“input 2 numbers:n”);scanf(“%d,%d”,2023/3/28,C语言程序设计,5,结构化程序设计方法:自上向下、逐步分解、分而治之,必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用,2023/3/28,C语言程序设计,6,模块化程序设计的特点:(1)模块相对独立,功能单一。编写相对简单,可以独立编写调试。(2)可集体开发,缩短开发周期。不同的模块可以由不同
4、的人员开发,最终能够合成完整的程序。(3)开发出的模块,可在不同的应用程序中多次使用,减少重复劳动,提高开发效率。(4)测试、更新以模块为单位进行而不会影响其他模块。,函数分类从用户角度标准函数(库函数):由系统提供用户自定义函数从函数形式无参函数有参函数,使用库函数(见教材附录D)应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、需要使用的包含文件,3.2 函数的定义,2023/3/28,C语言程序设计,8,1、函数定义的一般形式:函数名(),当前函数返回主调函数的数据类型(即函数运行结果的数据类型),编写方法与主函数的编写方法一样,2023/3/2
5、8,C语言程序设计,9,例3.1:计算整数x的y次方long power(int x,int y)int n;long p=1;for(n=1;n=y;n+)p=p*x;return(p);,函数类型,参数列表,返回值,void main()int a,b;long c;scanf(“%d%d”,2023/3/28,C语言程序设计,10,定义形式:void 函数名()说明语句;语句;,例3.2 void print1()printf(“Welcome to China!n”);main()print1();print1();print1();,无返回值函数的调用,函数可以无参数,2、无参函数,
6、2023/3/28,C语言程序设计,11,3.3 函数调用3.3.1 函数调用的形式,函数语句:例 printstar();printf(“Hello,World!n”);函数表达式:例 m=max(a,b)*2;函数参数:例 printf(“%d”,max(a,b);m=max(a,max(b,c);,2023/3/28,C语言程序设计,12,例3.3:用函数实现两个数的数值交换,#include void swap(int a,int b)int t;t=a;a=b;b=t;printf(“result:x=%d y=%dn”,a,b);,void main()int x=10,y=5;p
7、rintf(“x=%d,y=%dn”,x,y);swap(x,y);,3.3.2 函数间的参数传递,2023/3/28,C语言程序设计,13,形参与实参形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式,说明 实参必须有确定的值,可以是常量、变量、表达式、函数等;形参必须指定类型;形参与实参类型一致,个数相同;形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放。,2023/3/28,C语言程序设计,14,参数传递方式值传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值
8、特点:形参与实参占用不同的内存单元单向传递,实参的值传给形参,2023/3/28,C语言程序设计,15,例3.4 比较两个数并输出大者,#include void main()int a,b,c;scanf(%d,%d,2023/3/28,C语言程序设计,16,上节回顾,函数的组成部分?如何确定函数的数据类型?函数调用的方法有哪几种?简述参数的“值传递方式”?,函数名(),当前函数返回主调函数的数据类型(即函数运行结果的数据类型),函数语句:例 printstar();printf(“Hello,World!n”);函数表达式:例 m=max(a,b)*2;函数参数:例 printf(“%d”
9、,max(a,b);m=max(a,max(b,c);,函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值,例 3.5 计算x的立方,#include float cube(float x)return(x*x*x);void main()float a,product;printf(Please input value of a:);scanf(%f,x,1.2,1.2,1.728,2023/3/28,C语言程序设计,18,例3.6 从键盘中输入一个年份,判断该年是否是闰年。,#include void main()int year,st
10、;printf(“Input a year:n”);scanf(“%d”,int leap(int year)int st;if(year%4=0,函数调用,自定义函数,2023/3/28,C语言程序设计,19,5、函数定义的一般形式:函数名(),当前函数返回主调函数的数据类型(即函数运行结果的数据类型),编写方法与主函数的编写方法一样,6、函数声明的一般格式函数类型 函数名(形参类型 形参名,.),2023/3/28,C语言程序设计,20,3.3.3 函数的返回值,形式:return(表达式);或 return 表达式;或 return;功能:使程序控制从被调用函数返回到调用函数中,同时把返
11、值带给调用函数说明:函数中可有多个return语句,一旦遇到一个return语句,就立即返回到主调函数。若无return语句,遇时,自动返回调用函数若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换-函数调用转换void型函数,int max(int x,int y)if(xy)return(x);return(y);void main()int a,b,c;scanf(“%d,%d”,2023/3/28,C语言程序设计,21,例3.7 函数返回值类型转换,#include int max(float x,float y)float z;z=xy?x:y;return(z
12、);void main()float a,b;int c;scanf(%f,%f,输入:23.0,66.0输出:66,2023/3/28,C语言程序设计,22,例3.8:从键盘中输入两个数,分别求出这两个数的最小公倍数和最大公约数。,int gys(int x,int y),int gbs(int x,int y),return(x*y/gys(x,y);,int s;s=x*y/gys(x,y);return(s);,int t,s;if(xy)t=x;x=y;y=t;while(s=y%x)!=0)y=x;x=s;return(x);,函数嵌套调用,2023/3/28,C语言程序设计,23
13、,一、一般形式:函数类型 函数名(形参类型 形参名,.)作用:告诉编译系统函数类型、参数个数及类型,以便检验,3.4 函数的原型与声明,函数声明中,由于编译系统不检查参数名,所以可以只写形参的数据类型,而不写形参名,2023/3/28,C语言程序设计,24,二、说明1、函数定义与函数声明不同。2、函数声明位置:程序的数据说明部分,(1)在主调函数中;(2)在所有函数的外部(推荐使用)。3、下列情况下,可不作函数声明(1)若函数返值是char或int型,系统自动按int型处理(2)被调用函数定义出现在主调函数之前 有些系统(如Borland C+)要求函数声明指出函数返值类型和形参类型,并且对v
14、oid 和 int 型函数也要进行函数声明,2023/3/28,C语言程序设计,25,例3.9 函数声明举例,2023/3/28,C语言程序设计,26,3.5 函数嵌套与递归,一、函数的嵌套调用C规定:函数定义不可嵌套,但可以嵌套调用函数,例 3.10 求三个数中最大数和最小数的差值,#include int dif(int x,int y,int z);int max(int x,int y,int z);int min(int x,int y,int z);void main()int a,b,c,d;scanf(%d%d%d,int dif(int x,int y,int z)retur
15、n 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 r;r=xy?x:y;return(rz?r:z);,二、拓扑算法递归,定义:函数直接或间接的调用自身叫函数的递归调用,int f(int x)int y,z;z=f(y);.return(2*z);,2023/3/28,C语言程序设计,29,例 3.11_1求n的阶乘(采用非递归算法),#include int fac(int n)int f,i;f=1;for(i=1;i=
16、n;i+)f=f*i;return(f);void main()int n,y;printf(Input a integer number:);scanf(%d,2023/3/28,C语言程序设计,30,分析一般来说,将n!描述成为:n!=1*2*3.*(n-1)*n但是,只要稍稍变换一下,就可以将其描述成为:n!=n*(n-1).3*2*1=n*(n-1)!这样,一个整数的阶乘就被描述成为一个规模较小的阶乘与一个数的积。同样,可以将(n-1)!描述成(n-1)*(n-2)!。依次类推。于是,一个问题就被描述成了一个较小规模的同样类型的问题了。,用递归的方法求n!,递归的终止条件,递归方式,4
17、!=4*(4-1)!,返回值6,返回值2,返回值1,3!=3*(3-1)!,2!=2*(2-1)!,1!=1,主调函数,返回值24,2023/3/28,C语言程序设计,32,例3.11_2 求n的阶乘(采用递归算法),#include int fac(int n)int f;if(n0)printf(n0,data error!);else if(n=0|n=1)f=1;else f=fac(n-1)*n;return(f);main()int n,y;printf(Input a integer number:);scanf(%d,2023/3/28,C语言程序设计,33,main函数,输入
18、m,y=fac(m),输出y,调用facmn,因 3!=0,1f=3*fac(3-1),返回f,调用facmn,返回f,返回f,因 2!=0,1f=2*fac(2-1),调用facmn,因1=1 f=1,结束,递归调用过程:,2023/3/28,C语言程序设计,34,main()fac(3)fac(2)fac(1)fac(3)*4 fac(2)*3 fac(1)*2 6 2 1,结果:24,2023/3/28,C语言程序设计,35,3.6 库函数的使用(自学),使用库函数应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、需要使用的包含文件,见教材例附录
19、A,2023/3/28,C语言程序设计,36,上节回顾,1、函数嵌套调用:,main(),调用函数a,结束,a函数,b函数,调用函数b,函数b()函数a()函数b;main()函数a;,#include int fac(int n)int f;if(n1)f=-1;else if(n=1|n=2)f=1;else f=fac(n-2)+fac(n-1);return(f);void main()int n,y;printf(Input a integer number:);scanf(%d,2、函数递归调用:,int fac(int n)int f,f1=1,f2=1,i;if(n1)f=-1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模块化 程序设计
![提示](https://www.desk33.com/images/bang_tan.gif)
链接地址:https://www.desk33.com/p-257554.html