C语言程序设计项目7函数

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

任务7.3 变量的存储类别
4.静态变量 外部静态变量和局部变量都是在程序被编译时分配存储单元,在程 序运行结束后回收所占用的存储单元,静态变量的生命周期是程序的整 个执行过程,外部静态变量的作用域是外部静态变量所在的文件内从变 量定义之后至文件结束;局部静态变量的作用域是局部静态变量所在的 块。局部静态变量和自动变量一样只有定义性说明,没有引用性说明, 因此必须先定义后引用。外部静态变量的初始化同外部变量。局部静态 变量在编译时执行一次初始化。在有显工初始化的情况政,初值由说明 符中的说明确定,在无显式初始化情况下,同外部变量。 5.寄存器变量 说明为寄存器存储类型的局部变量首先在寄存器中分配存储,如果 无足够的寄存器,则和自动变量一样在内存中分配存储单元。 寄存器变量除不能求地址之外,其余用法同自动变量,对于使用频 繁的值,使用寄存器变量可以提高运行速度。
1
项目7 函数
➢ 项目导读 ➢ 项目目标 ➢ 项目任务
项目导读
本项目主要对函数的一些基础知识、函数定义的一般形式 和调用规则进行介绍,使读者对C语言的函数有个全面的认识。 一个C语言程序可以由一个主函数和若干个其他函数组成,由 主函数调用其他函数,其他函数也可相互调用。
项目目标
●在main函数中调用其他函数。
该函数来完成。 1.有参函数调用的一般形式 函数名(实际参数表) 实际参数表(简称是实参表)中的实参类型及其个数必须与函数定
义时的形参一一对应。当有多个实参时,相互之间用逗号隔开。 如: y=max(a,b);
2.无参函数调用的一般形式 函数名() 虽然没有实参,但函数名的一对圆括号是不能省略的。
任务7.1 函数的定义与调用
3.函数调用的执行过程 首先计算每个实参表达式的值并将计算结果一一传入所对应的实参 形量中,然后,程序执行流程转入函数体中,执行函数体中的语句。当 执行到函数体的右花括号“}”或起其中的return语句时,表示函数体执行 完成,这时程序流程返回到主调程序中的调用位置处继续执行。 4.参数的求值顺序 函数调用时,每一实参为一表达式,实参与实参间用逗号分隔,而 不是顺序求值运算符,多数编译程序在计算参数值时从右向左的顺序进 行。 5.函数调用转换的规则和参数的一致性 函数调用时会引起下列类型转换: ⑴ 如果无函数说明,则进行参数提升,即将char, short,枚举转 换为int, float转换为double。
为函数的递归调用。C语言的特点之一就在于允许函数的递归调用。例 如:
int f(int x) { int y,z;
z=f(y); return(2*z); }
图7.5
在调用函数f的过程中,又要调用f函数,这是直接调用本函数,见图 7.5。
任务7.3 变量的存储类别
7.3.1变量的存储类型 C语言的变量,有两种属性:数据类型和存储类型,存储类型决定
1.将一个较大的任务划分为子任务是一般应遵循的原则 (1)界面清晰。函数处理的任务明确,函数之间数据传递越少越好。 (2)大小适中。函数太大,处理任务复杂,导致结构复杂,程序可 读性较差;反之。若程序太小,则程序调用关系复杂,这样会降低程序 的效率。 (3)可以将一些常用的功能模块编写为库函数,需要时直接调用。
任务7.3 变量的存储类别
6.存储类别小结
内存中动态存储区:自动变量和形式参数 CPU中的寄存器:寄存器变量
任务7.4 内部函数和外部函数
7.4.1 内部函数 如果一个函数只能被本文件中其他函数所调用,它称为内部函数。
在定义内部函数时,在函数名和函数类型的前面加static。即 static类型标示符 函数名(形参表)
⑵ 如果函数说明为原型形式,则将实参转换为原型相应参数的类 型(和赋值转换相似)。
任务7.1 函数的定义与调用
7.1.4 函数调用时的数据传递 1.形式参数和实际参数 在调用有参函数时,主调函数和被调用函数之间有数据传递关系。
从前面已知:在定义函数时函数名后面括号中的变量名称为“形式参数” (简称“形参”)或“虚拟参数”。在主调函数中调用一个函数时,函 数名后面括号中的参数称为“实际参数”(简称“实参”)。实际参数 可以是常量、变量或表达式。
如 static int fun(int a,int b)
7.4.2 外部函数 (1)在定义函数时,如果在函数首部的最左端冠以关键字extern,
则表示此函数是外部函数,可供其他文件调用。 如函数首部可以写为 extern int fun(int a,int b) 这样,函数fun就可以为其他文件调用。C语言规定,如果在定义函
7.2.1 函数的嵌套调用 C语言的函数定义是互相平行、独立的,也就是说,在定义函数时,
一个函数内不能再定义另一个函数,也就是不能嵌套定义,但可以嵌套 调用。也就是说,在调用一个函数的过程中,又调用另一个函数,见图 7.4。
图7.4
任务7.2 函数的嵌套和递归调用
7.2.2 函数的递归调用 在调用一个函数的过程中又出现直接或间接的调用该函数本身,称
数时省略extern,则隐含为外部函数。本书前面所用的函数都是外部函 数。
(2)在需要调用此函数的文件中,用extern声明所用的函数是外部 函数。
变量与函数存储的方式、生命周期、作用域及变量初始化的值和方式。 1.存储类型区分符 C语言的数据有四种存储类型,分别由四个关键字表示存储类型区
分符,auto(自动),static(静态),register(寄存器)和extern(外 部)。
完整的变量说明的一般形式: 存储类型区分符 类型区分符 变量名表; 若没有指定存储类型区分符,默认是auto存储类型。
2.实参和形参间的数据传递 在调用函数过程中,系统会把实参的值传递给被调用函数的形参。 或者说,形参从实参得到一个值。该值在函数调用期间有效,可以参加 该函数中的运算。 在调用函数过程中发生的实参与形参间的数据传递,常称为“虚实 结合”。
任务7.1 函数的定义与调用
7.1.5 对被调用函数的声明和函数原型 在一个函数中调用另一个函数(即被调用函数)需要具备如下条件: (1)首先被调用的函数必须是已经定义的函数(是库函数或用户自
任务7.3 变量的存储类别
2.自动变量 自动变量在进入块时分配存储单元(“块”如函数复合语句),在 退出块后,它所占用的存储单元被回收,其作用域仅在块内有效,自动 变量没有缺省的初值,如果定义时没有明确指出初值,则其初值是不确 定的。对于显示初始化,其初值不限于常量表达式,且每次进入块时, 都要执行一次给变量赋值的操作。 3.外部变量 外部变量在程序被编译时分配存储单元,它的生命周期是程序的整 个执行过程。其作用域是从外部变量定义之后,直到该源文件结束的所 有函数。外部变量初始化是在外部变量定义时进行的,且其初始化仅执 行一次,若无显式初始化,则系统自动初始化为与变量类型相同的0值 (整型0,字符型’\0’,浮点型0.0)。
2.在程序设计中使用函数的优点 (1)避免编写相同的程序段,节省编码时间,减少程序占用的空间。 (2)可以降低主程序的复杂度,便于程序的维护。 (3)便于多人协同合作开发较大的应用程序。 (4)符合结构化程序设计的特性。
任务7.1 函数的定义与调用
7.1.3 函数调用的一般形式 程序中定义了函数,则凡是要完成该函数功能的地方,都可以调用
●将实参的值传递给函数的形参。
●在非main函数中调用其他函数。
●根据程序的需要,将某些代码的执行封装在一个void函数中。
●使用函数的递归调用解决递归问题。
●使用全局变量实现共享。
思考
任务7.1 函数的定义与调用
C程序可有一个主函数和若干个其他函数构成。执行时由主函数调 用其他函数,而其他函数之间也可以互相调用。同一个函数可以被一个 或多个函数调用任意次。
己定义的函数)。 (2)如果使用库函数,应该在本文件开头用#include指令将调用有
关库函数时所需用到的信息“包含”到本文件中来。 (3)如果使用用户自己定义的函数,而该函数的位置在调用它的函
数(即主调函数)的后面,应该在主调函数中对被调用的函数作声明 (declaration)。
任务7.2 函数的嵌套和递源自文库调用
相关文档
最新文档