c语言教程(课件)第4章.ppt

上传人:hyn****60 文档编号:71607568 上传时间:2023-02-03 格式:PPT 页数:22 大小:108.50KB
返回 下载 相关 举报
c语言教程(课件)第4章.ppt_第1页
第1页 / 共22页
c语言教程(课件)第4章.ppt_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《c语言教程(课件)第4章.ppt》由会员分享,可在线阅读,更多相关《c语言教程(课件)第4章.ppt(22页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第四章 模块化程序设计C C语言的模块化功能:语言的模块化功能:函数式的程序结构:程序整体由一个或多个函数构成,函数式的程序结构:程序整体由一个或多个函数构成,每个函数具有各自独立的功能和明显的界面。每个函数具有各自独立的功能和明显的界面。允许使用不同存储类别的变量,控制模块内部和外部允许使用不同存储类别的变量,控制模块内部和外部的信息交换。的信息交换。具有编译预处理功能,为程序的调试、移植提供了方具有编译预处理功能,为程序的调试、移植提供了方便。便。支持模块化程序设计。支持模块化程序设计。函数一、C程序结构用用C C语言编写程序的任务:编写函数。至少要有语言编写程序的任务:编写函数。至少要有

2、一个一个main()main()函数。函数。C C语言执行:语言执行:C C语言的执行就是执行语言的执行就是执行main()main()函数,函数,从开始从开始main()main()函数的第一个花括号开始,到最后函数的第一个花括号开始,到最后一个花括号结束。其它函数,均是在一个花括号结束。其它函数,均是在main()main()被执被执行时才被调行时才被调 用。用。C C语言程序设计方法:自顶向下、逐步细化。语言程序设计方法:自顶向下、逐步细化。先集中考虑先集中考虑main()main()中的算法,某些功能先用一个函数表中的算法,某些功能先用一个函数表达式表示。达式表示。main()main

3、()设计完毕,再考虑所要用到的函数,有的直接拿设计完毕,再考虑所要用到的函数,有的直接拿来使用,没有的就开始动手设计。来使用,没有的就开始动手设计。结构化程序设计举例高校事务管理系统办公室管理教务管理科研管理人事管理财务管理后勤管理图书管理学藉管理成绩管理排课管理多级管理的实现:一般用菜单方式(例L4-1)高校事务管理系统高校事务管理系统 1 1、办公室管理、办公室管理 2 2、教务管理、教务管理 3 3、科研管理、科研管理 4 4、人事管理、人事管理 5 5、财务管理、财务管理 6 6、后勤管理、后勤管理 7 7、图书管理、图书管理 8 8、退出系统、退出系统请您选择功能(请您选择功能(1-

4、81-8):):二、函数的定义与声明例例4-24-2main()main()double fun(double fun(intint a,a,intint b)b);Double fun(Double fun(intint a,a,intint b)b)/*/*函数体函数体*/*/函数的声明“;”不能少函数的定义不能有“;”(一)函数的定义函数名:函数名要符合函数名:函数名要符合C C的标识的规定。的标识的规定。形式参数:形式参数:要在函数名后的括号内,有多个时,以逗号分隔。要在函数名后的括号内,有多个时,以逗号分隔。形式参数只有在程序运行时才临时分配存储空间,用完则释放该空形式参数只有在程序

5、运行时才临时分配存储空间,用完则释放该空间,因此函数中的参数值的变化不返回(例间,因此函数中的参数值的变化不返回(例L4-2-2L4-2-2),),称为值传递。称为值传递。函数体:是一个分程序结构,和主程序一样,一般也由变函数体:是一个分程序结构,和主程序一样,一般也由变量定义部分和语句组成。但允许只有语句甚至整个函数为量定义部分和语句组成。但允许只有语句甚至整个函数为空。空。函数的返回值:函数的返回值:有返回值,则要声明函数的类型,并用有返回值,则要声明函数的类型,并用returnreturn返回其值。返回其值。没有返回值,则函数类型声明为没有返回值,则函数类型声明为voidvoid型,且若

6、函数中的型,且若函数中的returnreturn在最在最后时,可省去。后时,可省去。函数的外部特性:函数的外部特性:函数不允许嵌套:函数是平等的,不能在函数中再定义函数。函数不允许嵌套:函数是平等的,不能在函数中再定义函数。(二)函数的声明在主调函数中,要对在本函数中将要调用的函数在主调函数中,要对在本函数中将要调用的函数事先作一声明。其作用是向编译系统提供必要的事先作一声明。其作用是向编译系统提供必要的信息:函数名,函数类型,参数的个数、类型及信息:函数名,函数类型,参数的个数、类型及排列次序。并注意这些应与函数的定义部分一一排列次序。并注意这些应与函数的定义部分一一对应(一般只要将函数的定

7、义复制过来,并加一对应(一般只要将函数的定义复制过来,并加一个个“;”即可。)即可。)虽然,在主调函数前定义的函数,可不声明,但虽然,在主调函数前定义的函数,可不声明,但一般还是养成声明的习惯为好,这样可以清楚地一般还是养成声明的习惯为好,这样可以清楚地知道,在主调知道,在主调 函数中到底要用到哪些函数。函数中到底要用到哪些函数。三、函数的嵌套调用C C语言中允许函数中再调用函数。语言中允许函数中再调用函数。.u=f1(i,t).main()函数.v=f2(p,q,t).f1()函数 .f2()函数1234567四、函数的递归调用函数的递归调用就是一个函数直接或间接地调用它自身。函数的递归调用

8、就是一个函数直接或间接地调用它自身。例例L4-9 L4-9 求求n!n!要求要求n!n!可以:可以:只先求出只先求出(n-1)!n-1)!,再乘以再乘以n n。要求要求(n-1)!n-1)!,只先求出只先求出(n-2)!n-2)!,再乘以再乘以n-1n-1。终于变成了求终于变成了求1!1!(这个值是已知的,也叫递归终止条件)(这个值是已知的,也叫递归终止条件)再回推过去。再回推过去。这就是一个递归调用问题。这就是一个递归调用问题。例例L4-10-2 L4-10-2 汉诺塔问题:汉诺塔问题:将将6464个盘子从从个盘子从从A A座移至座移至C C座,可座,可以借助以借助B B座。座。将将n n个

