《模块化程序设计》ppt课件

上传人:tia****nde 文档编号:70023115 上传时间:2019-01-15 格式:PPT 页数:145 大小:3.34MB
返回 下载 相关 举报
《模块化程序设计》ppt课件_第1页
第1页 / 共145页
《模块化程序设计》ppt课件_第2页
第2页 / 共145页
《模块化程序设计》ppt课件_第3页
第3页 / 共145页
《模块化程序设计》ppt课件_第4页
第4页 / 共145页
《模块化程序设计》ppt课件_第5页
第5页 / 共145页
点击查看更多>>
资源描述

《《模块化程序设计》ppt课件》由会员分享,可在线阅读,更多相关《《模块化程序设计》ppt课件(145页珍藏版)》请在金锄头文库上搜索。

1、第四章 模块化程序设计,主讲人:韩维良 2019年1月15日,C语言程序设计,C语言支持模块化程序设计的功能: (1) C语言用函数组织程序: 一个程序由一个或多个源程序文件组成; 每一个源程序文件就是一个程序模块; 每一个程序模块由一个或多个函数组成。 程序设计的任务就是设计一个个函数,并且确定它们之间的调用关系。 在设计函数时要使每个函数都具有各自独立的功能和明显的界面。,C语言程序设计,(2) 通过给变量定义不同的存储类别,控制模块内部及外部的信息交换。 (3) 具有编译预处理功能,为程序的调试、移植提供了方便,也支持了模块化程序设计。,C语言程序设计,第一节 函 数 一、设计C语言程序

2、就是设计函数 用C语言设计程序,任务只有一种,就是编写函数,至少也要编写一个main函数。 执行C程序也就是执行相应的main函数。即从main函数的第一个前花括号开始,依次执行后面的语句,直到最后的后花括号为止。,C语言程序设计,模块化程序设计有一个原则:就是每个模块的规模一般不能太大(一般要控制在4060行之间),以便于阅读,便于检查其中的错误。 在C语言中,减少主函数规模的一项基本措施就是通过调用其它函数来实现主函数需要的一些功能。,一般C语言程序的执行过程,程序结构图,大学信息管理系统,菜单函数,C语言程序设计,二、函数结构 一个C语言函数的结构形式如下: 函数头 函数体 ,C语言程序

3、设计,1. 函数头 函数头结构: 函数类型 函数名(形式参数表列) 一个函数的函数头的结构如下: (1)函数类型:指定函数值的类型,即函数返回值的类型。 (2)函数名:必须采用合法的用户标识符。 (3)圆括号:是“函数运算符”,表示进行函数运算,函数运算符具有很高的运算优先级别。,C语言程序设计,(4)形式参数表:由写在一对圆括号(函数运算符)中的一系列参数组成。 每一个参数由一个类型符和一个参数名组成。参数名是合法的标识符。 函数可以没有参数,这时在函数运算符内写一个“void”,也可以空白,但小括号不能省略。,C语言程序设计,2. 函数体 函数体由一些语句组成。 主要是三种类型的语句: 声

4、明语句:声明在函数中要使用的变量等程序实体。 可执行语句:用来实现函数的功能,包括若干流程控制 语句和表达式语句。 return语句:停止本函数的执行,使流程返回到调用处。,C语言程序设计,编译器将函数分为三类进行处理: 纯粹计算型函数,如sqrt()和sin()。将返回一个计算结果。 完成一项具体工作,返回完成的成败。如printf()执行成功时,返回显示的字节数;失败时,返回一个负整数。 函数不产生返回值,其类型应定义为void。 C99规定,对于非void类型的函数,必须使用有返回值的return语句。,int absolutevalue (int x) /* 绝对值函数 */ retu

5、rn (x=0?x:-x); void spc (int n) /* n空格函数 */ int i; for (i=0; in;i+) printf (); return; /* 可以不要return语句 */ ,float y(float x) if (x0) return (x*x-x+1); else return (x*x*x-x+3); ,func(int n) if (n10) return (2*n+3); else return; ,平行的两个返回语句,返回值不同,编译时可能出现警告错误,但不影响使用,结果不可预测。,C语言程序设计,3. 函数中变量的作用域 作用域指的是一个程

