C语言程序设计 教学课件 ppt 作者 姚海军 全书 第5章

上传人:E**** 文档编号:89370580 上传时间:2019-05-24 格式:PPT 页数:136 大小:1.77MB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 姚海军 全书 第5章_第1页
第1页 / 共136页
C语言程序设计 教学课件 ppt 作者 姚海军 全书 第5章_第2页
第2页 / 共136页
C语言程序设计 教学课件 ppt 作者 姚海军 全书 第5章_第3页
第3页 / 共136页
C语言程序设计 教学课件 ppt 作者 姚海军 全书 第5章_第4页
第4页 / 共136页
C语言程序设计 教学课件 ppt 作者 姚海军 全书 第5章_第5页
第5页 / 共136页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 姚海军 全书 第5章》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 姚海军 全书 第5章(136页珍藏版)》请在金锄头文库上搜索。

1、5.1 问题的提出 5.2 函数的定义 5.3 函数的参数 5.4 函数的嵌套调用和递归调用 5.5 变量的作用域 5.6 main()函数的参数,随着要处理的问题越来越复杂,程序也变得越来越长。长程序的编写会带来许多问题,长的程序开发困难,牵涉的情况较复杂,编写程序的人更难把握。此外,长程序的阅读和理解也会困难,这将影响到程序的开发和维护。如果要修改程序,就必须先理解每一项改动对整个程序的影响,防止其破坏了程序的内在一致性。另外,随着程序变大,程序也常出现一些相同或类似的代码片段,这使程序变得更长,也增加了要处理程序里不同部分之间的相互关系的问题。,5.1 问 题 的 提 出,处理复杂问题的

2、基本方法就是设法把它分解成一些相对简单的部分,分别处理这些部分,然后用各个部分的解去构造这个问题的解。也就是说,对复杂的大程序,先将它划分为若干个程序模块,每个模块用来实现一个特定的功能。例如,一个学校的学生成绩管理系统(如图5-1所示)是由学生成绩录入模块、学生成绩浏览模块、学生成绩查询模块、学生成绩修改模块和学生成绩打印模块等根据用户的需求而开发的,其中每一个模块的开发我们用子程序来完成,而在C语言中,子程序可以通过函数来实现。一个程序可由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。,图5-1 学生成绩管理系统模块图,函数是组成C程序的基本单位,也是C程序设计

3、的核心。函数是完成一定功能的可执行代码段。我们可以把函数看做一个“黑盒子”,只要把数据送进去就能得到结果,而函数内部究竟是如何工作的,外部程序是不知道的。,5.2.1 函数基础 在C语言中,程序从主函数main开始执行,到main函数结束处终止。其他函数在main函数、其他的函数或自身函数进行调用后才能执行。 一个程序必须且只能包含一个名为main的函数,即主函数。程序的执行从main函数开始,调用其他函数后回到main函数,并在main函数中结束。主函数是一个命名的独立的程序段,它完成一个特定的任务并可选择是否将一个值返回给调用函数。 下面我们先来看一个简单的例子。,5.2 函 数 的 定

4、义,【例5-1】 显示一个文本信息。 程序清单如下: /-使用自定义函数显示输出一个文本信息- /-文件名ex5_1.cpp- #include void main() void echoline(); /对函数echoline的说明 void echotext(); /对函数echotext的说明 echoline(); /调用自定义函数echoline echotext(); /调用自定义函数echotext echoline(); /再次调用自定义函数echoline ,/定义函数echoline,功能是输出一行*号 void echoline() printf(“*n“); print

5、f(“n“); ,/定义函数echotext,功能是输出一行文本信息 void echotext() printf(“* 学生信息管理系统 *n“); printf(“n“); 运行结果如图5-2所示。,图5-2 例5-1的输出结果,如果我们将上面的两个自定义函数变为如下内容: void echoline() printf(“n“); printf(“n“); void echotext() printf(“ 学生信息管理系统 n“); printf(“n“); 运行结果如图5-3所示。,图5-3 例5-1修改后的输出结果,在这个程序中,主函数中调用了三次函数,echoline()函数的作用是

6、显示一行字符,它被调用了两次。echotext()的作用是显示一行文字,被调用了一次。程序的运行结果是两行 * 字符中间有一行文字,很是漂亮。如果我们觉得字符 * 不好看,想显示两行号,那么只要修改显示字符的函数,将所有的 * 号替换为号。这样修改一次,程序中只要显示字符行的地方就都显示号了。如果我们不用函数,而用三条printf()语句也可以完成显示字符的功能,但是在完成上述修改的时候,就要改两次才行。如果编了一个大程序,里面用到很多显示一行 * 字符的功能,但是没有用函数,这样要完成上述修改,就要将所有的显示 * 号的地方都找到,一个一个地修改;如果使用函数完成这个程序中的显示一行字符的功

7、能,只要修改一次函数中的显示语句,整个程序的显示行就都变成号了。,从用户的角度看,函数有两种:标准函数和用户自定义函数。 (1) 标准函数即库函数,也是系统提供的。 C语言提供了丰富的库函数,它们分类存放在不同的头文件中。例如,前面程序中用到的printf()函数、scanf()函数等存放在stdio.h头文件中,对字符串操作的函数存放在string.h头文件中,常用的数学公式以库函数的形式存放在math.h头文件中。这些库函数用户不必自己定义,只需直接使用即可。,(2) 自定义函数,即用户自己编写的函数,它可执行一个特定的任务。 从函数的形式看,函数分两类:有参函数和无参函数。 (1) 有参

