欢迎来到天天文库
浏览记录
ID:5861405
大小:94.50 KB
页数:6页
时间:2017-12-26
《作业━━第 3 章(2)━━函数的递归调用、重载、默认参数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、函数的递归调用、重载、默认参数【学习要点】1.掌握递归函数的调用及其执行过程。2.掌握递归算法的一般设计方法,掌握简单递归算法的实现。3.掌握重载函数的概念、定义和应用。4.掌握带默认值形参的概念、定义和调用规则。5.掌握内联函数的定义和实质。6.掌握C++程序的多文件结构、及其编译和连接方法。7.掌握编译预处理命令(文件包含、宏定义、条件编译)的概念和应用。-----------------------------------------------------------------------
2、--------------------------------------------------------------------------【例题分析】1.若有函数调用语句fun(a+b,(y=9,y*x),fun(y,n,k));则其实参的个数是______。A.3B.4C.5D.6【答案】A【解析】调用函数进行值传递时,调用式中对应的实参可以是常量、变量、表达式。本题的实参分别为算术表达式、逗号表达式、函数表达式共3个。2.下面描述中正确的是______。A.建立内联函数的主要目的是提高
3、程序的执行效率B.建立内联函数的主要目的是减少程序文件所占用的内存C.内联函数的参数传递关系与一般函数的参数传递关系不同D.任意函数均可定义成为内联函数【答案】A【解析】内联函数是使用更多的存储空间,以减少执行的时间,即采用空间换取时间,以提高程序执行效率,当多次调用同一内联函数时,程序本身会增加所占用空间。除了函数体中含有循环语句、switch语句的函数不能定义为内联函数以外,其余均可定义为内联函数。内联函数的参数传递关系与一般的函数相同。3.下面程序的运行结果是______。#include
4、ostream.h>#defines(a)a*avoidmain(){intx=1,y=2,t;t=s(x+y);cout<5、y);}longfc(intx,inty){return(x*y);}【答案】不是合法的重载函数【解析】两个函数的参数类型、个数完全一样,仅是返回类型不同,不是合法的函数重载。5.下面两个函数是否合法的重载函数______。intval(intx,inty){return(x*y);}intval(int&x,int&y){return(x+y);}【答案】不是合法的重载函数【解析】引用类型变量的使用与普通变量的使用在形式上是一样的,这使得两个函数的参数类型、个数完全一样,故不是合法的函数重载。6.6、下面两个函数是否合法的重载函数______。intf(intx,inty){return(x*y);}intf(charx,chary){return(x+y);}【答案】要具体问题具体分析,看看该程序中对应的调用式是否会造成二义性。【解析】这个问题需要具体分析。当C++调用一个函数时,需进行实参与形参的结合,这个结合过程要将主调函数的实参表与每个重载函数的形参表进行比较,若实参表和某一个重载函数的形参表完全匹配,则调用该重载函数;若没有找到严格的匹配函数,则C++编译器会试图通过类型转换找到一个匹7、配函数,此时编译器可能会发现有多个重载函数匹配,从而造成了二义性。例:调用式f(2,2)、f('a','b')是正确的,而对于调用式f('a',3),编译器无法确定将它转换为f(int,int)形式,还是f(char,char)形式,会造成二义性。7.下面程序的运行结果是______。#includevoidf(int);voidmain(){f(3);}voidf(intn){staticints=5;inta=5;if(n!=0){s++;a++;cout<8、’<0)fun(k-1);cout<
5、y);}longfc(intx,inty){return(x*y);}【答案】不是合法的重载函数【解析】两个函数的参数类型、个数完全一样,仅是返回类型不同,不是合法的函数重载。5.下面两个函数是否合法的重载函数______。intval(intx,inty){return(x*y);}intval(int&x,int&y){return(x+y);}【答案】不是合法的重载函数【解析】引用类型变量的使用与普通变量的使用在形式上是一样的,这使得两个函数的参数类型、个数完全一样,故不是合法的函数重载。6.
6、下面两个函数是否合法的重载函数______。intf(intx,inty){return(x*y);}intf(charx,chary){return(x+y);}【答案】要具体问题具体分析,看看该程序中对应的调用式是否会造成二义性。【解析】这个问题需要具体分析。当C++调用一个函数时,需进行实参与形参的结合,这个结合过程要将主调函数的实参表与每个重载函数的形参表进行比较,若实参表和某一个重载函数的形参表完全匹配,则调用该重载函数;若没有找到严格的匹配函数,则C++编译器会试图通过类型转换找到一个匹
7、配函数,此时编译器可能会发现有多个重载函数匹配,从而造成了二义性。例:调用式f(2,2)、f('a','b')是正确的,而对于调用式f('a',3),编译器无法确定将它转换为f(int,int)形式,还是f(char,char)形式,会造成二义性。7.下面程序的运行结果是______。#includevoidf(int);voidmain(){f(3);}voidf(intn){staticints=5;inta=5;if(n!=0){s++;a++;cout<8、’<0)fun(k-1);cout<
8、’<0)fun(k-1);cout<
此文档下载收益归作者所有