9、盘子从个盘子从A A座移至座移至C C座的解决的方法:座的解决的方法:1.1.将上面的将上面的n-1n-1个盘子从个盘子从A A移至移至B B;2.2.将剩下的一个从将剩下的一个从A A移至移至C C;3.3.将将n-1n-1个从个从B B移至移至C C;其中的将其中的将n-1n-1个盘子从一座移至另一座,又重复前面的过程,个盘子从一座移至另一座,又重复前面的过程,只是盘子数减只是盘子数减1 1。且第。且第1 1步和第步和第3 3步性质相同,只是座名不步性质相同,只是座名不同而已。同而已。ABCvoidvoid hanoi hanoi(intint n,char a,char b,char c

10、)n,char a,char b,char c)if(n0)if(n0)hanoihanoi(n-1,a,c,b);/*(n-1,a,c,b);/*将将n-1n-1个盘子借助个盘子借助c,c,从从a a移至移至b*/b*/printf printf(n Move disc%d from pile%c to pile%c,n,a,c);(n Move disc%d from pile%c to pile%c,n,a,c);getch getch();/*();/*将第将第n n个盘子从个盘子从a a移至移至c*/c*/hanoi hanoi(n-1,b,a,c);/*(n-1,b,a,c);/*

11、将将n-1n-1个盘子借助个盘子借助a,a,从从b b移至移至c*/c*/main()main()intint n;n;clrscr clrscr();();printf printf(n=);(n=);scanf scanf(%d,&n);(%d,&n);hanoi hanoi(n,a,b,c);(n,a,b,c);变量的存储属性变量除类型外,还有存储属性。变量除类型外,还有存储属性。变量的存储器属性变量的存储器属性变量的生存周期变量的生存周期变量的可用域(可见性)变量的可用域(可见性)存储属性存储属性registerregisterautoautostaticstaticexternext

