C++3 函数习题及答案
更新时间:2023-11-30 02:30:01 阅读量: 教育文库 文档下载
- c3驾照可以开什么车推荐度:
- 相关推荐
第三章 函数
3-1 C++中的函数是什么?什么叫主调函数,什么叫被调函数,二者之间有什么关系?如何调用一个函数?
解: 一个较为复杂的系统往往需要划分为若干子系统,高级语言中的子程序就是用来实现这种模块划分的。C和C++语言中的子程序就体现为函数。调用其它函数的函数被称为主调函数,被其它函数调用的函数称为被调函数。一个函数很可能既调用别的函数又被另外的函数调用,这样它可能在某一个调用与被调用关系中充当主调函数,而在另一个调用与被调用关系中充当被调函数。
调用函数之前先要声明函数原型。按如下形式声明:
类型标识符 被调函数名 (含类型说明的形参表);
声明了函数原型之后,便可以按如下形式调用子函数:
函数名(实参列表)
3-2 观察下面程序的运行输出,与你设想的有何不同?仔细体会引用的用法。
源程序:
#include
int intOne;
int &rSomeRef = intOne;
intOne = 5;
cout << \
cout << \
int intTwo = 8;
rSomeRef = intTwo; // not what you think! cout << \cout << \cout << \return 0; }
程序运行输出:
intOne: 5 rSomeRef: 5
intOne: 8 intTwo: 8 rSomeRef: 8
3-3 比较值调用和引用调用的相同点与不同点。
解:值调用是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这一过程是参数值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参。
引用调用将引用作为形参,在执行主调函数中的调用语句时,系统自动用实参来初始化形参。这样形参就成为实参的一个别名,对形参的任何操作也就直接作用于实参。
3-4 什么叫内联函数?它有哪些特点?
解:定义时使用关键字 inline的函数叫做内联函数;
? 编译器在编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销; ? 内联函数体内不能有循环语句和switch语句;
? 内联函数的定义必须出现在内联函数第一次被调用之前; ? 对内联函数不能进行异常接口声明;
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; else
return a/b;
}
typedef unsigned short int USHORT; typedef unsigned long int ULONG; int main() {
USHORT one, two; short int answer;
cout << \cin >> one;
cout << \cin >> two;
answer = Divider(one, two); if (answer > -1)
cout << \else
cout << \return 0; }
程序运行输出:
Enter two numbers. Number one:8 Number two:2 Answer: 4
3-8 编写函数把华氏温度转换为摄氏温度,公式为:C = (F - 32) * 5/9; 在主程序中提示用户输入一个华氏温度,转化后输出相应的摄氏温度。(略)
★ 3-9 编写函数判断一个数是否是质数,在主程序中实现输入、输出。
源程序:
#include
int prime(int i); // 判一个数是否是质数的函数声明
void main()
{
int i;
cout << \请输入一个整数:\cin >> i;
if (prime(i)) // 函数调用 cout << i << \是质数.\else
cout << i << \不是质数.\
}
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; }
程序运行输出:
请输入一个整数:1151 1151是质数.
★ 3-10 编写函数求两个整数的最大公约数和最小公倍数。
源程序:
#include
int fn1(int i,int j); // 求最大公约数的函数声明
void main() {
int i,j,x,y;
cout << \请输入一个正整数:\cin >> i ;
cout << \请输入另一个正整数:\
cin >> j ;
x = fn1(i,j); // 函数调用 y = i * j / x;
cout << i << \和\的最大公约数是:\cout << i << \和\的最小公倍数是:\
}
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 请输入另一个正整数:72
120和72的最大公约数是:24 120和72的最小公倍数是:360
3-11 什么叫作嵌套调用?什么叫作递归调用?
解:函数允许嵌套调用,如果函数1调用了函数2,函数2再调用函数3,便形成了函数的嵌套调用。函数可以直接或间接地调用自身,称为递归调用。
★ 3-12 在主程序中提示输入整数n,编写函数用递归的方法求1 + 2 + ? + n的值。
源程序:
#include
int fn1(int i);
void main() {
int i;
cout << \请输入一个正整数:\cin >> i ;
cout << \从1累加到\的和为:\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 << \cin >> number;
cout << \cin >> power;
answer = GetPower(number,power);
cout << number << \return 0; }
long GetPower(int x,int y) // 递归函数的实现 {
if(y = = 1) return x; else
return (x * GetPower(x,y-1));
在 }
程序运行输出:
Enter a number: 3 To what power? 4
3 to the 4th power is 81
3-14 用递归的方法编写函数求Fibonacci 级数,公式为fib(n) = fib(n-1) + fib(n-2),n>2;
fib(1) = fib(2) = 1;观察递归调用的过程。
(略)
★ 3-15 用递归的方法编写函数求n阶勒让德多项式的值,在主程序中实现输入、输出。
程序代码:
#include
float p(int n, int x);
void main() {
int n,x;
cout << \请输入正整数n:\cin >> n;
cout << \请输入正整数x:\cin >> x;
cout << \cout << \
cout << \p(n,x) << endl; }
float p(int n, int x) // 递归函数的实现 {
if (n = = 0)
return 1; else if (n = = 1)
return x; else
return ((2*n-1)*x*p(n-1,x) - (n-1)*p(n-2,x)) /n ;
}
程序运行输出:
请输入正整数n:1 请输入正整数x:2 n = 1 x = 2 P1(2) = 2
请输入正整数n:3 请输入正整数x:4 n = 3 x = 4
P3(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个整数最大值”<
case 1: cout << \请输入2个整数x1,y1:\
cin >> x1>>y1;
cout << \最大值为\Max1(x1,y1) < case 2: cout << \请输入3个整数:\ cin >> x1>>y1>z1; cout << \最大值为\Max1(x1,y1,z1) < case 3: cout << \请输入2个浮点数:\ cin >> x2>>y2; cout << \最大值为\Max1(x2,y2) < case 4: cout << \请输入3个浮点数:\ cin >> x2>>y2>>z2; cout << \最大值为\Max1(x2,y2,z2) < default: exit(0); } cout << \} } int Max1 (int a,int b) { if (a>b) return a; else return b; } int Max1 (int a,int b,int c) { if (a>b) if(a>c)return a; else return c; else if(b>c)return b; else return c; } float Max1 (float a,float b) { if (a>b) return a; else return b; } float Max1 (float a,float b,float c) { if (a>b) if(a>c)return a; else return c; else if(b>c)return b; else return c; } 知识点及作业: ① 递归算法:3-14、3-15 ② 引用作为形参:P77利用“引用调用”编写函数swap(),实现两个单精度数据的交换。 ③ 内联函数:编写内联函数,求圆的周长Circle();并由main函数实现调用(半径由main函数录入) ④ 带默认形参值的函数:读程序,分析结果 #include int add(int x=1,int y=2); //默认形参值(全局) void main(void) { void fun(void); int add(int x=5,int y=8); //默认形参值(main局部) cout< fun( ); } void fun(void) { cout< int add( int x, int y ) { return x+y; } ⑤ 函数重载: 编写4个同名函数Max1,可分别求取2个整数、3个整数、2个单精度数、3个双精度数的最大值,实现函数重载。并在main()函数中测试函数功能。
正在阅读:
C++3 函数习题及答案11-30
学习报告电气认识实习报告03-09
PCO-TR.010-HR_标准业务操作手册V3.104-11
我读懂了坚持作文500字07-16
【阳光学习网精选】人教新课标八年级上册语文期末试卷(含答案)07-26
双色球中奖公式-阴阳五行推算法07-05
四年级英语下册4BUnit1 our school subjects教案06-29
牛津上海版七年级英语上册Module1 unit2知识点归纳及练习05-03
湿地知识竞赛试卷01-23
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 习题
- 函数
- 答案
- 2018年衡水金卷调研卷 全国卷 I A(二) 理数模拟试题
- 初中旋转知识点及类型题 - 图文
- 医患联谊策划
- 以大班主题活动《牙齿的秘密》为例,浅谈如何将绘本与主题活动相融合
- 2016年下半年广西教师资格考试《综合素质》材料分析+写作命中分析
- 老闸桥张拉作业指导书
- 东财11春学期《财务管理》在线作业1--3答案
- WinXP+win2003+IIS+MySql+PHP+ZendOptimizer+phpMyAdmin环境配置安装指南
- 《全国100所名校单元测试示范卷》高三语文一轮复习备考 专题九、默写常见的名句名篇(教师用卷)
- 药师-抗菌药物培训试题与答案
- 浙江省舟山中学高一语文上学期期中试题
- 测量、分析和改进 -
- 事业单位考试人文,历史常识
- master-struts
- 小学校办学特色汇报材料
- 广东省某县教育局基础教育专网光纤线路租赁采购项目公开招标书(招标文件格式模板) -
- 开展“解放思想、赶超跨越”大讨论活动的实施方案
- 2016注册咨询工程师集训教育公路工程技术标准试卷
- 2016版高中化学必修2优化方案:同步配套测试卷(含答案)
- 办公室公文条例和公文办法题库