




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章函数,课程内容安排,函数的概念、分类和组成。函数的定义、声明和原型。函数的调用和递归调用。内联函数的应用。函数的综合应用。,函数的基本概念,简单的说,函数就是对复杂问题的一种“自顶向下,逐步求精”思想的体现。用户可以将一个大而复杂的程序分解为若干个相对独立而且功能单一的小块程序(函数)进行编写,并通过在各个函数之间进行调用来实现总体的功能,函数的组成,一般的说,函数由四部分构成:返回类型、函数名、参数列表和函数体。函数名就是函数的名字,即函数的标识符。既然是标识符,就必须遵守标识符的命名规则。同变量的标识符相同,函数的标识符也是只能由字母、数字以及下划线组成,并且不能以数字开头。,声明函数,函数声明的作用就是告诉调用者如何使用该函数,即函数接受什么类型的参数,参数的个数,以及函数的返回类型。函数声明只是函数定义的一部分,缺少函数体。在C+中,声明函数的一般形式如下所示:类型说明符函数名(参数列表);其中,类型说明符指明了本函数的类型,函数的类型实际上是函数返回值的类型。而函数名即一个符合C+语法要求的标识符。,定义函数,一个函数的定义由返回类型、函数名、参数列表和函数体组成。前面的三个部分称为函数的声明,或函数原型。相对函数体来讲,也称作是函数头。函数体是一个语句块,由花括号“”和“”包围起来。例如,下面语句根据上述格式定义了一个无参函数hello。voidhello()cout”HelloWorld”;,形参和实参,一般来说,C+中函数的参数可以分为形式参数(形参)和实际参数(实参)两种。所谓实参,是指函数定义时的参数。之所以称作形参,是因为这些参数实际并不存在,只是在形式上代表运行时实际出现的参数。相对应的,所谓实参,是指函数调用时传入的参数,也是程序运行时实际存在的参数。简单地说,被调用函数与主调用函数之间的通信可以通过参数的传递来实现。,在C+中实参传递给形参时有两种方式:值传递和地址传递。其中,值传递是指实参传递给函数后,系统构建一份实参的副本,其值与实参的值相同。此后函数将针对这份副本进行操作,对原始的实参没有任何影响。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。地址传递过程中,函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,对形参做的任何操作都影响了主调函数中的实参变量。,函数参数传递,在进行函数的声明或定义后,在其他程序中就可以对该函数进行调用了。根据根据参数传递的方式不同,函数调用可分为传值调用和传址调用;根据函数是否有返回值,函数调用可分为无返回值的调用和有返回值的调用。,函数的调用,如果一个函数在其定义中又调用自身,这个过程叫作递归调用,该函数则称为递归函数。递归分为直接递归和间接递归。在递归调用中,直接递归是指函数直接调用自身,对于一个函数func而言间接递归也是递归的一种重要形式,其是指A函数调用了B函数,而B函数又调用A函数,递归,main函数,读者知道,每个C+程序都必须要有一个main()函数,main()函数也称为主函数,是C+程序中最重要的函数,所有完整可运行的C+程序都必须有一个唯一的main()函数。,内联函数,在C+中,如果在函数的声明前加上inline关键字,则称为内联函数。对于内联函数,编译器不创建真实的函数,而只是在函数调用处展开(即将函数的代码直接复制到调用处)。这样,在“调用”函数时就不用跳转了,避免了使用真实函数的代价。例如,对于add函数,如果其声明为:inlineintadd(inta,intb);则在函数调用处,例如:intx=add(1,2);编译后,实际的代码是:intx=1+2;,小结,本章详细讲解的内容主要包括函数的定义、声明和调用,这是在实际程序中使用较多的。通过函数,可以将实现某种功能的一系列语句组织成一个整体,以后使用时只要使用函数名,并传入相应的参数即可。而不必重复实现该功能。因此,本章还重点讲述函数的参数传递、嵌套调用和递归调用等。此外,本章还就内联函数做了简要介绍。,习题,【题目103】下列程序的输出结果是多少?#includeusingnamespacestd;intfun(intx,inty)returnx*y;intmain()intk=5;coutfun(k+,+k)endl;system(“pause”);return0;【分析】该试题主要考查函数的调用。上述程序中的函数fun包含两个参数,在调用时将实参传递给形参。读者需要注意实参分别为k+和+k,进行参数传递后,k的值都将加1。因此,传递到函数fun后,x和y都变为6,运行函数后,得到函数返回值36。因此,该程序的输出为36,【题目104】已知三角形的三边,求三角形面积,将其编写成一个函数,在main函数中调用该函数。例如,运行该程序段后输入三角形的三边分别为345,输出三角形面积如下图8.29所示。,【题目105】编写函数,重复打印给定字符n次。例如,在主函数中调用该函数后,给出打印字符和次数,该函数将在屏幕上输出指定字符。【分析】该试题主要考查字符串参数在函数调用过程中的传递。根据前面章节的学习,读者知道字符的输出可以通过输出流cout来实现,但更好的办法是通过putchar函数来实现。指定输出字符的次数后,通过一个循环语句来实现即可。同时,在主函数中要指定需打印的字符,也可以用函数getchar来实现接收。【题目107】编写一个递归函数,将输入的整数按字符串形式正序输出。例如:输入12345,输出:12345。,【题目106】下面程序段的运行结果是多少?#includeusingnamespacestd;intfunc(intx)intp;if(x=0|x=1)return(3);p=x-func(x-2);returnp;intmain()cout1)return1;elsereturnn*fun(n*2);elsereturnn*fun(n-1);【分析】该试题主要考查递归函数的定义。在上述4个选项中,选项A中递归调用fun(n+1)将导致参数越来越大,从而无法进行回归;选项C和选项D都不能执行到递归,无法进行递推,都不符合递归函数的定义;只有选项B既能递推也能回归,因此选项B是正确的。,【题目110】编写一个函数,用于检验用户输入的一个字符是大写字母还是小写字母或不是26个英文字母。【题目111】编写一个函数,将华氏温度转换为摄氏温度,公式为C=(F-32)*5/9;并在主函数中调用。【题目112】编写一个函数,利用非递归的方法求斐波那契数列第n项。【题目113】编写一个函数,利用递归的方法求斐波那契数列第n项。,【题目114】编写函数利用递归的方法计算x的n阶勒让德多项式的值。该公式如下:【题目115】设计两个求面积的函数:area();/求圆面积,需传递一个参数area();/求矩形面积,需传递两个参数然后自行输入数据进行测试。,【题目116】编写一个函数求满足
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肾内科医生外出进修汇报
- 消防基本常识与公共基础知识题库(含答案)
- 2025年事业单位工勤技能-海南-海南水土保持工三级(高级工)历年参考题库含答案解析
- 2025-2030中国糖蜜行业供需态势及消费趋势预测报告
- 2025年事业单位工勤技能-浙江-浙江医技工三级(高级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河南-河南防疫员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-河南-河南管道工一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-河南-河南林木种苗工三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-河北-河北防疫员五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-江西-江西环境监测工四级(中级工)历年参考题库含答案解析(5套)
- 2024年工会财务知识竞赛试题及答案
- 26个英语字母描红练习(素材)-小学英语
- DL∕T 686-2018 电力网电能损耗计算导则
- 糖尿病医疗广告宣传指南
- 2023年河南省中考数学试卷及答案
- 中外民歌欣赏(高中音乐课件)
- Revit-基础教程课件
- 大学美育(第二版) 课件 第五单元:书法艺术
- 消防工程技术咨询合同
- 从《史记》看司马迁的命运观
- 高中新外研版单词总表(必修123+选修1234)
评论
0/150
提交评论