C基础PPT课件第八章 函数

上传人:枫** 文档编号:590419938 上传时间:2024-09-14 格式:PPT 页数:22 大小:255.02KB
返回 下载 相关 举报
C基础PPT课件第八章 函数_第1页
第1页 / 共22页
C基础PPT课件第八章 函数_第2页
第2页 / 共22页
C基础PPT课件第八章 函数_第3页
第3页 / 共22页
C基础PPT课件第八章 函数_第4页
第4页 / 共22页
C基础PPT课件第八章 函数_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《C基础PPT课件第八章 函数》由会员分享,可在线阅读,更多相关《C基础PPT课件第八章 函数(22页珍藏版)》请在金锄头文库上搜索。

1、第八章 函数 1-2课程内容安排课程内容安排函数的概念、分类和组成。函数的概念、分类和组成。函数的定义、声明和原型。函数的定义、声明和原型。函数的调用和递归调用。函数的调用和递归调用。内联函数的应用。内联函数的应用。函数的综合应用。函数的综合应用。1-3函数的基本概念函数的基本概念 简单的说,函数就是对复杂问题的一种简单的说,函数就是对复杂问题的一种“自顶向下,逐自顶向下,逐步求精步求精”思想的体现。用户可以将一个大而复杂的程序思想的体现。用户可以将一个大而复杂的程序分解为若干个相对独立而且功能单一的小块程序(函数)分解为若干个相对独立而且功能单一的小块程序(函数)进行编写,并通过在各个函数之

2、间进行调用来实现总体进行编写,并通过在各个函数之间进行调用来实现总体的功能的功能 1-4函数的组成函数的组成 一般的说,函数由四部分构成:返回类型、函数名、参一般的说,函数由四部分构成:返回类型、函数名、参数列表和函数体。函数名就是函数的名字,即函数的标数列表和函数体。函数名就是函数的名字,即函数的标识符。既然是标识符,就必须遵守标识符的命名规则。识符。既然是标识符,就必须遵守标识符的命名规则。同变量的标识符相同,函数的标识符也是只能由字母、同变量的标识符相同,函数的标识符也是只能由字母、数字以及下划线组成,并且不能以数字开头。数字以及下划线组成,并且不能以数字开头。 1-5声明函数声明函数

3、函数声明的作用就是告诉调用者如何使用该函数,即函数接函数声明的作用就是告诉调用者如何使用该函数,即函数接受什么类型的参数,参数的个数,以及函数的返回类型。函受什么类型的参数,参数的个数,以及函数的返回类型。函数声明只是函数定义的一部分,缺少函数体。在数声明只是函数定义的一部分,缺少函数体。在C+中,声中,声明函数的一般形式如下所示:明函数的一般形式如下所示:类型说明符类型说明符 函数名(参数列表)函数名(参数列表);其中,类型说明符指明了本函数的类型,函数的类型实际上其中,类型说明符指明了本函数的类型,函数的类型实际上是函数返回值的类型。而函数名即一个符合是函数返回值的类型。而函数名即一个符合

4、C+语法要求的语法要求的标识符。标识符。 1-6定义函数定义函数 一一个个函函数数的的定定义义由由返返回回类类型型、函函数数名名、参参数数列列表表和和函函数数体体组组成成。前前面面的的三三个个部部分分称称为为函函数数的的声声明明,或或函函数数原原型型。相相对对函函数数体体来来讲讲,也也称称作作是是函函数数头头。函函数数体体是是一一个个语语句句块,由花括号块,由花括号“”和和“”包围起来。包围起来。例如,下面语句根据上述格式定义了一个无参函数例如,下面语句根据上述格式定义了一个无参函数hello。void hello()cout”Hello World”;1-7形参和实参形参和实参 一般来说,一

