C++习题1Word格式.docx
《C++习题1Word格式.docx》由会员分享,可在线阅读,更多相关《C++习题1Word格式.docx(49页珍藏版)》请在冰豆网上搜索。
C-->
D这一条路。
在一个派生类中保留间接基类的多份同名成员,虽然可以在不同的成员变量中分别存放不同的数据,但大多数情况下这是多余的:
因为保留多份成员变量不仅占用较多的存储空间,还容易产生命名冲突,而且很少有这样的需求。
为了解决这个问题,C++提供了虚基类,使得在派生类中只保留间接基类的一份成员。
声明虚基类只需要在继承方式前面加上
virtual
关键字,请看下面的例子:
#include<
iostream>
usingnamespacestd;
classA{
protected:
inta;
public:
A(inta):
a(a){}
};
classB:
virtualpublicA{//声明虚基类
intb;
B(inta,intb):
A(a),b(b){}
classC:
intc;
C(inta,intc):
A(a),c(c){}
classD:
virtualpublicB,virtualpublicC{//声明虚基类
private:
intd;
D(inta,intb,intc,intd):
A(a),B(a,b),C(a,c),d(d){}
voiddisplay();
voidD:
display(){
cout<
<
"
a="
a<
endl;
b="
b<
c="
c<
d="
d<
intmain(){
(newD(1,2,3,4))->
display();
return0;
#include<
stdio.h>
math.h>
main()
{
inti,x;
scanf("
%d"
&
x);
for(i=2;
i<
=x-1;
i++)
if(x%i==0)
printf("
NO\n"
);
for(i=2;
=x/2;
=sqrt(x);
i++);
}
Virtual是C++OO机制中很重要的一个关键字。
只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。
当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用了Derived的print函数而不是Base的print函数。
这是面向对象中的多态性的体现。
(关于虚拟机制是如何实现的,参见InsidetheC++ObjectModel,AddisonWesley1996)
classBase
Base(){}
virtualvoidprint(){cout<
Base"
classDerived:
publicBase
Derived(){}
voidprint(){cout<
Derived"
intmain()
Base*point=newDerived();
point->
print();
Output:
Derived
这也许会使人联想到函数的重载,但稍加对比就会发现两者是完全不同的:
(1)
重载的几个函数必须在同一个类中;
覆盖的函数必须在有继承关系的不同的类中
(2)
覆盖的几个函数必须函数名、参数、返回值都相同;
重载的函数必须函数名相同,参数不同。
参数不同的目的就是为了在函数调用的时候编译器能够通过参数来判断程序是在调用的哪个函数。
这也就很自然地解释了为什么函数不能通过返回值不同来重载,因为程序在调用函数时很有可能不关心返回值,编译器就无法从代码中看出程序在调用的是哪个函数了。
(3)
覆盖的函数前必须加关键字Virtual;
重载和Virtual没有任何瓜葛,加不加都不影响重载的运作。
第6题(1.0分)
C语言把文件看作是一个【1】的序列.
答案:
字符或字节
第7题(1.0分)
静态变量和外部变量的初始化是在【编译】阶段完成的,而自动变量的赋值是在【函数调用
】时进行的
第8题(1.0分)
若有定义:
inta[3][2]={2,4,6,8,10,12};
则*(a[1]+1)的值是【1】.
答案8
第9题(1.0分)
C语言中,数组名是一个不可变的【1】量,不能对它进行加减和赋值运算.
答案:
地址
第12题(1.0分)
feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为【1】,否则为【2】.
非0值0
第13题(1.0分)
如果函数不要求带回值,可用【1】来定义函数返回值为空.
void
第14题(1.0分)
调用fopen函数打开一文本文件,在"
使用方式"
这一项中,
为输出而打开需填入【1】.
=======(答案1)=======
w
=========或=========
w+
第15题(1.0分)
顺序结构存储方法是把逻辑上相邻的结点存储在物理位置【1】
的存储单元中。
相邻
第16题(1.0分)
一个类可以从直接或间接的祖先中继承所有属性和方法。
采用
这个方法提高了软件的【1】。
可重用性
第17题(1.0分)
C++中封装性、继承性和【1】是面向对象程序设计的三个主要性质。
多态性
第18题(1.0分)
C++语言的参数传递机制包括传值和传地址两种,如果调用函数
时,需要改变实参或者返回多个值,应该采取【1】方式。
传地址
第19题(1.0分)
设i,j,k均为int型变量,则执行完for(i=0,j=10;
j<
=j;
i++,j--)k=i+j;
语句后,K的值为【1】。
10
第20题(1.0分)
对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为【1】。
45
二、判断共20题(共计20分)
第1题(1.0分)
用fopen("
file"
"
r+"
打开的文件"
可以进行修改。
Y
第2题(1.0分)
inti=20;
switch(i/10){case2:
A"
case1:
B"
}的输出结果为A。
N
第3题(1.0分)
若有定义和语句:
inta;
charc;
floatf;
%d,%c,%f"
a,&
c,&
f);
若通过键盘输入:
10,A,12.5,则a=10,c='
A'
f=12.5.
第4题(1.0分)
char*p="
girl"
的含义是定义字符型指针变量p,p的值是字符串"
。
第5题(1.0分)
x*=y+8等价于x=x*(y+8)。
如果有一个字符串,其中第十个字符为'
\n'
,则此字符串的
有效字符为9个。
通过return语句,函数可以带回一个或一个以上的返回值。
如果想使一个数组中全部元素的值为0,可以写成
inta[10]={0*10};
一个include命令可以指定多个被包含的文件。
第10题(1.0分)
C程序中有调用关系的所有函数必须放在同一个源程序文件中。
第11题(1.0分)
进行宏定义时,宏名必须使用大写字母表示。
共同体变量所占的内存长度等于最长的成员的长度。
在C语言中,此定义和语句是合法的:
enumaa{a=5,b,c}bb;
bb=(enumaa)5;
7&
3+12的值是15。
类有两个特殊的成员函数构造函数和虚函数
抽象类不仅可用做派生其他类的基类,也可以用于直接创建对象
实例。
静态函数可声明为虚函数。
如果一个函数在其函数体内直接或间接的调用了自己,该函数
称为递归函数。
类中提供了三种访问控制权:
公有、私有、保护三种类型。
所谓继承就是利用已有的数据类型定义出新的数据类型。
三、单选共60题(共计60分)
fscanf函数的正确调用形式是()。
A:
fscanf(fp,格式字符串,输出表列);
B:
fscanf(格式字符串,输出表列,fp);
C:
fscanf(格式字符串,文件指针,输出表列);
D:
fscanf(文件指针,格式字符串,输入表列);
D
C语言的if语句嵌套时,if与else的配对关系是()。
每个else总是与它上面的最近的if配对
每个else总是与最外层的if配对
每个else与if的配对是任意的
每个else总是与它上面的if配对
A
C语言中,文件由()。
记录组成
由数据行组成
由数据块组成
由字符(字节)序列组成
设C语言中,int类型数据占2个字节,则short类型数据占()。
1个字节
2个字节
4个字节
8个字节
B
以下不符合C语言语法的赋值语句是()。
j++;
j=j=5;
k=2*4,k*4;
y=float(j);
C语言允许函数类型缺省定义,此时函数值隐含的类型是()。
float
int
long
double
int(*p)[6];
它的含义为()。
具有6个元素的一维数组
定义了一个指向具有6个元素的一维数组的指针变量
指向整型指针变量
指向6个整数中的一个的地址
经下列语句定义后,sizeof(x),sizeof(y),sizeof(a),sizeof(b)在
微机上的值分别为()。
charx=65;
floaty=7.3;
inta=100;
doubleb=4.5;
2,2,2,4
1,2,2,4
1,4,2,8
2,4,2,8
C
char*match(charc)是()。
函数定义的头部
函数预说明
函数调用
指针变量说明
若有说明:
inta[3][4]={0};
则下面正确的叙述是()。
只有元素a[0][0]可得到初值0
此说明语句不正确
数组a中各元素都可得到初值,但其值不一定为0
数组a中每个元素均可得到初值0
当说明一个结构体变量时系统分配给它的内存是()。
各成员所需内存量的总和
结构中第一个成员所需内存量
成员中占内存量最大者所需的容量
结构中最后一个成员所需内存量
以下不是无限循环的语句为()。
for(y=0,x=1;
x>
++y;
x=i++)i=x;
for(;
x++=i);
while
(1){x++;
for(i=10;
i--)sum+=i;
利用fseek函数可以实现的操作是()。
改变文件的位置指针
文件的顺序读写
文件的随机读写
以上答案均正确
C语言中while和do-while循环的主要区别是()。
do-while的循环体至少无条件执行一次
while的循环控制条件比do-while的循环控制条件更严格
do-while允许从外部转到循环体内
do-while的循环体不能是复合语句
sizeof(float)是()。
一种函数调用
一个不合法的表达式
一个整型表达式
一个浮点表达式
以下程序的运行结果是()。
main()
{intn;
for(n=1;
n<
=10;
n++)
{
if(n%3==0)continue;
n);
12457810
369
12
1234567890
以下不正确的叙述是()。
在C程序中所用的变量必须先定义后使用
程序中,APH和aph是两个不同的变量
若a和b类型相同,在执行了赋值语句a=b;
后b中的值将放入a中,b中的值不变
当输入数值数据时,对于整型变量只能输入整型值;
对于实型变量只能输入实型值
下列程序的输出结果为()。
{intm=7,n=4;
floata=38.4,b=6.4,x;
x=m/2+n*a/b+1/2;
%f\n"
x);
27.000000
27.500000
28.000000
28.500000
凡是函数中未指定存储类别的局部变量,其隐含的存储类别为()。
自动(auto)
静态(static)
外部(extern)
寄存器(register)
下列定义数组的语句中正确的是()。
#definesize10charstr1[size],str2[size+2];
charstr[];
intnum['
10'
];
intn=5;
inta[n][n+2];
第21题(1.0分)
以下描述中,正确的是()。
预处理是指完成宏替换和文件包含中指定的文件的调用
预处理指令只能位于C源文件的开始
C源程序中凡是行首以#标识的控制行都是预处理指令
预处理就是完成C编译程序对C源程序第一遍扫描,为编译词法和语法分析作准备
第22题(1.0分)
位字段数据的单位是()位。
十六进制
八进制
二进制
十进制
第23题(1.0分)
以下的选择中,正确的赋值语句是()。
a=1,b=2
j++
a=b=5;
y=int(x)
第24题(1.0分)
若有int*p=(int*)malloc(sizeof(int));
则向内存申请到内存
空间存入整数123的语句为()。
p);
p);
*p);
**p);
第25题(1.0分)
已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用
八进制表示的字符常量'
\101'
是()。
字符A
字符a
字符e
非法的常量
第26题(1.0分)
以下叙述中正确的是()。
C程序中注释部分可以出现在程序中任意合适的地方
花括号“{“和”}”只能作为函数体的定界符
构成C程序的基本单位是函数,所有函数名都可以由用户命名
分号是C语句之间的分隔符,不是语句的一部分
第27题(1.0分)
假定int类型变量占用两个字节,其有定义:
intx[10]={0,2,4};
,
则数组x在内存中所占字节数是()。
3
6
20
第28题(1.0分)
在C语言中,形参的缺省存储类是()。
auto
register
static
extern
第29题(1.0分)
已知字母a的ASCII十进制代码为97,则执行下列语句后的输出结果为()。
chara='
a'
a--;
%d,%c\n"
a+'
2'
-'
0'
3'
b,c
a--运算不合法,故有语法错
98,c
格式描述和输出项不匹配,输出无定值
第30题(1.0分)
不仅可将C源程序存在磁盘上,还可将数据按数据类型分别以什么的
形式存在磁盘上()。
内存
缓冲区
文件
寄存器
第31题(1.0分)
表达式18/4*sqrt(4.0)/8值的数据类型为()。
不确定
第32题(1.0分)
以下能对二维数组a进行正确初始化的语句是()。
inta[2][]={{1,0,1},{5,2,3}};
inta[][3]={{1,2,3},{4,5,6}};
inta[2][4]={{1,2,3},{4,5},{6}};
inta[][3]={{1,0,1}{},{1,1}};
第33题(1.0分)
函数rewind的作用是()。
使位置指针重新返回文件的开头
将位置指针指向文件中所要求的特定位置
使位置指针指向文件的末尾
使位置指针自动移至下一个字符位置
第34题(1.0分)
在C语言中,要求运算数必须是整型或字符型的运算符是()。
&
!
||
第35题(1.0分)
inta=1,b=2,c=3;
if(a>
c)b=a;
a=c;
c=b;
则c的值为()。
1
2
不一定
第36题(1.0分)
对for(表达式1;
;
表达式3)可理解为()。
for(表达式1;
0;
表达式3)
1;
表达式1;
表达式3;
第37题(1.0分)
a,b为整型变量,二者均不为0,以下关系表达式中恒成立的是()。
a*b/a*b==1
a/b*b/a==1
a/b*b+a%b==a
a/b*b==a
第38题(1.0分)
chara1[]="
abc"
a2[80]="
1234"
将a1串连接到a2串后面的语句是()。
strcat(a2,a1);
strcpy(a2,a1);
strcat(a1,a2);
strcpy(a1,a2);
第39题(1.0分)
设char*s="
\ta\017bc"
则指针变量s指向的字符串所占的字节数