c++课件第4章函数与预处理

上传人:E**** 文档编号:90582787 上传时间:2019-06-13 格式:PPT 页数:64 大小:534.50KB
返回 下载 相关 举报
c++课件第4章函数与预处理_第1页
第1页 / 共64页
c++课件第4章函数与预处理_第2页
第2页 / 共64页
c++课件第4章函数与预处理_第3页
第3页 / 共64页
c++课件第4章函数与预处理_第4页
第4页 / 共64页
c++课件第4章函数与预处理_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《c++课件第4章函数与预处理》由会员分享,可在线阅读,更多相关《c++课件第4章函数与预处理(64页珍藏版)》请在金锄头文库上搜索。

1、第4章 函数与预处理,4.1 函数的定义和使用 4.2 函数的参数传递 4.3 内联函数 4.4 函数重载 4.5 带默认形参值的函数 4.6 函数的嵌套调用 4.7 函数的递归调用 4.8 变量的存储类别 4.9 内部函数和外部函数 4.10 预处理命令,4.1 函数的定义与使用,系统库函数:需要包含相应的头文件,如 #include 系统所提供的库函数都是完成一些通用功能的函数,在实际的程序设计中,自己还需要编写大量完成特殊功能的函数,我们称之为用户自定义函数。 4.1.1 函数的定义 函数定义的一般格式为: 函数类型 函数名( 形式参数表) 语句组 ,第4章 函数与预处理,例4.1 求两

2、个整数中较大的值的函数,#include int max(int x, int y); void main() int a,b,c; cout a b; c = max(a,b); cout y) m=x; else m=y; return m; ,程序运行结果为: 请输入两个整数,用空格分隔:20 30 a,b中较大的数是:30,函数调用语句,主调函数,被调函数,第4章 函数与预处理,4.1 函数的定义与使用,4.1.1 函数的定义(续一) 1. 函数类型与返回值 函数的类型就是函数返回值的类型,可以是C+中的任何数据类型。 函数的返回值由函数体中的return语句给出。 return语句的

3、一般格式为: return (表达式); 或 return 表达式; 或 return ; 函数的类型要与return语句的返回值类型相同。若不一致则以函数类型为准,将返回值类型转换为函数类型,若不能转换,则编译过程会出错! 若函数不需要返回值,则应将类型指定为void。,执行该语句时,不带回返回值,只是返回主调函数,第4章 函数与预处理,4.1 函数的定义与使用,4.1.1 函数的定义(续二) 2. 函数的参数 函数通过参数接收数据。 函数头中的参数为形式参数(或形参),在函数调用时给出的参数称为实际参数(或实参)。 实参必须是一个实际的值,而形参只有在发生实际调用时才有具体的值。 如果不需

4、要为函数提供数据,则可以没有参数,称之为无参函数。,第4章 函数与预处理,4.1 函数的定义与使用,4.1.2 函数的声明与调用 函数调用的一般格式: 函数名(实际参数表) 注意:若无形参,也不必给出实参,但括号不能省略。 实参与形参个数应一致,类型要一一对应。 函数原型声明:在调用函数前,对函数进行说明。通常用于函数定义出现在函数调用之后的情况。 函数原型声明的一般格式: 函数类型 函数名(形式参数表); 注意:函数原型中可以不写出参数名。 如:double power(double, int);,第4章 函数与预处理,例4.2 编写一个求x的n次方的函数,#include double p

5、ower(double x, int n); void main() double x; int n; cout x n; cout x “的“ n “次方是:“ power(x,n) endl; double power(double x, int n) double a = 1.0; int i; for(i=1; i=n; i+) a *= x; return a; ,程序运行结果为: 请输入X和N的值,用空格分隔:3.0 4 3的4次方是:81,第4章 函数与预处理,4.2 函数的参数传递,根据函数的功能,函数的形参可以选择为数值、引用或指针三种形式。 4.2.1 值传递 C+中参数的

6、传递是单向的,即只能将实参的值传递给形参,而形参值的改变对实参没有影响。 例4.3 写一个函数交换主函数中两个变量的值 考虑:使用值传递,将需要交换的变量作为实参传递给函数的形参,在函数体中完成交换值的过程,这种做法能否实现程序要求?,第4章 函数与预处理,例4.3 源程序,#include void swap(int x, int y); void main() int a, b; a = 10; b = 20; swap(a, b); cout a “, “ b endl; ,程序运行结果为: 10,20,void swap(int x, int y) int temp; temp = x

7、; x = y; y = temp; ,注意:值传递时,函数的实参与形参在内存中占用不同的存储空间,值只能由实参传递给形参,而形参的变化并不会影响实参。因此不能完成程序功能。,第4章 函数与预处理,4.2 函数的参数传递,4.2.2 使用引用 1. 引用的概念 引用是一种特殊的变量,可以认为是一个变量的别名。 定义引用的一般格式: 类型说明符 首先定义变量a,并初始化为1,然后定义引用b,并初始化为a,即b是a的别名,因此a和b是同一个单元。 注意:定义引用时一定要初始化,指明该引用变量是谁的别名。,第4章 函数与预处理,例4.4 引用的使用,#include void main() int