12、ern存储位置存储位置寄存器寄存器主存主存生存期生存期动态生存期动态生存期永久生存期永久生存期作用域作用域局部局部局部或全局局部或全局全局全局一、动态变量 动态变量是在程序执行的某一时刻被动态地建立,动态变量是在程序执行的某一时刻被动态地建立,并在另时刻被动态地撤消的一种变量。它们存在并在另时刻被动态地撤消的一种变量。它们存在于程序的局部,也只在这个局部中以用。有两种:于程序的局部,也只在这个局部中以用。有两种:自动变量自动变量(auto)auto)寄存器变量寄存器变量(register)register)自动变量:是自动变量:是C C中用的最多的变量,因为建立和中用的最多的变量,因为建立和撤

13、消这些变量都是由系统在程序执行中自动完成撤消这些变量都是由系统在程序执行中自动完成的。自动变量定义:的。自动变量定义:格式:格式:auto auto 数据类型数据类型 变量名变量名=初值表达式初值表达式,;,;特点:特点:自动变量是局部变量。自动变量是局部变量。在对变量赋初值前,其值是不确定的。在对变量赋初值前,其值是不确定的。例例L4-11-0 L4-11-0、L4-11-1 L4-11-1、L4-13 L4-13(多次调用同一个函数)多次调用同一个函数)寄存器变量:与自动变量的性质完全相同,只是寄存器变量:与自动变量的性质完全相同,只是存放的位置是在存放的位置是在CPUCPU的寄存器中。通

14、常将使用频的寄存器中。通常将使用频率高的变量定义为寄存器变量。率高的变量定义为寄存器变量。寄存器变量的定义:寄存器变量的定义:register register 数据类型数据类型 变量名变量名=初值表达式初值表达式,;,;说明:说明:在程序中,遇到寄存器变量时,系统会努力去实现它,但因在程序中,遇到寄存器变量时,系统会努力去实现它,但因寄存器数量有限,不能实现时,会自动当作自动变量来处理。寄存器数量有限,不能实现时,会自动当作自动变量来处理。一般情况下用与不用寄存器变量很难看出差别,只有当运算一般情况下用与不用寄存器变量很难看出差别,只有当运算量特别大时,才会有明显差别。量特别大时,才会有明显

15、差别。例例L4-14L4-14二、静态变量静态变量的存储空间在程序的整个运行期间是固静态变量的存储空间在程序的整个运行期间是固定的,并在编译时就为其分配了存储空间,直到定的,并在编译时就为其分配了存储空间,直到程序结束都存在。程序结束都存在。静态变量的初始化:在编译时进行,在定义时可静态变量的初始化:在编译时进行,在定义时可使用常量或常量表达式进行初始化;未初始化时,使用常量或常量表达式进行初始化;未初始化时,自动取自动取0 0为其初值。为其初值。多次调用含静态变量的函数时,静态局部变量具多次调用含静态变量的函数时,静态局部变量具有继承性。有继承性。静态局部变量的值只能在本函数(分程序叶)中静

16、态局部变量的值只能在本函数(分程序叶)中使用。使用。例例L4-15 L4-15 用与用与不用不用staticstatic的区别。的区别。三、外部变量外部变量:定义在所有函数之外的变量叫外部变外部变量:定义在所有函数之外的变量叫外部变量。量。外部变量是全局变量,其作用域是从定义点开始,外部变量是全局变量,其作用域是从定义点开始,到本文件末尾。到本文件末尾。例例L4-16 L4-16 交换两个变量的值。交换两个变量的值。外部变量使用的几种情况:外部变量使用的几种情况:加加staticstatic,则静态外部变量,只能在本文件中使用。则静态外部变量,只能在本文件中使用。例例L4-17L4-17对于位