5、般来说,C+中函数的参数可以分为形式参数(形参)中函数的参数可以分为形式参数(形参)和实际参数(实参)两种。所谓实参,是指函数定义时和实际参数(实参)两种。所谓实参,是指函数定义时的参数。之所以称作形参,是因为这些参数实际并不存的参数。之所以称作形参,是因为这些参数实际并不存在,只是在形式上代表运行时实际出现的参数。在,只是在形式上代表运行时实际出现的参数。相对应的,所谓实参,是指函数调用时传入的参数,也相对应的,所谓实参,是指函数调用时传入的参数,也是程序运行时实际存在的参数。简单地说,被调用函数是程序运行时实际存在的参数。简单地说,被调用函数与主调用函数之间的通信可以通过参数的传递来实现。

6、与主调用函数之间的通信可以通过参数的传递来实现。 1-8在在C+中实参传递给形参时有两种方式:值传递和地址传递。中实参传递给形参时有两种方式:值传递和地址传递。其中,值传递是指实参传递给函数后,系统构建一份实参的其中,值传递是指实参传递给函数后,系统构建一份实参的副本,其值与实参的值相同。此后函数将针对这份副本进行副本,其值与实参的值相同。此后函数将针对这份副本进行操作,对原始的实参没有任何影响。操作,对原始的实参没有任何影响。值传递过程中,被调函数的形式参数作为被调函数的局部变值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进量处理,即在

7、堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。来的实参的值,从而成为了实参的一个副本。地址传递过程中,函数的形式参数虽然也作为局部变量在堆地址传递过程中,函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。函数对形参的任何操作都被处理成间接的实参变量的地址。函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,对形参做的任何操作都影响了主调函数中的实正因为如

8、此,对形参做的任何操作都影响了主调函数中的实参变量。参变量。 函数参数传递函数参数传递 1-9在进行函数的声明或定义后,在其他程序中就可以对该函数进行在进行函数的声明或定义后,在其他程序中就可以对该函数进行调用了。根据根据参数传递的方式不同,函数调用可分为传值调调用了。根据根据参数传递的方式不同,函数调用可分为传值调用和传址调用;根据函数是否有返回值,函数调用可分为无返回用和传址调用;根据函数是否有返回值,函数调用可分为无返回值的调用和有返回值的调用。值的调用和有返回值的调用。 函数的调用函数的调用 1-10如果一个函数在其定义中又调用自身,这个过程叫作递如果一个函数在其定义中又调用自身,这个

9、过程叫作递归调用,该函数则称为递归函数。递归分为直接递归和归调用,该函数则称为递归函数。递归分为直接递归和间接递归。间接递归。 在递归调用中,直接递归是指函数直接调用自身,对于在递归调用中,直接递归是指函数直接调用自身,对于一个函数一个函数func而言而言 间接递归也是递归的一种重要形式,其是指间接递归也是递归的一种重要形式,其是指A函数调用函数调用了了B函数,而函数,而B函数又调用函数又调用A函数函数 递归递归 1-11main函数函数 读者知道,每个读者知道,每个C+程序都必须要有一个程序都必须要有一个main()函数,函数,main()函数也称为主函数,是函数也称为主函数,是C+程序中最

10、重要的函数,所有程序中最重要的函数,所有完整可运行的完整可运行的C+程序都必须有一个唯一的程序都必须有一个唯一的main()函数。函数。 1-12内联函数内联函数 在在C+中,如果在函数的声明前加上中,如果在函数的声明前加上inline关键字,则称为关键字,则称为内联函数。对于内联函数,编译器不创建真实的函数,而内联函数。对于内联函数,编译器不创建真实的函数,而只是在函数调用处展开(即将函数的代码直接复制到调用只是在函数调用处展开(即将函数的代码直接复制到调用处)。这样,在处)。这样,在“调用调用”函数时就不用跳转了,避免了使函数时就不用跳转了,避免了使用真实函数的代价。例如,对于用真实函数的