8、a=1; int c=10; int ,程序运行结果: 1,1,10 10,10,10 20,20,10,定义引用b,并将其作为a的别名,将c的值赋给b,不是将b作为c的别名,第4章 函数与预处理,4.2 函数的参数传递,4.2.2 使用引用(续一) 2. 引用作为函数的参数 例4.5 写一个函数,用引用作为参数,交换函数中两个变量的值。,#include void swap(int x, int y); void main() int a, b; a = 10; b = 20; swap(a, b); cout a “, “ b endl; ,void swap(int ,程序运行结果为:

9、20,10,第4章 函数与预处理,4.2 函数的参数传递,4.2.2 使用引用(续二) 例4.5程序运行过程中参数值的变化图示,注意:引用作参数时,函数的实参与形参在内存中共用存储单元,因此形参的变化会使实参同时变化。,第4章 函数与预处理,4.3 内联函数,内联函数与一般函数的区别在于它不是在调用时发生控制转移,而是在编译时将被调函数体嵌入到每一个函数调用处,节省了参数传递、控制转移等开销。对于一些规模较小、频繁调用的函数可声明为内联函数,能提高程序运行效率。 内联函数的定义: inline 类型说明符 函数名(参数及类型表) 函数体 注意:只有简单的函数才能成为内联函数,如函数体中不能有循

10、环语句和switch语句等。 内联函数的定义必须出现在内联函数第一次被调用之前。,第4章 函数与预处理,例4.6 使用内联函数,#include inline int Add(int a, int b) int x; x = a+b; return x; ,程序运行结果:10+20=30 10+50=60 50+50=100,void main() int a, b, c; a = 10; b = 20; c = Add(a,b); cout a “ + “ b “ = “ c endl; c = Add(a,50); cout a “ + 50 “ “ = “ c endl; c = Add

11、(50,50); cout “50 + 50 “ “ = “ c endl; ,第4章 函数与预处理,4.4 函数重载,在C+中可以定义多个相同名字的函数,只要它们形参的个数或类型不完全一致即可,编译程序根据实参与形参的类型及个数自动确定调用哪一个同名函数,这就是函数重载,这些同名函数称为重载函数。 例4.7 定义两个函数,分别求两个整数及两个实数的最大值。 分析:在C语言中,要定义题中的函数,只能使用两个不同名函数实现,即定义 int max1(int x, int y) double max2(double x, double y) 在C+中,可通过定义两个重载函数实现,二者同名,如下:

12、int max(int x, int y) double max(double x, double y),第4章 函数与预处理,例4.7 源程序,#include int max(int x, int y); double max(double x, double y); void main() int a=10, b=20 ,c; double x=200.3, y=400.6, z; c = max(a,b); z = max(x,y); cout c “ “ z endl; ,程序运行结果:int function float function 20,400.6,int max(int

13、x, int y) cout y) return x; else return y; double max(double x, double y) cout y) return x; else return y; ,第4章 函数与预处理,4.5 带默认参数值的函数,4.5.1 带默认参数值的函数 在函数的声明或定义中可以预先给出默认的形参值,函数调用时,按从左到右的次序将实参和形参结合,如给出对应的实参,则采用实参值,否则采用预先给出的默认形参值 。 例4.8 使用带默认参数值的函数求x的n次方(n是正整数)。,#include double power(double x=10.0, int

14、n=2); void main() cout power(3, 5) endl; cout power(3) endl; cout power() endl; ,double power(double x, int n) int i; double s=1.0; for(i=1; i=n; i+) s *= x; return s; ,第4章 函数与预处理,4.5 带默认参数值的函数,4.5.1 带默认参数值的函数(续) 注意:默认形参值必须由右向左的顺序定义。如果某个参数有默认值,则其右面的参数必须都有默认值;如果某个参数没有默认值,则其左面的参数都不能有默认值。例如: int max(in

15、t a, int b=10, int c=20); /正确 int max(int a, int b=10, int c); /错误 int max(int a=5, int b, int c=30); /错误 在后两种情况下,调用语句 x = max(20, 30); 会出错! 注意:在使用带默认参数值的函数时,只能在函数定义或函数声明中的一个位置给出默认值,不能在两个位置同时给出。还要保证在函数调用之前给出默认值。,第4章 函数与预处理,4.5 带默认参数值的函数,4.5.2 带默认参数值函数产生的二义性 例4.9 程序,#include int add(int x=5, int y=6)

16、; float add(int x=5, float y=10.0); void main() int a; float b; a= add(10,20); b= add(10); cout “a= “ a endl; cout “b= “ b endl; ,int add(int x, int y) return x+y; float add(int x, float y) return x+y; ,b=add(10)语句产生二义性,可以认为该语句是调用第一个函数,也可以是第二个,因此编译器不能确定调用的是哪一个函数。,第4章 函数与预处理,4.6 函数的嵌套调用,函数的嵌套调用是指,在执行被调用函数时,被调用函数又调用了其它函

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

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

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