6、序段中的变量的作用范围,在一个函数中定义的变量只在本函数中有效,在其它函数中不能使用这个变量。 因此说,该变量的作用域是它所在的函数(从定义该变量的行开始到函数末尾)。即使在不同的函数中定义了同名的变量,它们也是指不同的变量。,#include int func(int x) x=5; return x+3; int main(void) printf(“x=%dn“,x); return 0; ,这个程序企图在main函数中使用func函数中的变量x。编译这个程序,系统将给出如下编译错误: c(12) : error C2065: x : undeclared identifier (未声明

7、的标识符 ),C语言程序设计,4. 空函数 空函数是一个不产生任何有效操作的函数,但它却是一个合法的C函数。 例如函数 void null(void) 就是一个空函数。 空函数多使用在模块化程序的设计或测试中。有一些函数还未编写,可用空函数进行调试,这样就可以调试程序的其它部分,等以后再逐步补上。,C语言程序设计,三、函数定义与函数声明 1、函数定义 函数定义是按照C语言的语法规则引入新的函数,并提供如下信息: 函数的返回值类型(如果有); 参数的个数及类型和名称; 调用函数时要执行的代码; 函数的有效性(不能嵌套定义)。,C语言程序设计,函数的定义 类型说明符 函数名(类型名 形式参数1 ,

8、 类型名 形式参数2 , ) /* 函数的首部 */ 说明部分 /* 函数体 */ 语句部分 ,C语言程序设计,其中类型说明符和函数名部分共称为函数头。 类型说明符即本函数的类型,实为函数返回值的类型。 函数名是由用户定义的标识符,函数名后有一个括号,其内容为形参表。 在形参表中给出的参数称为形式参数,即形式参数变量的定义,各参数定义之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。 当形参表中无参数时,括号不可少。 中的内容称为函数体。 在函数体中也有类型说明, 这是对函数体内部所用到的变量的类型说明。,注意:函数不能嵌套定义。 void fun1() int fun2(

9、) ,而应该为如下形式: void fun1() int fun2() ,C语言程序设计,2、函数的返回值及其类型 (1) return语句 函数的返回值通过函数体内的return语句实现。 return 返回值表达式 ; 或 return (返回值表达式); 如果没有返回值,格式中的左、右圆括号可以省略,即写为: return ; 功能:返回调用函数,并将“返回值表达式”的值带给调用函数。,C语言程序设计,说明: 1)函数的返回值只能有一个。 2)当函数中不需要指明返回值时,可以写成: return; 也可以不写。函数运行到右花括号自然结束。 3)一个函数体内可以有多个返回语句,不论执行到哪

10、一个,函数都结束,回到主调函数。 4)当函数没有指明返回值,即return; 或没有返回语句时,函数执行后实际上不是没有返回值,而是返回一个不确定的值,有可能给程序带来某种意外的影响。,C语言程序设计,(2)函数返回值的类型 函数定义时的类型就是函数返回值的类型。从理论上,C语言要求函数定义的类型应当与返回语句中表达式的类型保持一致。当两者不一致时,系统自动进行转换,将函数返回语句中表达式的类型转换为函数定义时的类型。 如果定义函数缺省函数类型,则系统一律按int型处理。,C语言程序设计,3、函数声明 函数声明是对所用到的函数的特征进行必要的声明。 编译系统以函数声明为检测依据:检测形参与实参