11、代价。例如,对于add函数,如果其声明为:函数,如果其声明为:inline int add ( int a, int b );则在函数调用处,例如:则在函数调用处,例如:int x = add ( 1, 2 );编译后,实际的代码是:编译后,实际的代码是:int x = 1 + 2;1-13小结小结 本章详细讲解的内容主要包括函数的定义、声明和调用,本章详细讲解的内容主要包括函数的定义、声明和调用,这是在实际程序中使用较多的。通过函数,可以将这是在实际程序中使用较多的。通过函数,可以将实现某种功能的一系列语句组织成一个整体,以后实现某种功能的一系列语句组织成一个整体,以后使用时只要使用函数名,

12、并传入相应的参数即可。使用时只要使用函数名,并传入相应的参数即可。而不必重复实现该功能。因此,本章还重点讲述函而不必重复实现该功能。因此,本章还重点讲述函数的参数传递、嵌套调用和递归调用等。此外,本数的参数传递、嵌套调用和递归调用等。此外,本章还就内联函数做了简要介绍。章还就内联函数做了简要介绍。 1-14习题习题 【题目题目103】下列程序的输出结果是多少?下列程序的输出结果是多少?#include using namespace std;int fun(int x,int y) return x*y;int main() int k=5; coutfun(k+, +k)endl; syst

13、em(“pause”); return 0;【分析分析】该试题主要考查函数的调用。上述程序中的函数该试题主要考查函数的调用。上述程序中的函数fun包含两个参数,在调用时将实参传递给形参。读者需包含两个参数,在调用时将实参传递给形参。读者需要注意实参分别为要注意实参分别为k+和和+k,进行参数传递后,进行参数传递后,k的值都的值都将加将加1。因此,传递到函数。因此,传递到函数fun后,后,x和和y都变为都变为6,运行函,运行函数后,得到函数返回值数后,得到函数返回值36。因此,该程序的输出为。因此,该程序的输出为361-15【题题目目104】已已知知三三角角形形的的三三边边,求求三三角角形形面面

14、积积,将将其其编编写写成成一一个个函函数数,在在main函函数数中中调调用用该该函函数数。例例如如,运运行行该该程程序序段段后后输输入入三三角角形形的的三三边边分分别别为为3 4 5,输输出出三三角角形形面面积如下图积如下图8.29所示。所示。1-16【题目题目105】编写函数,重复打印给定字符编写函数,重复打印给定字符n次。例如,在主函数中调次。例如,在主函数中调用该函数后,给出打印字符和次数,该函数将在屏幕上输出指定字用该函数后,给出打印字符和次数,该函数将在屏幕上输出指定字符。符。【分析分析】该试题主要考查字符串参数在函数调用过程中的传递。根据该试题主要考查字符串参数在函数调用过程中的传

15、递。根据前面章节的学习,读者知道字符的输出可以通过输出流前面章节的学习,读者知道字符的输出可以通过输出流cout来实现,来实现,但更好的办法是通过但更好的办法是通过putchar函数来实现。指定输出字符的次数后,函数来实现。指定输出字符的次数后,通过一个循环语句来实现即可。同时,在主函数中要指定需打印的通过一个循环语句来实现即可。同时,在主函数中要指定需打印的字符,也可以用函数字符,也可以用函数getchar来实现接收。来实现接收。 【题目题目107】编写一个递归函数,将输入的整数按字符串形式正序输编写一个递归函数,将输入的整数按字符串形式正序输出。例如:输入出。例如:输入12345,输出:,

16、输出:1 2 3 4 5。1-17【题目题目106】下面程序段的运行结果是多少?下面程序段的运行结果是多少?#include using namespace std;int func(int x) int p;if (x=0 | x=1) return (3);p=x- func(x-2);return p;int main( ) coutfunc(9); system(“pause”); return 0; 1-18【题目题目108】编写一个递归函数,求出:编写一个递归函数,求出:(x/1!)+(x*x*x/3!)+(5个个x相乘相乘/5!)+(2n-1)个个X相乘相乘/(2*n-1)!)的

