C语言程序设计教程(第5章 函数)

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

22
信息科学与工程学院
作用域(可用域)与生存期
C语言中定义的变量都有一个起作用的范 围,称为变量的作用域。 程序运行时,变量被创建和被删除的时间 段,称为变量的生存期。
23
信息科学与工程学院
局部变量和全局变量
在一个函数内部定义的变量是内部变量, 它只在本函数内部范围内有效。也就是说 只有在本函数内才能使用它们。这些变量 称为“局部变量”。 在函数之外定义的变量称为外部变量,也 称为全局变量,在文件内的所有函数都能 使用它。它的有效范围为从定义变量的位 置开始到文件的结束。
4
信息科学与工程学院
5.1 问题的提出
C语言程序是由什么构成的? 函数 什么是函数?
能完成特定功能的功能块; 一般有输入参数 和返回值; 一次定义,可以调用多次。
一个C语言程序为什么需要不同的函数?
一个函数过大难于编写和维护; 一个函数的程序不利于协作; 代码和功能共享的需要。
5
信息科学与工程学院
6. 函数调用举例分析(见下页)
15
信息科学与工程学院
实参到形参是单向值传递 例2 求两个整数中的最大值
int max(int x,int y) /*函数定义*/ { int temp; if (x>y) temp=x; else temp = y; COPY return temp; } void main() { int a,b; scanf("%d,%d",&a,&b); a = max(a,b); /*函数调用*/ printf("\n max= %d \n",a); }
2
信息科学与工程学院
第5章 函数
本章需要掌握的知识点: 函数定义 函数说明 函数调用 形参和实参的关系 变量的存储类别
3
信息科学与工程学院
内容安排
5.1 问题的提出 5.2 函数基础 5.3 函数的定义 5.4 函数调用 5.5 参数传递 5.6 函数说明 5.7 变量的存储类别 *5.8 递归调用
2000 2002 2004
(main)
2006
2008 200A
9 9
变量a 变量b
运行结果:max = 9
…...
信息科学与工程学院
例3 函数间的参数传递
void swap(int x,int y); //函数声明 运行结果: void main() { 调用前:i=2,j=6 int i, j; i=2, j=6; printf("调用前:i=%d,j=%d\n",i,j); 交换前:x=2,y=6 swap(i,j); //函数调用 交换后:x=6,y=2 printf("调用后:i=%d,j=%d\n",i,j); } 调用后:i=2,j=6 void swap(int x,int y) //函数定义 { x 2 6 int temp; printf("交换前:x=%d,y=%d\n",x,y); y 6 2 temp=x; x=y; y=temp; printf("交换后:x=%d,y=%d\n",x,y); }
24
信息科学与工程学院
局部变量的注意事项
不同函数中可以使用相同名字的变量,它们 代表不同的数据对象,互不干扰。 形式参数也是局部变量 在一个函数内部,可以在复合语句中定义变 量,这些变量只在本复合语句中有效,这种复 合语句也可称为“分程序”或“程序块”。
25
信息科学与工程学院
全局变量的注意事项
33
信息科学与工程学院
课堂作业
P140 第6题
34
信息科学与工学院
课外练习
P.140 5 - 8 5-9 5-11
35
信息科学与工程学院
上机实验五
《上机指导》实验五 函数 基础部分:课堂作业 提高部分: 教材P140 5 - 8 5-9 5-11
实验步骤:
(1)先自学并完成上机指导实验5 函数P113-119内容; (2)完成并提交课堂作业的程序,程序源文件的名称为:班 级+学号后两位+姓名+实验五.cpp。
5.2 函数基础
函数的应用涉及到3个环节:
(1)函数定义
(2)函数声明(说明) (3)函数调用
6
信息科学与工程学院
5.3 函数的定义
函数头
C函数的定义由函数头与函数体两部分组成, 形式如下:
函数返回值的数据类型说明 函数名称(形式参数列表)
{
函数内部数据说明; 执行语句; 函数体
}
7
信息科学与工程学院
在什么情况下需要函数说明? 函数的定义出现在被调用之后或者在其 他文件中。
函数说明的形式?
20
信息科学与工程学院
函数说明
int
函数类型
fun
(int , char );
函数名 函数的参数
int
fun
(int xxx, char yyy);
信息科学与工程学院
5.7 变量的存储类别
作用域(可用域)与生存期 局部变量与全局变量 自动变量与静态变量
9
信息科学与工程学院
5.4 5.5 函数调用和函数的参数传递
1. 函数调用的一般形式
(1)有参数函数:
(2)无参数函数:
2. 函数调用的规则
函数名(实际参数表);
函数名();
⑴多个实参间用逗号隔开; ⑵实际参数表中的参数可以是常量、变量或表达式; ⑶实参与形参个数相等,类型应一致; ⑷实参与形参按顺序对应,一一传递数据; ⑸函数调用可以嵌套。
int max( int x, int y) void main( ) { { 实参表 形参表 int a,b,c; int z; scanf (“%d,%d”,&a,&b); z=x>y? x:y; c=max(a,b); return(z); printf(“Max is %d”,c); } }
int f1(int x) int f(int x) {int y,z; {f2(y); } int f2() { f1();
z=f(y);
return(2*z); }
}
信息科学与工程学院
关键问题
构造递归表达式。将问题规模缩小, 或者将规模放大。 确定递归结束条件。否则递归无法结 束。
31
信息科学与工程学院
例1 计算两个整数的平均值的函数 函数名,说
返回值 类型 明函数的功能
形参列表, 函数入口
int Average ( int x, int y ) {
函数头
函数体
定义内 部 变量
int result; result = (x + y) / 2; return result; }
返回值作为函数调用 表达式的值
信息科学与工程学院
3. 函数调用的方式
(1)把函数调用作为一个语句 。 一般形式: 函数名(实际参数表); 使用情况: 这种方式常用于调用一个可以忽略返 回值或没有返回值的函数。 如:printf(“Hello!\n”);
信息科学与工程学院
(2)函数调用出现在表达式(函数表达式)中。
一般形式: 变量名=函数表达式; 使用情况:这种方式用于调用带返回值的函数, 函数的返回值将参加表达式的运算。 如:a =3+ max(num1,num2);
信息科学与工程学院
C语言程序设计
1
信息科学与工程学院
上一章内容回顾
循环结构的两个要素? while语句如何组合这两个关键要素? do while语句如何组合这两个关键要素? for结构中的三个表达式运算方式 break语句的作用 continue语句的作用 什么叫循环的嵌套 穷举算法 迭代算法
36
27
信息科学与工程学院
练习
int d; int f(int c) { static int a; int b; …… …… } 请问a、b、c、d的作用域和生存期?
28
信息科学与工程学院
*5.8 递归调用
在一个函数的定义中出现直接或间接地调用 该函数本身,称为函数的递归调用。
29
信息科学与工程学院
例 用递归方法求n!
根据n!的运算规律可以写出以下递归公式:
(n=0,1) 1 n! (n>1) n * ( n 1)!
定义函数double fac(int n)来求n!的值,在main中 负责用户输入和结果输出。
32
信息科学与工程学院
小结
函数定义的形式? 函数说明的作用?在什么情况下需使用到函数说明? 函数的调用形式? 函数调用时实参如何传递给形参? 实参可以是常量吗? 变量的作用域和生存期? 全局变量和局部变量? 自动变量和静态变量? 什么问题可以用递归解决?
2000 2002 2004 2006 2008 200A
(main)
5 9
(max)
5 9
…...
变量a 变量b 变量x 变量y 变量temp
9
…...
信息科学与工程学院
例 求两个数中的最大值
…...
int max(int x,int y) { int temp; if (x>y) temp=x; else temp = y; return temp; } void main() { int a,b; scanf("%d,%d",&a,&b); a = max(a,b); printf("\n max= %d \n",a); }
建议只有在必要时才使用全局变量。 当局部变量与全局变量同名时,以局部 变量优先。
26
信息科学与工程学院
自动变量与静态变量
用auto说明的变量是动态变量,auto可以 省略。动态变量在调用函数时被创建,函 数调用结束后删除。 用static说明的变量是静态变量,程序一启 动就创建,程序结束后才删除。
信息科学与工程学院
六 函数的嵌套调用 嵌套调用:在调用一个函数的过程中,又调用另 一个函数。 嵌套定义:在定义一个函数时,该函数体内包含 另一个函数的定义。
C语言不能嵌套定义,但可以嵌套调用。在调 用一个函数的过程中,又调用另一个函数。
信息科学与工程学院
5.6 函数说明
什么是函数说明? 向编译系统声明将要被调用函数的接口 信息。
注意:无返回值函数的调用,不能出现在表达式中。 (3)函数调用作为一个函数的实参出现。 如:d=max(max(a,b),c); 如:printf(“%d”, max(a,b));
信息科学与工程学院
4. 函数参数和函数的值
形式参数:在定义函数时函数名后面括弧中的 变量名,简称形参。 实际参数:在调用函数时函数名后面括弧中的 表达式,简称实参。
信息科学与工程学院
5. 函数的传值调用
(1) 形参调用前不占内存单元,调用时占用, 调用
后释放;
(2)形参是函数的内部变量,只在函数内部才有意义; (3)实参对形参的数据传递是值传递,即单向传递,
只由实参传递给形参,反之不可。调用结束后,
只有形参单元被释放,实参单元中的值不变。
信息科学与工程学院
信息科学与工程学院
return语句注意事项
在函数体中遇到return,函数结束,同时将return 后面所带的值作为函数值返回。 return(表达式); 和return 表达式;都是正确的。 在函数定义时,允许出现多个return语句,但每次 函数执行时必定只有一条return语句被执行。 在定义函数时指定的函数类型一般应和return语句 中表达式的类型一致。
相关文档
最新文档