




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章 函数3-1 C+中的函数是什么?什么叫主调函数,什么叫被调函数,二者之间有什么关系?如何调用一个函数? 解: 一个较为复杂的系统往往需要划分为若干子系统,高级语言中的子程序就是用来实现这种模块划分的。C和C+语言中的子程序就体现为函数。调用其它函数的函数被称为主调函数,被其它函数调用的函数称为被调函数。一个函数很可能既调用别的函数又被另外的函数调用,这样它可能在某一个调用与被调用关系中充当主调函数,而在另一个调用与被调用关系中充当被调函数。调用函数之前先要声明函数原型。按如下形式声明:类型标识符 被调函数名 (含类型说明的形参表);声明了函数原型之后,便可以按如下形式调用子函数:函数名(实参列表)3-2 观察下面程序的运行输出,与你设想的有何不同?仔细体会引用的用法。源程序:#include int main()int intOne;int &rSomeRef = intOne;intOne = 5;cout intOne:tt intOne endl;cout rSomeRef:t rSomeRef endl;int intTwo = 8;rSomeRef = intTwo; / not what you think!cout nintOne:tt intOne endl;cout intTwo:tt intTwo endl;cout rSomeRef:t rSomeRef endl;return 0;程序运行输出:intOne: 5rSomeRef: 5intOne: 8intTwo: 8rSomeRef: 83-3 比较值调用和引用调用的相同点与不同点。解:值调用是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这一过程是参数值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参。引用调用将引用作为形参,在执行主调函数中的调用语句时,系统自动用实参来初始化形参。这样形参就成为实参的一个别名,对形参的任何操作也就直接作用于实参。3-4 什么叫内联函数?它有哪些特点?解:定义时使用关键字 inline的函数叫做内联函数;n 编译器在编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销;n 内联函数体内不能有循环语句和switch语句;n 内联函数的定义必须出现在内联函数第一次被调用之前;n 对内联函数不能进行异常接口声明;3-5 函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗?解: 不必一致,所有的参数是根据位置和类型而不是名字来区分的。 3-6 重载函数时通过什么来区分?解:重载的函数的函数名是相同的,但它们的参数的个数和数据类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。 3-7 编写函数,参数为两个unsigned short int型数,返回值为第一个参数除以第二个参数的结果,数据类型为short int;如果第二个参数为0,则返回值为-1。在主程序中实现输入输出。源程序:#include short int Divider(unsigned short int a, unsigned short int b)if (b = = 0)return -1;elsereturn a/b;typedef unsigned short int USHORT;typedef unsigned long int ULONG;int main()USHORT one, two;short int answer;cout one;cout two;answer = Divider(one, two);if (answer -1)cout Answer: answer;elsecout Error, cant divide by zero!;return 0;程序运行输出:Enter two numbers.Number one:8Number two:2Answer: 43-8 编写函数把华氏温度转换为摄氏温度,公式为:C = (F - 32) * 5/9; 在主程序中提示用户输入一个华氏温度,转化后输出相应的摄氏温度。(略) 3-9 编写函数判断一个数是否是质数,在主程序中实现输入、输出。源程序: #include #include int prime(int i); / 判一个数是否是质数的函数声明void main()int i;cout i;if (prime(i) / 函数调用cout i 是质数. endl;elsecout i 不是质数. endl;int prime(int i) / 判一个数是否是质数的函数实现(定义)int j,k,flag;flag = 1;k = sqrt(i);for (j = 2; j = k; j+)if(i%j = 0)flag = 0;break;if (flag) return 1;else return 0;程序运行输出:请输入一个整数:11511151是质数. 3-10 编写函数求两个整数的最大公约数和最小公倍数。源程序:#include #include int fn1(int i,int j); / 求最大公约数的函数声明void main()int i,j,x,y;cout i ;cout j ;x = fn1(i,j); / 函数调用y = i * j / x;cout i 和 j 的最大公约数是: x endl;cout i 和 j 的最小公倍数是: y endl;int fn1(int i, int j) / 求最大公约数的函数实现int temp;if (i j)temp = i;i = j;j = i;while(j != 0)temp = i % j;i = j;j = temp;return i;程序运行输出:请输入一个正整数:120请输入另一个正整数:72120和72的最大公约数是:24120和72的最小公倍数是:3603-11 什么叫作嵌套调用?什么叫作递归调用?解:函数允许嵌套调用,如果函数1调用了函数2,函数2再调用函数3,便形成了函数的嵌套调用。函数可以直接或间接地调用自身,称为递归调用。 3-12 在主程序中提示输入整数n,编写函数用递归的方法求1 + 2 + + n的值。源程序:#include int fn1(int i);void main()int i;cout i ;cout 从1累加到 i 的和为: fn1(i) endl;int fn1(int i) / 递归函数的实现if (i = = 1) return 1;else return (i + fn1(i -1) );程序运行输出: 请输入一个正整数:100从1累加到100的和为:5050 3-13 编写递归函数GetPower(int x, int y)计算x的y次幂, 在主程序中实现输入输出。源程序:#include long GetPower(int x,int y);int main()int number, power;long answer;cout number;cout power;answer = GetPower(number,power);cout number to the power th power is answer 2; fib(1) = fib(2) = 1;观察递归调用的过程。(略) 3-15 用递归的方法编写函数求n阶勒让德多项式的值,在主程序中实现输入、输出。程序代码: #include float p(int n, int x);void main()int n,x;cout n;cout x;cout n = n endl;cout x = x endl;cout P n ( x ) = p(n,x) endl;float p(int n, int x) / 递归函数的实现if (n = = 0)return 1;else if (n = = 1)return x;elsereturn (2*n-1)*x*p(n-1,x) - (n-1)*p(n-2,x) /n ;程序运行输出:请输入正整数n:1请输入正整数x:2n = 1x = 2P1(2) = 2请输入正整数n:3请输入正整数x:4n = 3x = 4P3(4) = 154补充:编写4个同名函数Max1,可分别求取2个整数、3个整数、2个单精度数、3个双精度数的最大值,实现函数重载。并在main()函数中测试函数功能。(重载)源程序:#include int Max1 (int a,int b);int Max1 (int a,int b,int c);float Max1 (float a,float b); float Max1 (float a,float b,float c);void main()int choose,x1,y1,z1;float x2,y2,z2;while(1) cout“请选择1. 求取2个整数最大值”endl;cout“请选择2. 求取3个整数最大值”endl;cout“请选择3. 求取2个浮点数最大值”endl;cout“请选择4. 求取3个浮点数最大值”endl;coutchoose;switch(choose)case 1: cout x1y1;cout 最大值为 Max1(x1,y1) endl;break;case 2: cout x1y1z1;cout 最大值为 Max1(x1,y1,z1) endl;break;case 3: cout x2y2;cout 最大值为 Max1(x2,y2) endl;break;case 4: cout x2y2z2;cout 最大值为 Max1(x2,y2,z2) endl;break; default: exit(0);cout -b) return a; else return b;int Max1 (int a,int b,int c) if (ab) if(ac)return a; else return c; else if(bc)return b; else return c;float Max1 (float a,float b) if (ab) return a; else return b;float Max1 (float a,float b,float c) if (ab) if(ac)return a; else return c; else if(bc)return b; else return c;知识点及作业: 递归算法:3-14、3-15 引用作为形参:P77利用“引用调用”编写函数swap(),实现两个单精度数据的交换。 内联函数:编写内联函数,求圆的周长Circle();并由main函数实现调用(半径由main函数录入) 带默认形参值的函数:读程序,分析结果#include using namespace std;int add(int x=1,int y=2); /默认形
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水库应急排洪方案
- 水粉基础知识培训课件
- 施工区域物品堆放与管理方案
- 混凝土耐久性检测与技术管理方案
- 糖尿病口腔医41课件
- 智算中心数据集成与清洗方案
- 水的奥秘课件
- 医学模式及其转变73课件
- 新教材2025人教版八年级上册 全部单词默写版
- 2025版电影制片人投资合作协议范本
- 专业公路工程知识考察试题及答案
- 陕西西安铁一中学2025届英语八下期末检测试题含答案
- 2025上半年高级软件水平考试《系统分析师(案例分析)》真题及解析
- 江西国泰集团股份有限公司考试真题2024
- 《电解质失衡课件讲解》课件
- 蜘蛛人作业培训
- 施工照片拍摄培训课件
- 网络安全运维培训内容
- 广西桉树造林技术改进及病虫害防治措施深入研究
- 经皮肾术后护理试题及答案
- 2024年内科护理学(第七版)期末考试复习题库(含答案)
评论
0/150
提交评论