8、函数:在调用函数时,在主调用函数和被调用函数之间有参数传递,也就是说,主调用函数可以将数据传给被调用函数使用,被调用函数中的数据也可以带回值供主调用函数使用。 (2) 无参函数:可以带回或不带回函数值,但一般以不带回函数值的居多。 本章主要研究自定义函数的使用,自定义函数不仅要定义函数本身,即定义函数功能,而且在主调函数中,还必须对被调用函数进行声明。,5.2.2 函数的定义 每个函数定义中应包含一段程序代码,执行时将完成一定工作。定义函数时给定一个函数名字,供调用这个函数时使用。 1. 无参函数 定义格式: 返回值类型标识符 函数名() 说明部分; 语句; 例5-1中的echoline和ec

9、hotext函数都是无参函数。函数定义的基本形式如图5-4所示。,图5-4 函数的定义,在定义函数时要用“类型标识符”指定函数返回值的类型,即函数带回来的值的类型。函数名是由用户定义的标识符,函数名后有一个空括号,其中无参数,但括号不可少。中的内容称为函数体,在函数体中也有类型说明,这是对函数体内部所用到的变量的说明。在很多情况下都不要求无参函数有返回值,此时函数类型标识符可以写为void。如echoline函数中使用void说明该函数无返回值。,2. 有参函数 定义格式: 返回值类型标识符 函数名(不带类型说明的形式参数列表) 形式参数说明; 声明部分; 执行部分; 有参函数比无参函数多了两

10、个内容,其一是形式参数列表,其二是形式参数类型说明。在形参表中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。形参既然是变量,当然必须给以类型说明。,如定义一个函数,用于求两个数中的大数,可写为: int max(a,b) int a,b; if (ab) return a; else return b; ,第一行说明max函数是一个整型函数,其返回的函数值是一个整数,形参为a和b。第二行说明a和b均为整型量,a和b的具体值是由主调函数在调用时传送过来的。在 中的函数体内,除形参外没有使用其他变量,因此只有语句而没有

11、变量类型说明。上边这种定义方法称为“传统格式”。这种格式不易于编译系统检查,从而会引起一些非常细微而且难于跟踪的错误。ANSI C的新标准中把对形参的类型说明合并到形参表中,称为现代格式。,例如,max函数用现代格式可定义为: int max(int a,int b) if (ab) return a; else return b; 现代格式在函数定义和函数原型说明(后面将要介绍)时,给出了形式参数及其类型,在编译时易于对它们进行查错,从而保证了函数说明和定义的一致性。本书的函数定义均采用现代格式定义。,3. 空函数 函数体可以是空的,称为“空函数”。如: echoline() 这样就定义了一

12、个空函数。 空函数有什么用呢?我们在编程序时,一般情况下要将一个问题分解成若干模块。给每个模块对应一个函数,然后先将大流程写出来,再一个函数一个函数地实现。但我们写程序时在主调用函数中先将所有的函数调用都写出来后,所有的函数都还没有定义,不能够执行。所以我们将所有的函数先定义成空函数,让程序能够执行,再一步一步地完善各个函数。这样编写好一个函数,再写下一个,而不用先将所有的函数都写完全,再调程序。,下面对函数进行一下初步的总结: (1) 一个C语言的程序(称做源文件)是由一个函数或多个函数组成的。 (2) 对于一个很大的任务,一般将它分解成若干源文件,分别编写和调试,这样可以提高开发效率。一个

13、源文件可以被其他的C程序使用。 (3) C程序必须从main()函数开始执行。 (4) 所有的函数在定义上讲都是互相独立的,即不存在嵌套定义。在C语言中,函数定义是并列的关系,不能一个包含一个。但是在调用时,可以互相调用或嵌套调用。 (5) C语言中有两类函数,系统提供的函数(库函数)和用户自定义的函数。,(6) 函数又分为无参函数和有参函数。无参函数即我们上面见到的echoline()和echotext()函数,只完成固定的功能;有参函数如我们常见的printf()函数、max()函数(自定义函数),这些参数规定了函数要执行什么样的操作。无参函数和有参函数都可以返回或不返回一个函数值,如果返

14、回一个函数值,可以让调用它们的函数使用,来判断函数的执行状态。 对程序员来说,使用函数可极大地减轻管理程序的工作量。但是有得必有失,函数也不是那么容易理解的。让我们继续探索函数的历程吧!,【提示】 main()是特殊的函数,它由操作系统调用,返回到操作系统。函数头void main()表示不返回任何值给操作系统,所以,在main()函数体的最后无须return 1;之类的语句。如果函数头为int main()或main(),则函数体的最后必须给出return 1;之类的语句。对于DOS操作系统来说,return 1和return 0都是无所谓的。 为了省略return 1;这种无谓的操作,本书

15、一律用void main()定义格式。,5.2.3 函数原型声明 函数在定义之后、调用之前一般要进行声明,以便向编译器指出该函数要使用什么样的格式或语法,也称为函数原型声明。这个道理就像使用变量之前要先对变量进行说明一样。函数原型声明位于程序开始处,位于头文件(如果有)声明之后。 标准库函数的函数原型都在头文件中提供,程序可以用 #include指令包含这些原型文件。对于用户自定义函数,程序员必须在源代码中说明函数原型。,函数原型声明在形式上与函数头部类似,但它是一条程序语句,即它必须以分号结束。 函数原型声明的语法格式: 返回值类型标识 函数名 (参数表); 函数原型和函数定义在返回类型、函数名和参数表上必须完全一致。如果它们不一致,就会发生编译错误。 函数原型声明中不必包含参数的名字,而只要包含参数的类型,即使在这里写参数的名字,所用名字也可以不必与函数定义中用的参数名字一致。原型说明里的参数名可以起到提示作用,也提倡给出有意义的名字,这将有利于函数的正确使用。下面的函数原型声明是合法的: int max(in

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

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

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