11、类型是否一致,返回值的类型是否正确,以保证调用表达式与函数之间的参数正确传递。 声明语句提供的必要信息包括:函数名,函数的类型,函数参数的个数、排列次序以及每个参数的类型。,C语言程序设计,函数的定义可以按任意的次序,但在主调函数中,要调用另一个函数,则需要对被调函数先做声明(或者说明)。 所谓声明,就是把函数的类型、函数的名称、函数形参的类型及个数、顺序通知编译系统,便于在调用时进行检查。 函数声明的一般形式: 函数类型 函数名(参数类型1 , 参数类型2) ; 或 函数类型 函数名(参数类型1 参数名1 , 参数类型2 参数名2) ;,C语言程序设计,说明: (1)如果被调函数的返回值为i

12、nt类型,则不管被调函数位置如何均不需要在主调函数中说明。 (2) 如果被调用函数的声明放在源文件的开头,则该声明对整个源文件都有效。 (3) 如果被调用函数的声明是在调用函数定义的内部,则该声明仅对该调用函数有效。,C语言程序设计,(4) 在函数调用中,有下面几种情况可以省略声明: a. 如果调用函数和被调用函数是在同一个源文件中,而且被调用函数的定义是在调用函数之前。 b. 函数的返回值是整数或字符。 c. 所有被调用函数的声明都是在源文件开头。 d. 如果被调用函数不是在源文件开头,而是在源文件中间且在所有函数之外某处被声明时,则在被声明之后引用它时,不必再声明,但在被声明之前引用它时,

13、需要对其进行声明。 (5) 如果调用函数和被调用函数的定义是在同一源文件中,应该先说明或定义被调用函数。,设有一函数的定义为: double func (double a, int b, char c) /* 函数体*/ 与之相应的函数声明应为: double func (double x, int y, char z); /* 注意末尾的分号 */,33,C语言程序设计,例求二实数之和 main ( ) float add(float,float); float a, b, c; scanf(“%f%f“, 说明:调用过程中参数的对应关系。,C语言程序设计,例 定义一个求两个整数中极大值的m

14、ax()函数。 /*功能:求2个整数中的较大数 */ /*形参:2个,整型 */ /*返回值: 2个整数中的较大数 */ int max(int n1,int n2) /*函数定义 */ int z; z= n1 n2 ? n1 : n2; return (z); ,C语言程序设计,void main( void ) int max(int n1, int n2); /*对被调函数说明*/ int num1,num2; printf(“input two numbers: “); scanf(“%d%d“, &num1, &num2); printf(“max=%dn“, max(num1,

15、num2); ,C语言程序设计,四、虚实结合与传值调用 一个函数中的函数体,只有在该函数被调用时才会执行。 在函数被调用时进行如下两个操作: 将函数调用中的实际参数值传送给函数定义中的形式参数; 将流程从调用处转到被调用函数的开头,开始执行函数体中的代码。,C语言程序设计,1、函数调用的一般形式 格式: 函数名(实参表) 函数按名称调用。 如果是调用无参函数,则实参表可以没有,但括号不能省略。用逗号分隔多个实参。实参与形参的个数应相等,类型应一致。实参与形参按顺序对应,一一传递数据。 调用时,实参必须具有确定的值,且与形参个数相等、类型匹配。,C语言程序设计,(1)形参与实参 形式参数:定义函

16、数时函数名后面括号中的变量名 实际参数:调用函数时函数名后面括号中的表达式 开参是虚的,类似于占位符,而实参是实的,具体的。 形参出现在函数定义中,只能在该函数体内表示欲处理的数据,并没有确定的值。 发生函数调用时,调用函数把实参的值传送给被调用函数中的形参,从而实现调用函数向被调用函数的数据传送。,C语言程序设计,(2)函数调用的方式 按函数在程序中出现的位置分,有2种函数调用方式。 1) 函数语句 函数语句的调用,是指把被调函数作为一个独立的语句直接出现在主调函数中。 2) 函数表达式 被调函数出现在主调函数中的表达式中,这种表达式称为函数表达式。在被调函数中,必须有一个函数返回值,返回主调函数以参加表达式的运算。,C语言程序设计,(3)说明 1)按函数名调用函数。 2)实参在类型上按顺序与形参一一对应和匹配。如果类型不匹配

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号