17、定义点之前的函数,可以用对于位定义点之前的函数,可以用externextern说明符将变量说明符将变量的作用域扩充到需要它的地方。的作用域扩充到需要它的地方。例例L4-18L4-18在其它需要用到这些外部变量的文件中,对变量用在其它需要用到这些外部变量的文件中,对变量用 externextern作声明,可将外部变量的作用域扩充到其它文件作声明,可将外部变量的作用域扩充到其它文件中。中。例例File2.c file1.cFile2.c file1.c外部变量的负作用外部变量会使得程序的关系变得复杂,变量的取外部变量会使得程序的关系变得复杂,变量的取值与变化难以控制,造成模块间联系太多,对外值与变

18、化难以控制,造成模块间联系太多,对外部依赖太多,降低了模块的独立性,给设计、调部依赖太多,降低了模块的独立性,给设计、调试、维护带来困难。因此,应限制外部变量的使试、维护带来困难。因此,应限制外部变量的使用。用。例例L4-19L4-19(L4-19-1 L4-19-2 L4-19-1 L4-19-2)预处理预处理是在编译前对源程序进行一些加工。预处理是在编译前对源程序进行一些加工。C C的预处理均以的预处理均以“#”“#”开头,末尾不加分号,以区开头,末尾不加分号,以区别于别于C C的语句。的语句。它可以出现在程序的任位置,其作用域为出现处它可以出现在程序的任位置,其作用域为出现处至源程序末尾

19、。一般放在程序首部。至源程序末尾。一般放在程序首部。预处理的作用:能改善程序设计的环境,有助于预处理的作用:能改善程序设计的环境,有助于编写易于移植的程序,也是模块化程序设计的一编写易于移植的程序,也是模块化程序设计的一个工具。个工具。已学习过的有:已学习过的有:#includeinclude和和#definedefine一、宏替换宏替换是用预处理命令宏替换是用预处理命令#definedefine指定的预指定的预 处理。处理。有两种:有两种:字符串宏替换字符串宏替换带参数的宏替换带参数的宏替换字符串宏替换:字符串宏替换:格式:格式:#define define 宏名宏名 宏体宏体功能:预处理时

20、,将程序中所有的宏名用宏体替换。功能:预处理时,将程序中所有的宏名用宏体替换。如符号常量的定义。如符号常量的定义。好处:好处:提高程序的可读性提高程序的可读性提高程序的易改性提高程序的易改性例例L4-20 L4-21L4-20 L4-21带参数宏:带参数宏:格式:格式:#define define 宏名宏名(形参表形参表)宏体宏体例例L4-21-2L4-21-2注意:注意:宏体中参数最好用括号括起来,否则易出错。宏体中参数最好用括号括起来,否则易出错。例:例:L4-21-3 L4-21-3 宏可以嵌套:例宏可以嵌套:例L4-23L4-23宏替换只是简单的字符替换,不进行计算(与函数不同),宏替

21、换只是简单的字符替换,不进行计算(与函数不同),不太好理解(副作用)。不太好理解(副作用)。例:例:L4-25 L4-25-2L4-25 L4-25-2书上书上P133P133的注意事项。的注意事项。二、文件包含文件包含:是通过文件包含:是通过#include include 把另一个文件的整个把另一个文件的整个内容嵌入至当前文件中,实际上是宏替换的延伸。内容嵌入至当前文件中,实际上是宏替换的延伸。两种格式:两种格式:#include “include “文件文件”:先到源文件所在目录下找,再到:先到源文件所在目录下找,再到系统指定的系统指定的includeinclude文件目录下找。文件目录下找。#include include :只到系统指定的:只到系统指定的includeinclude文件目录下文件目录下找。找。C C中标准头文件及功能:中标准头文件及功能:P135P135表表4.34.3

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

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com