




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
函数的递归调用、重载、默认参数【学习要点】1掌握递归函数的调用及其执行过程。2掌握递归算法的一般设计方法,掌握简单递归算法的实现。3掌握重载函数的概念、定义和应用。4掌握带默认值形参的概念、定义和调用规则。5掌握内联函数的定义和实质。6掌握C+程序的多文件结构、及其编译和连接方法。7掌握编译预处理命令(文件包含、宏定义、条件编译)的概念和应用。-【例题分析】1若有函数调用语句fun( a+b , (y=9, y*x) , fun( y,n,k ) ); 则其实参的个数是_。A3B4C5D6【答案】A【解析】调用函数进行值传递时,调用式中对应的实参可以是常量、变量、表达式。本题的实参分别为算术表达式、逗号表达式、函数表达式共3个。2下面描述中正确的是_。A建立内联函数的主要目的是提高程序的执行效率B建立内联函数的主要目的是减少程序文件所占用的内存C内联函数的参数传递关系与一般函数的参数传递关系不同D任意函数均可定义成为内联函数【答案】A【解析】内联函数是使用更多的存储空间,以减少执行的时间,即采用空间换取时间,以提高程序执行效率,当多次调用同一内联函数时,程序本身会增加所占用空间。除了函数体中含有循环语句、switch语句的函数不能定义为内联函数以外,其余均可定义为内联函数。内联函数的参数传递关系与一般的函数相同。3下面程序的运行结果是_。# include # define s(a) a*avoid main() int x=1, y=2, t ; t = s(x+y) ; cout t endl ; 【答案】5【解析】由于宏替换只是简单的字符替换,先用实参x+y代替形参a,而s(x+y)展开后的表达式为x+y*x+y,故程序运行结果是5。需提醒的是在进行宏定义时应注意圆括号的正确使用,本例若改为:# define s(a) (a)*(a) 后,则程序运行结果是9。4下面两个函数是否合法的重载函数_。int fc( int x , int y ) return ( x+y ) ; long fc( int x , int y ) return ( x*y ) ; 【答案】不是合法的重载函数【解析】两个函数的参数类型、个数完全一样,仅是返回类型不同,不是合法的函数重载。5下面两个函数是否合法的重载函数_。int val( int x , int y ) return ( x*y ) ; int val( int &x , int &y ) return ( x+y ) ; 【答案】不是合法的重载函数【解析】引用类型变量的使用与普通变量的使用在形式上是一样的,这使得两个函数的参数类型、个数完全一样,故不是合法的函数重载。6下面两个函数是否合法的重载函数_。int f( int x , int y ) return ( x*y ) ; int f( char x , char y ) return ( x+y ) ; 【答案】要具体问题具体分析,看看该程序中对应的调用式是否会造成二义性。【解析】这个问题需要具体分析。当C+调用一个函数时,需进行实参与形参的结合,这个结合过程要将主调函数的实参表与每个重载函数的形参表进行比较,若实参表和某一个重载函数的形参表完全匹配,则调用该重载函数;若没有找到严格的匹配函数,则C+编译器会试图通过类型转换找到一个匹配函数,此时编译器可能会发现有多个重载函数匹配,从而造成了二义性。例:调用式f( 2,2 )、f( a,b )是正确的,而对于调用式f( a,3 ),编译器无法确定将它转换为f( int , int )形式,还是f( char , char ) 形式,会造成二义性。7下面程序的运行结果是_。#include void f( int ) ;void main() f(3) ; void f( int n ) static int s = 5 ;int a = 5 ;if ( n!=0 ) s+ ; a+ ;cout n t s t a endl ;f( n-1 ) ; 【答案】第1行输出:3 6 6第2行输出:2 7 6第3行输出:1 8 68下面程序的运行结果是_。#include iostream.hvoid fun( int ) ;void main( ) int k = 5 ;fun( k ) ;cout k 0 ) fun( k-1 ) ;cout =2【答案】编写程序如下:#includeint getPower( int x , int n ) if ( n=1 ) return x ;return ( x * getPower( x , n-1 ) ) ;void main() int x , n ;cout x n ;cout x “的” n “次幂 = ” getPower( x , n ) endl ;10用递归算法实现函数:int factors ( int num , int k ); 其功能是求整数num中包含因子 k 的个数并返回,若num中不含 k 因子,则返回0。要求编写主函数main()去调用递归函数factors()。【答案】编写程序如下:#includeint factors( int num , int k ) if ( num%k != 0 ) return 0 ;return ( 1 + factors ( num/=k , k ) ) ;void main() int num , k ;cout num k ;cout “整数” num “中含有因子” k “的个数 = ” ;cout factors( num , k ) endl ;-【思考题】选择题1下面描述中正确的是_。AC+程序中各函数之间不允许直接递归调用也不允许间接递归调用BC+程序中各函数之间允许直接递归调用但不允许间接递归调用CC+程序中各函数之间不允许直接递归调用但允许间接递归调用DC+程序中各函数之间既允许直接递归调用也允许间接递归调用【答案】?2下面描述中正确的是_。A用#include命令所包含头文件的后缀不可以是“.a”B在对某个含有错误的头文件进行修改后,包含此头文件的源程序不必重新进行编译C宏名必须用大写字母表示D宏替换不占用程序的运行时间【答案】?-填空题1 编译预处理命令有三种,它们是_。【答案】?2内联函数的实质是_。【答案】?-写出下列程序的输出结果1下面程序的运行结果是_。#include void f( int ) ;void main() f(3) ; void f( int n ) static int s = 5 ;int a = 5 ;if ( n!=0 ) s+ ; a+ ;f( n-1 ) ;cout n t s t a endl ;【答案】第1行输出:?第2行输出:?第3行输出:?2下面程序的运行结果是_。#includevoid fun ( int ) ;void main() fun( 12345 ) ;cout 10 ) fun( n/10 ) ;cout n%10 ;return ;【答案】输出:?3下面程序的运行结果是_。#includevoid fun ( int ) ;void main() fun( 12345 ) ;cout endl ;void fun ( int n ) cout 10 ) fun( n/10 ) ;return ;【答案】输出:?4下面程序的运行结果是_。#include iostream.hvoid fun ( int ) ;void main( ) int k = 5 ;fun( k ) ;void fun( int k ) cout 0 ) fun( k-1 ) ;cout k ;【答案】输出:?5下面程序的运行结果是_。#include iostream.h#define T1( x , y ) (x) * (y)#define T2( x , y ) x * yvoid main() int a , b , c1 , c2 ;a = 3 ; b = 5 ; c1 = T1( a , b ) ;c2 = T2( a , b ) ;cout c1 t c2 endl ;c1 = T1( a+2 , b+4 ) ;c2 = T2( a+2 , b+4 ) ;cout c1 t c2 endl ;c1 = 4 * T1( a+2 , b+4 ) ;c2 = 4 * T2( a+2 , b+4 ) ;cout c1 t c2 endl ;【答案】第1行输出:?第2行输出:?第3行输出:?6下面程序的运行结果是_。# include char add ( char x , char y ) cout “两个 char 型数据相加!tt” ; return ( x + y ) ; int add ( int x , int y ) cout “两个 int 型数据相加!tt” ; return ( x + y ) ; float add ( float x , float y ) cout “两个 float 型数据相加!tt” ; return ( x + y ) ; double add ( double x , double y ) cout “两个 double 型数据相加!tt” ; return ( x + y ) ; void main ( ) char a0 = 1 , b0 = 3 ;int a1 = 1 , b1 = 3 ;float a2 = 5.1 , b2 = 8.1 ;double a3 = 5.2 , b3 = 8.2 ;cout add ( a0 , b0 ) endl ;cout add ( a1 , b1 ) endl ;cout add ( a2 , b2 ) endl ;cout add ( a3 , b3 ) endl ; cout add ( 2 , 4 ) endl ;cout add ( 2.1 , 4.1 ) endl ; cout add ( A , 2 ) endl ; /cout add ( A , 2 ) endl ; /请思考:此句为何编译不通过?【答案】第1行输出:?第2行输出:?第3行输出:?第4行输出:?第5行输出:?第6行输出:?第7行输出:?7下面程序的运行结果是_。# include int add ( int x = 1 , int y = 2 , int z = 3 ) ;void main ( ) int add ( int x = 4 , int y = 5 , int z = 6 ) ; void fun ( ) ; cout add( ) endl ;cout add( 10 ) endl ;cout add( 20 , 30 ) endl ;fun( ) ;void fun ( ) cout add( ) endl ;cout add( 40 ) endl ;cout add( 50 , 60 ) endl ;int add ( int x , int y , int z ) cout x “ + ” y “ + ” z “ = ” ;return ( x + y +z ) ;【答案】第1行输出:?第2行输出:?第3行输出:?第4行输出:?第5行输出:?第6行输出:?8下面程序的运行结果是_。#includevoid fun( int b , int t ) int m ;if ( b t ) m = (b+t) / 2 ;cout m t ;fun( b , m-1 ) ;fun( m+1 , t ) ; void main() fun( 2 , 7 ) ;cout endl ;【答案】输出:?9下面程序的运行结果是_。#includevoid fun( int a ) if ( a0 ) cout “-” ; a = -a ; cout char ( a%10 + 0 ) ;if ( ( a=a/10 ) != 0 ) fun( a ) ;void main() int a = -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地税税务知识培训课件
- 2025搬迁补偿安置房屋买卖合同
- 2025年中国糖画3D浮雕造型师认证考试题库附答案
- 2025年高级保育员技能证书考试笔试试题附答案
- 2025年甘肃省武威市事业单位工勤技能考试题库(含答案)
- 借款协议借款协议
- 农产品种植技术指导及采购协议
- 西北工业大学附属中学2026届化学高三上期末学业水平测试模拟试题含解析
- 地球自转速度课件
- 时间观念:从秒表到生命的理解-小学语文教学内容创新研究
- 义务教育语文课程标准(2022)测试题带答案(20套)
- 瞬时弹性成像技术在肝病领域临床应用课件
- 贫血的护理查房新版培训课件
- YB/T 180-2000钢芯铝绞线用锌-5%铝-稀土合金镀层钢丝
- GB/T 25751-2010压缩气弹簧技术条件
- GB/T 13947-1992电子元器件塑料封装设备通用技术条件
- 学院绩效考核办法和考核细则
- 宗族祠堂的当代文化价值
- 《HSK标准教程1》第3课课件
- GB∕T 3185-2016 氧化锌(间接法)
- DB37∕T 5023-2014 非透明幕墙建筑外保温系统应用技术规程
评论
0/150
提交评论