17、值,到第的值,到第n项,项,n和和x的值由键盘输入。的值由键盘输入。【分析分析】该试题主要考查递归函数的编写及实现。在该函数该试题主要考查递归函数的编写及实现。在该函数中,只有当中,只有当x为为1时其阶乘才为时其阶乘才为0,其他时候为,其他时候为2*n-1的阶的阶乘,其次乘,其次n个个x相乘即相乘即x的(的(2n-1)次方,可以通过幂函数)次方,可以通过幂函数pow来实现。该表达式好要求和,因此使用循环语句将这来实现。该表达式好要求和,因此使用循环语句将这(2n-1)个表达式相加。因此,该程序可以编写两个函)个表达式相加。因此,该程序可以编写两个函数,一个用于实现递归,另一个求出表达式数,一个

18、用于实现递归,另一个求出表达式(2n-1)个个X相相乘乘/(2*n-1)!)的值,然后再主函数的值,然后再主函数main中调用,并通过循中调用,并通过循环求出最终值。环求出最终值。1-19【题目题目109】下列是正确的递归函数的是?下列是正确的递归函数的是?Aint fun(int n)Bint fun(int n) if (n1) return 1; if (abs(n)1) return 1; if (n1) return 1; else return n*fun(n*2); else return n*fun(n-1); 【分析分析】该试题主要考查递归函数的定义。在上述该试题主要考查递归

19、函数的定义。在上述4个选项个选项中,选项中,选项A中递归调用中递归调用fun(n+1)将导致参数越来越大,从将导致参数越来越大,从而无法进行回归;选项而无法进行回归;选项C和选项和选项D都不能执行到递归,无都不能执行到递归,无法进行递推,都不符合递归函数的定义;只有选项法进行递推,都不符合递归函数的定义;只有选项B既能既能递推也能回归,因此选项递推也能回归,因此选项B是正确的。是正确的。1-20【题目题目110】编写一个函数,用于检验用户输入的一个字符编写一个函数,用于检验用户输入的一个字符是大写字母还是小写字母或不是是大写字母还是小写字母或不是26个英文字母。个英文字母。【题目题目111】编

20、写一个函数,将华氏温度转换为摄氏温度,编写一个函数,将华氏温度转换为摄氏温度,公式为公式为C=(F-32)*5/9;并在主函数中调用。;并在主函数中调用。【题目题目112】编写一个函数,利用非递归的方法求斐波那契编写一个函数,利用非递归的方法求斐波那契数列第数列第n项。项。【题目题目113】编写一个函数,利用递归的方法求斐波那契数编写一个函数,利用递归的方法求斐波那契数列第列第n项。项。1-21【题目题目114】编写函数利用递归的方法计算编写函数利用递归的方法计算x的的n阶勒让德多阶勒让德多项式的值。该公式如下:项式的值。该公式如下:【题目题目115】设计两个求面积的函数:设计两个求面积的函数

21、: area(); /求圆面积,需传递一个参数求圆面积,需传递一个参数 area(); /求矩形面积,需传递两个参数求矩形面积,需传递两个参数然后自行输入数据进行测试。然后自行输入数据进行测试。=1)(n (x)/n P1)-(n-1(x)-Pnx1)-n(21)(n x 0)(n 1(x)Pn1-22【题目题目116】编写一个函数求满足以下条件的最大的编写一个函数求满足以下条件的最大的n: 1*2+2*2+3*2+n*21000【题目题目117】编写一个函数判定一个字符在一个字符串中出编写一个函数判定一个字符在一个字符串中出现的次数,如果该字符不出现,则返回值为现的次数,如果该字符不出现,则返回值为0。【题目题目118】在主程序中提示输入在主程序中提示输入i,编写函数用递归的方法,编写函数用递归的方法求求1+2+i的和。的和。【题目题目119】编写函数实现字符串拷贝功能。编写函数实现字符串拷贝功能。【题目题目120】编写函数将字符串按逆序存放。编写函数将字符串按逆序存放。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

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