C全部答案——精选推荐
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++全部答案
习题1参考答案
1 用最简练的语言解释下列词汇在面向对象程序设计中的含义
对象类方法接口消息封装继承服务
答
对象是客观世界中的实体在计算机中的表示是一组数据成员和方法成员的封装体是类类型的实例
类是一种抽象数据类型是一组对象共性的描述
方法是在一个类中定义的过程或函数实现类的功能的代码
接口是对象封装体向外部公布的一组具有公有属性的方法是从对象外部与对象通信的唯一途径
消息是对象之间的通信机制对象的客户通过接口方法调用请求对象服务称为消息调用对象之间通过消息传递互相协调配合共同实现软件系统的整体设计目标消息的载体是对象提供的公有方法即对象的接口
封装有以下两重含义首先是指将描述客观实体数据特征的数据和方法特征的代码组织在一起作为一个整体并为该整体命名标识以区别于其它数据和程序代码其次通过对该整体内成员的访问属性的规定使一部分成员的隐藏起来对于封装体外成为不可见的同时使另一部分成员对外开放作为与外部交流的接口继承是面向对象程序设计方法中描述的两个类之间一种增量包含关系这两个类具有一种父子关系子类通过为父类添加新的成员而创建继承提供了利用一个类的代码创建新类的重用方法继承关系也是对客观世界分类层次关系的一种模拟
服务即对象通过公有方法向外部提供功能
1 2 试列举过程化模块化结构化等程序设计方法的主要特点面向对象程序设计是如何包容和吸收其它几种程序设计方法的有用成分的
答
过程化程序设计方法以过程或函数作为程序的基本构造单位侧重于算法表达和过程间参数传递的组织
模块化程序设计方法以独立编译的源程序模块作为大型应用程序的基本组织单位注重于应用程序的开发管理包括系统开发的任务分解模块间通信管理可重用代码库的组织由不同语言生成的目标模块的连接等方面
结构化等程序设计方法以单入口单出口的可嵌套基本控制结构作为程序构造单位提倡自顶向下的分析和自底向上的设计相结合的软件系统构造方法重点关注程序结构清晰以获得程序的可理解性和可维护性
面向对象程序设计方法包容了以上三种方法的所有积极成分对象中包含的方法实际上就是过程或函数方法的参数传递与过程或函数的传递都是利用堆栈进行的在方法的实现时仍然用单入口单出口的基本控制结构编程系统构造仍然使用自顶向下的分析和自底向上的设计过程并用模块化方法管理整个系统的开发整个软件系统由若干独立编译的源程序文件组成面向对象方法对于以前程序设计方法的质的跃变在于将中算法与数据结构的多对多依赖变成了相互间的单一依赖关系
1 3面向对象程序设计方法成功地取代其它程序设计方法在程序设计领域的主导地位有哪些根本原因
答
面向对象程序设计方法成功地取代其它程序设计方法的主要原因是1计算机软硬件技术的超高速发展促进了计算机应用领域的迅速扩展带来了大规模复杂系统的开发需求 2 程序设计方法研究中不断提高的数据抽象技术为复杂系统的开发带来了更有效更能自然表示问题世界的系统构造模型3 硬件设备的性能
提高足以支付新方法的存储空间冗余和时间开销的代价
1 4 有人说对象是一个黑盒子应该怎样看待这种说法
答
对象是一个黑盒子这种说法是一个很贴切的比喻所谓黑盒子是指从用户的观点来看一个器件或产品时并不关心其内部构造和原理而只关心它的功能及如何使用这些功能对象的封装性使对象的属性及功能的具体实现代码对于对象的客户是不可见的客户只能通过接口方法使用对象功能
1 5 试分析对象与其所属的应用程序和对象与其所属的类这两种关系的区别
答
对象与其所属的应用程序的关系是个别和整体的关系对象与其所属的类的关系是具体实例和它所对应的抽象概念的关系二者不可混为一谈
1 6试归纳总结子程序过程函数方法对象接口等概念的共同点及各自的特点
答
它们都是实现程序功能的代码块子程序相对主程序而言过程则关注本身的整体性有时过程也特指无返回值的子程序函数是有返回值的子程序而且函数与数学中的函数概念一致函数返回值与输入参数是一一对应或一多对应关系函数的返回值与子程序的输出参数的概念是有区别的一个函数只能有一个返回值而一个子程序可能有多个输出参数方法特指对象封装体中的过程或函数对象接口是对象的公有方法
1 7在一个医院里有医务人员管理人员后勤人员临时工等人员医务人员又分为医生护士化验员药剂师医生又有内科外科五官科神经科之分管理人员又分属为行政管理设备管理药品管理财务管理等部门请用面向对象的观点对上述信息进行分析指出哪些是类哪些是对象并说明类与类之间存在的继承关系若要根
据上面的简要描述设计计算机医院人事管理系统请画图表示上述人事关系答
题目中提到的都是类没有一个是类的实例所以没有一个是对象其中医务人员是基类医生护士化验员药剂师是它的四个子类而内科医生外科医生五官科医生神经科医生又是医生的子类另外管理人员是行政管理人员设备管理人员药品管理人员财务管理人员等子类的基类
习题2参考答案
2.1 C与C语言的关系如何它们的本质区别是什么
答
C由C语言继承而来并在C语言的基础上增加了对面向对象程序设计的支持是传统的结构化程序设计方法和面向对象程序设计方法的结合C保留了C语言的全部精华与C语言兼容又比C语言更适宜于管理大型复杂的程序二者的本质区别是C是面向过程的语言而C是面向对象的语言C是战术语言而C是战略语言2.2 以下单词哪些是C合法的标识符
public array[I] x35 3rd get_name π
num1 _sot hi x-y what _for
答
合法的标识符为get_namenum1_sot_for
2.3 保留字与一般标识符有什么不同
答
保留字又称关键字是系统已预先定义的一些单词这些单词虽然符合标识符的命名规则但由于已经被C语言预先赋予了特定的含义因而不能被程序员用作一般的标识符来定义和使用
2.4 文件包含命令的形式如何有什么作用
答
文件包含命令的作用是让编译预处理器将指定文件的全部内容插入到当前源文件的该命令行处它有两种形式include 和include "文件名"二者的区别在于前者主要用于嵌入系统提供的头文件一般存于C系统所在目录的INCLUDE子目录下后者主要用于嵌入用户自己定义的文件对于前者C预处理器将在INCLUDE 目录下搜索指定的头文件对于后者C预处理器先在当前目录中搜索指定文件若找不到再到INCLUDE目录下去搜索
2.5 什么叫源程序C程序在计算机上是如何实现的
答
用C等高级语言编写的程序称为源程序源程序是不能被计算机直接识别和执行的C程序在计算机上的实现包括编辑编译连接运行几个步骤其中编辑是指将源程序由键盘输入并保存得到源程序文件编译是一个翻译过程将C源程序翻译成计算机能直接识别的机器语言程序得到目标文件连接程序把各个目标文件和要用到的库文件连接在一起生成可执行文件可执行文件是计算机能直接运行的文件
2.6 什么是空语句它有什么作用
答
空语句是只有一个分号的语句它主要用于语法上需要有一条语句但实际上又没有任何操作可执行的场合
2.7 什么是C中的块主要用于什么地方
答
块即复合语句或称分程序是括在一对花括号之间的语句序列在语法上相当于一条单语句凡是在单语句可用的地方都可以使用复合语句复合语句主要用于语法上要求只能有一条语句但又难以只用一条简单语句表达的情形如循环语句的循环体等或者用于形成局部化的封装体
2.8 判断下列描述的对与错
1C和C语言都是面向对象的语言
2一个C源程序可以分别存放在几个源文件中
3C对标识符内的英文字母是区分大小写的
4预处理命令是在程序正常编译之后执行的
5一个源程序若通过编译连接得到了exe文件执行后就能得到正确的结果6以下四种写法均是C合法的注释语句
答
1错 2对 3对 4错 5错 6错
2.9分析下面程序的功能若输入为9和4写出程序的运行结果
include
void main
int n1 n2
cout "Please enter two integers "
cin n1 n2
cout " " n1 "" n2 " 2 " n1 n2 2 endl
解答
程序的功能为从键盘接收两个整数计算输出整数部分它们的平均值的若输入为9和4运行结果为 9 4 2 6
2.10 编一个小程序完成小时数向秒数的转换例如若输入为25小时则输出为9000秒
参考程序
include
void main
float hours seconds
cout "Please enter the hour "
cin hours
seconds hours3600
cout "The second is " seconds endl
习题3参考答案
3.1 指出下列常量的类型
345L 0x345 89f 7E3 8ul -869 答
各常量的类型依次为long doubleintfloatdoubleunsigned long intsigned int
3.2 判断下列描述的对错
1C各基本类型的字宽和所能表示的数的范围在各种计算机上都是相同的
2一个变量可以多次被赋值所以可同时拥有不同的值
3C中的变量在使用之前必须先声明而且必须在程序开头就声明
4不同类型的指针分配到的内存空间的大小是一样的
5将指针加1后指针指向下一个字节
6字符串" ab\x43xy"的长度为8在内存中占据9个字节
7字符串可作为一个整体进行输入输出但不能作为整体进行赋值比较等 8在对数据进行强制类型转换时可以不遵循隐式转换的原则
答
错2错3错4对5错6错7对8对
3.3 写一段语句对如下变量或常量进行声明
1 double型变量b1和b2其中b2的初始值为983
2 int型的符号常量length其值为5
3 字符串变量string初始化为"Please enter b1 "
4 指向b1的指针b1_ptr
答案
1 double b1 b
2 983
2 const int length 5
3 char string[ ] "Please enter b1 "
4 double b1_ptr b1
3.4 在上题的基础上写一段语句完成下列操作
1在屏幕上显示string
2从键盘接收b1的值
3将b2的值加上b1的值仍赋给b2
4输出b1和b2的值
5将b1_ptr所指单元的内容加1并输出
答
在屏幕上显示string
cout string endl
从键盘接收b1的值
cin b1
将b2的值加上b1的值仍赋给b2
b2 b2 b1
输出b1和b2的值
cout "b1 " b1 " b2 " b2 endl 将b1_ptr所指单元的内容加1并输出
cout b1_ptr endl
3.5 分析下面程序的运行结果并上机验证
include
void main
const double pi 31415926 e 27182818
double r 05
cout " int pirr " int pirr endl cout "int e1000 " int e1000 endl cout "pi " pi " e " e endl
答
int pirr 075
int e1000 2718
pi 314159 e 271828
习题4参考答案
4.1 简要回答下列问题
1一个表达式中各运算符的运算次序由什么决定
2break语句的作用是什么continue语句的作用是什么
3C提供了哪几种循环语句各有什么特点
答
1表达式中各运算符的运算次序取决于它们的优先级和结合性
2break语句可用在switch语句或循环语句中作用是跳出整个switch语句或循环语句的循环体continue语句用在循环语句中它的作用是忽略循环体中位于它之后的语句重新回到条件表达式的判断提前开始下一次循环3C提供了三种循环语句while语句do_while语句和for语句while语句的特点是先判断后执行循环体有可能一次也不被执行do_while语句是先执行后判断循环体至少会被执行一次C的for语句也属于先判断后执行的循环语句与while语句可以相互代替不过当循环次数确定的时候用for语句更直观些4.2 判断下列描述的对错
1C中关系表达式和逻辑表达式的运算结果只有两种可能零和非零
2算术运算符关系运算符逻辑运算符的优先级从高到低依次为算术运算符逻辑运
算符关系运算符
3C中用while语句书写的循环可以和用do_while 语句书写的循环相互转换
4if语句只能处理双分支的情况不能处理多分支情况
5C中for语句只能用于已知循环次数的情况
6只有使用同一种循环语句的循环可以嵌套在一起
答
1对 2错 3错 4错 5错 6错
4.3 根据以下变量声明
int x 3 y 5 z 0
int p x
char c A
float a 3 b 72
计算下列表达式的值
1 73 73
2 x y c B
3 z y x y
4 z y x y
5 200 x y
6 double x y 23
7 x y 23
8 c y x
9x int ba y
10 c – c 2 y - x 0
11 x y x y
12 p y
13 x - y- -
解答
1 0
2 1
3 0
4 0
5 120
6 236
7 23
8 67
9 87 101 11 4 12 15 13-1
4.4 指出下列程序段中的错误并说明错误原因 1float level
cin level
switch level
case 1 cout "one"
break
case 15 cout "one and a half"
break
case 2 cout "two"
break
default
2 cin x y
if x y cout x
else cout y
3 int x 1
while x 0
cout ""
4 下面程序段用于计算23除以5的余数
float x 23 y 5 z
z x y
cout "23 5 " z endl
5 int i 0 j 9
for i j--
cout "hi"
6下面程序段用于从键盘接收一个数若此数为1就将x加上10 若此数为2就将x减去10 若此数为3就将x乘以2 若为其它数则什么也不做
int n
cin n
switch n
case 1 x x 10
case 2 x x-10
case 3 x x2
default
解答
1第一句和第六句错switch后的表达式和case后的常量表达式只能是字符型整型或枚举型不能是浮点型
2第二句错if后的表达式要加括号句末应有分号
3死循环
4xyz应定义为整型的操作数应为整数
5死循环
6各case子句中没有break语句得到的结果与要求不一致
4.5 分析下面的程序的循环次数并写出运行结果
include
void main
int n 0 total 0
do
total totaln
n
while n 20
cout "total " total endl
答案
循环次数为10运行结果为
total 110
4.6 分析下面程序的功能并写出程序的运行结果
include
void main
int i 100 n 0
while -- i
if i 5 0 i 7 0
cout i endl
n
cout "n " n endl
答案
程序的功能为统计100以内的自然数中哪些既是5的倍数又是7的倍数以及这样的数有多少个运行结果为
70
35
n 2
4.7 编程求各位数字的和为偶数的三位数例如163并统计这样的数有多少
个
参考程序
include
void main
int count 0 a b c
for int i 100 i 999 i
a i100 a为百位数字
b i – a100 10 b为十位数字
c i–a100–b10 c为个位数字
if abc 2 0
cout i endl
count
cout "count " count endl
4.8 编程计算下面的f x
x26 4 x
f x - x 0 x≤4
x37x 9 x≤0
参考程序
include
void main
float x f
cout "Please enter x "
cin x
if 4 x f xx6
if 0 x x 4 f -x
if x 0 f xxx7x9
cout "f x " f endl
4.9 编程输入一个长整数统计它的位数
参考程序
include
void main
long int n
int w
cout "Please enter a number "
cin n
w 1
while n 10
w
cout w endl
4.10 编程从键盘输入一个以字符结尾的字符串统计其中0的个数1的个数9的个数以及其它字符的个数
参考程序
include
void main
char ch
int dight[10] other 0 i
for i 0 i 9 i
dight[i] 0
cin ch
while ch
if ch 0 ch 9 dight[ch-0] else other
cin ch
for i 0 i 9 i
cout i " " dight[i] endl cout "other " other endl
4.11 编程输出如下图形
1
2 2 2
3 3 3 3 3
4 4 4 4 4 4 4
参考程序
include
void main
int ij
for i 1 i 4 i
for j 1 j 5–i j
cout
for j 1 j 2i-1 j
cout i " "
cout endl
4.12 编写程序计算S 1 1 2 1 2 3 1 2 n n 由键盘输入
参考程序
include
void main
int n sum 0 a 0
cout "Please enter a number "
cin n
for int i 1 i n i
a ai
sum suma
cout sum endl
4.13 编写程序根据公式 e 1 11 12 13 1n 计算e的值直到最后一项小于10-6为止
参考程序
include
void main
double e 1 a 1
int i 1
do
a a i
e ea
i
while a 1e-6
cout "e " e endl
习题5参考答案
51 简要回答下列问题
1数组名可以看作一个指针它与一般的指针有什么不同
2试说明指针变量本身的长度与它所指向的数据的类型的长度的区别
3怎样为字符串数组赋值
4怎样定义具有100个数据记录的数据库二维表
答
1数组名是地址常指针是地址变量
2指针指向的数据的类型称为指针的基类型不同的基类型的长度不同指针
变量本身的长度由机器字长决定不管指针变量的基类型是什么指针变量的长度
都是一样的
3字符串数组是二维字符数组可以在定义时用初始化列表赋初值
如char name[4][20] "LiXiaoHe" "WangQiang" "ShiHua" "LiuLi"
或将字符串数组定义为字符型指针数组也可以在定义时用初始化列表赋值
如char name1[4] "LiXiaoHe" "WangQiang" "ShiHua" "LiuLi"
4要定义具有100个数据记录的数据库二维表应当先定义表的结构利用struct定义一个结构类型然后定义该结构类型的100个变量或者定义具有100
个该结构类型元素一维数组
52 指出下列程序段中的错误并说明错误原原因
1int length 50
char name[length] 错数组大小必须为常量
2const size 10 错定义常量时没有指明类型
int a[size]
size 20 错不能为常量赋值
int b[size]
3float x 72
float p
p x 错指针变量必须用地址赋值
4 int x 9 x_ptr x
int y 78
x_ptr y 错指针变量用法错误可改为x_ptr y 或x_ptr y
5const int length 5
int a[length] 3343 5 32 56 7 65
错初始化数据个数大于指定的数组大小
6int array1[ ][3] 1 2 3 4 5 6
int array2[3][ ] 1 2 3 4 5 6 错只能缺省第一维
大小
int array3[ ][ ] 1 2 3 4 5 6 错只能缺省第一
维大小
7 char a[ ] "sorry"
char b[ ] "radio"
a b 错字符串变量不能相互赋值
8int w[4]
w 1 2 3 4
错不能在数组定义语句之外同时为多个数组元素赋值
9int age[5] 12 26 48 29 33 age_ptr age
cout age age_ptr endl
age 错地址常量不能改变
age_ptr
cout age age_ptr endl
10 char s[ ] "Welcome"
char p s 错 s是地址常量前面不能再用取地址运算符
11 char str1[4] T h i s
char str2[4] "This" 错数组大小应包括字符串常量结束符 char str3[ ] "This"
12double x 36
double ptr
ptr x 错指针变量未用地址赋值
53 写出下面程序的运行结果
include
void main
int a[5] 34 256 87 46 90
int b[ ][3] 1 2 3 4 5 6 7 8 9
int x y z
x a[2] a[3]
y a a4
z b[1][2]b b1 b1 1
cout "x " x " y " y " z " z endl
答
x 133 y 124 z 16
54 写出下面程序的运行结果
include
void main
char str[ ] "There are 3 boys " char p str
cout str endl
p10 5
cout str endl
运行结果为
There are 3 boys
There are 5 boys
55 写出下面程序的运行结果
include
void main
const int n 5
int a[n][n] i j
for i 0 i n - 1 i
a[i][0] 1
a[i][i] 1
for j 1 j i j
a[i][j] a[i-1][j-1]a[i-1][j]
for i 0 i n-1 i
for j 0 j i j
cout a i j " " cout endl
运行结果为
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
56 上机编程建立并输出如下的10×10矩阵
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0 1
9 0 1 2 3 4 5 6 7 8
参考程序
include
void main
int a[10][10]
for int i 0 i 9 i
for int j 0 j 9 j
a[i][j] i j 10
cout a[i][j] " "
cout endl
57上机编程数组data中存放了n个互不相同的数找到其中的最小数并从数组中删除
参考程序
include
void main
const int n 10
double data[n]
int i k
cout "Please enter the data "
for i 0 i n–1 i
cin data[i]
cout "The previous array is "
for i 0 i n–1 i
cout data[i] " "
cout endl
k 0
for i 1 i n–1 i 寻找最小数的位置 if data[i] data[k] k i
for i k i n–2 i 删除最小数
data[i] data[i1]
cout "The curent array is "
for i 0 i n–2 i
cout data[i] " "
cout endl
习题6参考答案
61 指出并改正下列函数原型语句的语法错误
1 int int ab
2 int small_one float x float y float z
3 extern func int 1_stint 2_ndint 3_rd
4 char lookup int char
5 double average floatfloat
6 double average float ffloat f
答
1 参数b没有指定类型改正为 int int a int b
2 参数之间应该用逗号分隔改正为 int small_one float x float y float z
3 函数无返回值类型改正为 extern func int firstint secondint third
4 参数表中不能出现分号改正为 char lookup int char
5 没有错误
6 不能同时使用和运算符两个形式参数不能同名
改正为 double average float f1float f2
62 编程实现两个学生班各派有9名学生参加计算课程对抗赛对十种试题双方各派一名参赛最终以单种试题胜于对方最多的班级为优胜者
答
题目分析分别以ab两个数组按参赛试题的顺序登记成绩最后把每组试题的对应元数进行比较并计算出一个班胜于对手的个数即可比较大小
include
int compare float t1 float t2
void main
float a[9]b[9]
int i n
n 0
cout "Enter AB Classs grade"
for i 0i 9 i
cin a[i] b[i]
for i 0i 9i
if compare a[i]b[i] 1 n n1
if n 5 cout " Class A is win" endl
else cout " Class B is win" endl
int compare float t1 float t2
return t1 t2 10
63 下列程序企图对ab两个数组进行整理若a[i] b[i]则二者互换使得a数组中每个变量的值都大于或等于b数组相应变量的值上机运行该程序时发现程序并未达到预定的目的请改正程序中的逻辑错误使它能得到预期的结果include
void swap double t1 double t2
double t
for int i 1i 10i
if t1 t2 t t1t1 t2t2 t
void main
double a[10] 055821716-66-345234716-928602-715
double b[10] -211246-28155-82371606435-162705 int i
for i 0i 10i
swap a[i]b[i]
cout "a[i] "
for i 0i 10 i
cout a[i] ""
cout " " endl
cout "b[i] "
for i 0i 10 i
cout b[i] ""
cout " " endl
答案
只需将程序第二行中函数参数由传值调用改为传地址调用即可
void swap double t1 double t2
64 编写一个函数使它能够输出一个浮点数的小数部分然后在主函数中调用该函数将由键盘输入的任意浮点数的整数部分和小数部分分别输出参考程序
include
int separate double f
void main
int a
double b
cout "Enter a double type number "
cin b
a separate b
cout "The input number is divided to " a " and " b endl int separate double f
int temp
temp int f
f f-temp
return temp
65 下面给出了一个求素数的函数is_prime 的定义编写程序补充完成main 函数定义验证哥德巴赫猜想任何大于2的偶数n都可以表示为两个素数之和在小于等于106时成立
include
int is_prime long n
long k
k sqrt n
for long i 2i ki
if ni 0 return 0
return 1
答案
include
void main
long n
cout "Please input a even number "
cin n
for long i 4i ni 2
for long j 1j i2j 2
if is_prime j is_prime i-j
cout i " " j "" i-j endl
break
66 编写程序从键盘上接收n和m两个正整数求n中取m的组合数公式n m n-m
参考程序
include
float fact int k
int Cnm int n int m
void main
int n m z
cout "Please input n m "
cin n m
z Cnm nm
cout "z " z endl
float fact int k 求k的阶乘
float fa 1
int i
for i 2 i k i
fa fa i
return fa
int Cnm int n int m 求组合值
int a
float b
b fact n fact m fact n-m
a int b
return a
67 利用下面给出的判断是否闰年的函数is_leap_year 和每年1月1日是
星期几的函数first_day_of_year 的定义编写程序在屏幕上显示任何一年中的任何一个月的月历年月值从键盘输入指定
int is_leap_year int y
return y4 0y100 0y400 0
int first_day_of_year int y
long n
n y365
for i 1i yi
n is_leap_year i
return n7
参考程序
include
int is_leap_year int y
int first_day_of_year int y
int days_of_the_month int m
int year
void main
int month month_daysweek_daydays_of_the_year
cout "Please input the year "
cin year
cout "Please input the month "
cin month
cout endl
week_day first_day_of_year year
month_days days_of_the_month month
int i
days_of_the_year 0
for i 1i monthi
days_of_the_year days_of_the_yeardays_of_the_month i week_day week_daydays_of_the_year 7
cout "year " year " month " month endl
cout "SUN MON TUE WED THU FRI SAT" endl
for int k 0k week_dayk
cout " "
for i 1 i month_daysi
if i 10
cout " " i
else cout i
cout " "
week_day week_day
if week_day7 0
cout endl
cout endl
int is_leap_year int y
return y4 0y100 0y400 0 int first_day_of_year int y
long n
n y365
for int i 1i yi
n is_leap_year i
return n7
int days_of_the_month int m
switch m
case 1
case 3
case 5
case 7
case 8
case 10
case 12return 31
case 4
case 6
case 9
case 11 return 30
case 2 if is_leap_year year return 29
else return 28
defaultreturn 0
68 上机实验题
integrate是用矩形法求定积分的函数它有一个函数指针作为参数试用它完成自定义的一元函数定积分计算例如求单位园的面积
include
include
typedef double Fp double
double integrate Fp fun double a double b
double n
cout 请输入积分区间划分个数
cin n 决定精度
double step b-a n
double area 0
while a b
area fun a step
a step
return area
参考解
double halfcircle double x return sqrt 1-xx void main
double area 4integrate halfcircle 01
cout area endl
习题7参考答案
7.1 选择填空
1下列的是引用调用
A.形参是引用实参是变量 B.形参和实参都是变量
C.形参是指针实参是地址值D.形参是数组名实参是数组名
2作用域运算符的功能是
A.给定作用域的大小B.表示作用域的级别的C.某个成员是属于哪个类的D.指出作用域的范围的
3下列的各函数中不是类的成员函数
构造函数B.析构函数C.拷贝初始化构造函数D.友元函数
4下面不是构造函数的特征
A.构造函数可以重载B.构造函数可以设置缺省参数
C.构造函数的函数名和类名相同D.构造函数必须指定返回值类型
5下述静态数据成员的特性中是错误的
静态数据成员要在类体外进行初始化
说明静态数据成员时前边要加修饰符static
静态数据成员不是所有对象所共有的
引用静态数据成员时要在静态数据成员名前加和作用域运算符
6已知类A有三个公有成员void f1 int void f2 int 和int a则是指向类A成员函数的指针
A.A p B int Apc Aa
C. voidA paint D A p
7下列关于对象数组的描述中是错的
A.对象数组的数组名是一个地址常量
B.对象数组的下标是从0开始的
C.对象数组只能赋初值不能被赋值
D.对象数组的数组元素是同一个类的对象.
8下列定义中是定义指向类A的对象数组的指针
A.A p[5] B.A p [ 5]
C. A p[5] D.A p[ ]
9说明语句const char ptr中ptr是
A.指向字符常量的指针B.指向字符的常量指针C.指向字符串常量的指针D.指向字符串的常量指针
10关于new运算符的下列描述中是错的
A.使用它创建对象时要调用构造函数
B.使用它创建对象数组时必须指定初始值
C.它可以用来动态创建对象和对象数组
D.使用它创建的对象或对象数组可以使用运算符delete删除答
1A 2C 3D 4D 5C 6C 7C 8B 9A 10B
7.2 分析下列程序的运行结果
1
include
class B
private
int ab
public
B
B int iint j a i b j
void printb cout a b endl
class A
private
B c
public
A
A int iint j c ij
void printa cprintb void main
A m 78
mprinta
答案程序输出为
78
2
include
class Count
static int count
public
Count count
static int Getc return count
Count count--
int Countcount 100
void main
Count c1c2c3c4
cout CountGetc endl
答案输出为
104
3
include
class Rect
double wh
public
Rect double adouble b w ah b friend double area Rect r
return rw rh
void main
Rect r1 3040 r2 2050
cout area r1 area r2 endl
答案输出为
1210
4
include
const int N 100
class Set
int elems[N]
int pc
public
Set pc 0
Set Set s
void Empty pc 0
int IsEmpty return pc 0
int IsMember int n
int Add int n
void print
friend void reverse Set m SetSet Set s
pc spc
for int i 0i pci
elems[i] selems[i]
int SetIsMember int n
for int i 0i pci
if elems[i] n return 1
return 0
int SetAdd int n
if IsMember n return 1
else if pc N return 0 else
elems[pc] n
return 1
void Setprint
cout
for int i 0i pc-1i
cout elems[i]
if pc 0 cout elems[pc-1]
cout endl
void main
Set a
cout aIsEmpty endl aprint
for int i 1i 8i
bAdd i
bprint
cout bIsMember 5 endl bEmpty
for int j 11j 20j
bAdd j
Set c b
cprint
程序输出
1
12345678
1
111213141516171819
5
include
class B
int xy
public
B
B int i
B int iint j
void print
BB
x y 0
cout "Default constructor calledendl" BB int i
x i
y 0
cout "Constructor1 called endl"
BB int iint j
x i
y j
cout "Constructor2 called endl"
BB
cout "Destructor called endl"
void Bprint
cout "x " x "y " y endl void main
B ptr
ptr new B[3]
ptr[0] B
ptr[1] B 5
ptr[2] B 23
for int i 0i 3i
ptr[i]print
delete[] ptr
答程序输出
Default constructor called Default constructor called Default constructor called Default constructor called Destructor called Constructor1 called Destructor called Constructor2 called Destructor called
x 0y 0。