版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.,C+第 3章函数作业 参考答案,.,3-2 观察下面程序的运行输出,与你设想的有何不同?仔细体会引用的用法。,#include using namespace std; int main() int intOne; int ,.,int intTwo=8; rSomeRef=intTwo; coutnintOne:tintOneendl; coutintTwo:tintTwoendl; coutrSomeRef:trSomeRefendl; return 0; ,.,.,引用:是一种特殊类型的变量,可以认为是另一个变量的别名,即引用名与被引用的变量名所对应的是同一个储存单元,所以通过引用名
2、对其储存单元所做的一切操作相当于作用于变量名所对应的储存单元。 注意: 声明一个引用的同时需用已知对象对其进行初始化; 引用被声明后,所指向对象不能更改。,.,.,3-3 比较值传递与引用传递的相同点与不同点。,【解】 相同点: 均是函数的参数传递,即函数被调用时形参与实参结合的过程。 不同点: 值传递是指在调用函数时将实参复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实参。值传递本质上传的是实参表达式。 引用传递是指在调用函数时将实参的地址传递到函数中,这样在函数中对参数所进行的修改,将影响到实参。引用传递本质上传的是实参地址。,.,.,3-4 什么叫内联函数?它有哪些特
3、点?,【解】内联函数:在定义时用关键字inline修饰,它不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。 特点: 编译前,有函数的结构,编译后,却不具备函数的性质; 编译时用函数体替换调用处的函数名,节省参数传递、控制转移等开销; 不能是递归调用的函数; 函数功能简单、规模小,不存在while和switch等复杂的结构且一般只有15条语句; 只能先定义后使用;,.,.,3-5 函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗?,【解】不必一致; 对有形参函数: 函数原型中的形参表只要求包含完整的类型信息,即形参的类型与位置,对形参名不作要求,不必与函数
4、定义一致,甚至可以省略; 函数定义中的形参表要考虑形参的类型、位置和形参名,形参名不能省略; 函数调用中的实参表只要求实参的类型和位置与函数的定义一致,对参数名不作要求,若函数是带默认形参的函数,函数调用时实参与形参个数还可以不相同。,.,.,3-6 调用被重载的函数时,通过什么来区分被调用的是哪个函数?,【解】函数成功被调用,函数名要正确,更重要的是函数的形参表与调用中函数的实参表的参数类型与顺序要吻合(个数相同与否要看函数有没有默认形参)。重载函数的函数名相同,因此,区分重载函数的只能是函数的外部接口形参表。所以,调用被重载函数时,是通过函数形参的类型与个数来确定被调函数。特别注意,不能通
5、过返回值的类型和形参名来区分重载函数。,.,.,3-7 完成函数。参数为两个unsigned short int 型数,返回值为第一个参数除以第二个参数的结果,数据类型为short int;如果第二个参数为0,则返回值为-1。在主程序中实现输入输出。,.,【解】编写以下程序,实现上述功能: #include using namespace std; short divide(unsigned short a,unsigned short b) if(b=0) return -1; else return a/b; /函数定义 void main() unsigned short a,b; co
6、utab; couta/b=divide(a,b)endl(b=0时为-1)endl; ,.,运行结果截图如下:,.,下面观察以下两个运行结果截图:,观察发现这两个结果并不是我们想要看到的,因此,以上程序有待改进。,.,【解】改进以上程序: #include using namespace std; double divide(unsigned short a,unsigned short b) if(b=0) return -1; else return a/double(b); /更改函数返回值类型,b强制转换为double类型 void main() unsigned short a,b
7、; coutab; couta/b=divide(a,b)endl(b=0时为-1)endl; ,.,验证改进效果截图如下:,.,.,.,【解】编写以下程序,实现华氏温度与摄氏温度的转换: #include using namespace std; double FtoC(double F) double C; C=5/double(9)*(F-32); /注意分数运算 return C; void main() double T; coutT; coutT=T=FtoC(T)endl; ,.,运行结果截图如下:,.,25,.,26,3-8,#include using namespace s
8、td; void main() double f,c; coutf; c=(f-32)*5/9; cout对应的摄氏温度为:cendl; ,.,27,.,.,29,写成函数形式,#include using namespace std; double faToCel(double f) return (f-32)*5/9); void main() float f; coutf; cout对应的摄氏温度为:faToCel(f)endl; ,.,30,.,.,32,3_9 编写函数判别一个数是否是质数,在主程序中实现输入输出。,.,33,#include using namespace std;
9、 bool prime(int num) bool flag; flag=true; for(int i=2; inum;i+) if(num%i=0) flag=false; break; return flag; ,.,34,void main() int num ; coutnum; if(prime(num)=true) coutnum是质数endl; else coutnum不是质数endl; ,.,.,36,提高了效率,#include #include using namespace std; bool prime(int num) bool flag; flag=true; i
10、nt k=sqrt(num); for(int i=2; i=k;i+) if(num%i=0) flag=false; break; return flag; ,.,37,void main() int num ; coutnum; if(prime(num)=true) coutnum是质数endl; else coutnum不是质数endl; ,.,38,.,39,.,40,.,41,3-10,最大公约数:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。例如: 12
11、的约数有:1,2,3,4,6,12; 18的约数有:1,2,3,6,9,18。12和18的公约数有:1,2,3,6. 6是12和18的最大公约数,.,42,3-10,最小公倍数:两个或两个以上的数公有的倍数叫做这几个数的公倍数,其中最小的一个叫做这几个数的最小公倍数。 例如: 12的倍数有:12,24,36,48,60,72,84,18的倍数有:18,36,54,72,90, 2和18的公倍数有:36,72,. 其中36是12和18的最小公倍数 。,.,3-10 编写函数求两个整数的最大公约数和最小公倍数。,.,【解】编写以下程序,求两个正整数的最大公约数和最小公倍数:,#include us
12、ing namespace std; int GCD(int a,int b) int i,j; j=(a=1;i-) if(a%i=0 /定义最小公倍数函数,.,void main() int a,b; coutab; couta“和”b“的最大公约数为GCD(a,b)endl; couta和b的最小公倍数为LCM(a,b)endl; ,.,运行结果截图如下:,.,.,3-11 什么叫做嵌套调用?什么叫做递归?,【解】函数允许嵌套调用,如果函数1调用了函数2,函数2在调用函数3,便形成了函数的嵌套调用。函数可以直接或间接地调用自身,成为递归调用。,嵌套调用,递归调用,.,.,.,#inclu
13、de using namespace std; int Sum(int n) if(n=1) return 1; else return n+Sum(n-1); /直接递归调用 void main() int n; do coutn; while(n=0); /避免输入负数或0 cout1+2+.+n=Sum(n)endl; ,【解】编写以下程序,求前n个正整数之和:,.,运行结果截图如下:,.,.,.,#include using namespace std; int Fib(int n) if(n=1|n=2) return 1; else return Fib(n-1)+Fib(n-2); /直接递归调用 void main() int n; do coutn; while(n=0); coutFibonacci(n)=Fib(n)endl; ,【解】编写以下程序,求Fibonacci级数:,.,运行结果截图如下:,.,.,附加题,.,请将划线处缺失的部分补充完整(你有几种填写方法?不允许修改程序其他地方),#include using namespace std; class Cat public: Cat(int initAge)age=initAge; Cat() ;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 疫情应急预案及演练(3篇)
- 社群酒类营销方案范文(3篇)
- 老干妈营销方案摘要(3篇)
- 莆田城市护栏施工方案(3篇)
- 车间室内消火栓施工方案(3篇)
- 配镜顾客营销方案(3篇)
- 钢结构半夜施工方案(3篇)
- 防冰冻应急预案-乡镇(3篇)
- 隧道钢板喷漆施工方案(3篇)
- 餐饮自助营销方案范文(3篇)
- 2026年江苏省苏州市《保安员证》考试题库含答案(完整)
- 2025年MLED直显产业白皮书(节选)
- 2000年山东省青岛市中考数学试题【含答案解析】
- 全媒体运营师职业技能竞赛题(附答案)
- DB65╱T 3285-2011 防雷装置检测技术规范
- 签订生态岗位协议书
- 车位抵账合同协议
- 人教版八年级数学上册轴对称《最短路径问题》 教学课件
- 220kV变电站电气设备常规交接试验方案
- 100以内两位数进位加法退位减法计算题-(直接打印版)
- (正式版)SH∕T 3541-2024 石油化工泵组施工及验收规范
评论
0/150
提交评论