C++考试复习题,求助,答案~!
一.选择题1.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:
a) AB operator+(AB & a , AB & b)
b) AB operator+(AB & a)
c) operator+(AB a)
d) AB & operator+( )
2. 下面的函数声明中, 哪一个是” void BC(int a, int b);”的重载函数?
a) int BC(int a, int b)
b) void BC(int a, char b)
c) float BC(int a, int b, int c = 0)
d) void BC(int a, int b=0)
3. 在C++中,封装是借助于( )达到的。
a) 结构
b) 类
c) 数组
d) 函数
4. 所有在函数中定义的变量,连同形式参数,都属于:
a) 全局变量
b) 局部变量
c) 静态变量
d) 函数
5. 下面叙述不正确的是:
a) 派生类一般都是公有派生
b) 对基类成员的访问必需是无两义性的
c) 赋值兼容规则也适用于多重继承的场合
d) 基类的公有成员在派生类中仍然是公有的
6. 编译时多态性通过使用( )获得。
a) 继承
b) 虚函数
c) 重载函数
d) 析构函数
7.下面的类
Class demo
{
void show()
{ cout << “show” << endl;}
}
问show这个函数的访问说明符?
a) private
b) public
c) protected
d) riendly
8.先加一再使用的++运算符的重栽形式是?
a) operator ++()
b) operator ()++
c) operator ++() int
d) operator ++() char
9.判读下面那个叙述对构造函数的说明是正确的?
a) 造函数一个类只能有一个
b) 构造函数必须要在每个类中声明一个
c) 构造函数没有返回值
d) 构造函数是有返回值的
10.列关于构造函数的描述中,错误的是
a) 构造函数可以设置默认参数
b) 构造函数在定义类对象时自动执行
c) 构造函数可以是内联函数
d) 构造函数不可以重载
11.应在下列程序划线处填入的正确语句是
??#include
??class Base
??{ public:
?? void fun(){cout<<"Base::fun"<<ENDL;}
??};
??class Derived:public Base
??{ void fun()
?? {_____________ //显示调用基类的函数fun()
?? cout<<"Derived::fun"<<ENDL;
?? }
??};
a) fun();
b) Base.fun();
c) Base::fun();
d) Base->fun();
12.你把包含一个或多个纯虚函数的类称为什么?
a) 抽象类
b) 虚拟类
c) friend类
d) protected类
e)
13.下面的类
Class demo
{
void show()
{ cout << “show” << endl;}
}
问show这个函数的访问说明符?
a) private
b) public
c) protected
d) riendly
14.下面那个函数组重载是错误的?
a) void add(int,int)
void add(float,float)
b) void display(int,char)
int display(int,char)
c) int get(int)
int get(int,int)
d) int square(int)
float square(float)
15.判读下面那个叙述对构造函数的说明是正确的?
a) 造函数一个类只能有一个
b) 构造函数必须要在每个类中声明一个
c) 构造函数没有返回值
d) 构造函数是有返回值的
16.有如下程序:
??#include
??class BASE{
?? char c;
??public:
?? BASE(char n):c(n){}
?? virtual~BASE(){cout<<C;}
??};
??class DERIVED:public BASE{
?? char c;
??public:
?? DERIVED(char n):BASE(n+1),c(n){}
?? ~DERIVED(){cout<<C;}
??};
??int main()
??{ DERIVED("X");
?? return 0;
??}
执行上面的程序将输出
a) XY
b) YX
c) X
d) Y
17.下面的哪个保留字不能作为函数的返回类型?
a) void
b) int
c) new
d) long
18.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:
a) AB operator+(AB & a , AB & b)
b) AB operator+(AB & a)
c) operator+(AB a)
d) AB & operator+( )
19. 下面的函数声明中, 哪一个是” void BC(int a, int b);”的重载函数?
f) int BC(int a, int b)
g) void BC(int a, char b)
h) float BC(int a, int b, int c = 0)
i) void BC(int a, int b=0)
20. 不能作为函数重载判断依据的是:
a) 参数个数
b) 参数类型
c) 函数名字
d) 返回类型
二.概念题
1.类和结构有何区别?
2.当从现成类中派生出新类时,可以对派生类做哪几种变化?
3.什么是虚函数? 虚函数的作用是什么?
4.公有函数如何保护私有数据?
5.在公有派生类中,哪些原则适用于被继承的基类成员?
四.编程题
1.定义一个矩形类:用四条边的坐标定义类的成员变量。用带参构造函数完成矩形对象的初始化、用无参构造函数将个成员变量初始为0,编写计算矩形面积的函数,并输出矩形面积,并写出主函数进行测试并写出输出结果。
2.定义学生成绩类Student,其数据成员与成员函数如下。
(1)描述学生成绩的私有数据成员为:姓名 ( Name[8] )、物理(Phi)、数学(Math)、平均成绩(Ave);
(2)处理学生成绩的公有成员函数为:
输入学生成绩成员函数:Input();
计算平均成绩成员函数:Average();
显示学生成绩成员函数:Display();
输出学生成绩成员函数:Output()。
计算机与信息工程学院2004-2005第二学期
《C++试卷》(B)04软件
一、单选题(每小题1分,共15分)
1、C++源程序文件的扩展名为( )
A、.CPP B、.C C、.DLL D、.EXE
2、编译程序的功能是( )
A、将汇编语言程序转换为目标程序
B、将汇编语言程序转换为高级语言程序
C、将高级语言程序转换为目标程序
D、将高级语言程序转换为汇编语言程序
3、下面的函数声明中, 哪一个是” void BC(int a, int b);”的重载函数? ( )
A、int BC(int a, int b) B、 void BC(int a, char b)
C、float BC(int a, int b, int c = 0)
D、 void BC(int a, int b=0)
4 .如果a=1,b=2,c=3,d=4,则条件表达式“a>b?a:c<d?c:d ” 的值为( )
A. 3 B. 2 C. 1 D. 4
5. 在int a[][3]={{1},{3,2},{4,5,6},{0}}中,a[2][2]的值是( )
A.3 B。 2 C。6 D。4
6. 已知 char c; char * const pc="asdf",( )是正确的。
A.pc="dfgh"
B.*pc=‘b’
C.*pc++=‘y’
D.pc=&c
7. 对于int *pa[5]的描述,( )是正确的。
A.pa是一个指向数组的指针,所指向的数组是5个int型元素
B.pa是一个指向某数组中的第5个元素的指针,该元素是int型变量
C.pa[5]表示某个数组的第5个元素的值
D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针
8. 执行下列语句后的输出结果是( )。
int hot=100;
int &rad=hot;
hot+=100;
cout<<rad<<endl;
A.0; B。100;
C.200; D。300;
9. 下列对结构及其变量定义错误的是:( )
A.struct MyStruct{ B。struct MyStruct{
int num; int num;
char ch; char ch;
}; }my;
MyStruct my;
C. struct{ D。 struct{
int num; int num;
char ch; char ch;
} };
my; struct my;
10.下列关于指针运算的描述错误的是:( )
A.在一定条件下,两个指针可以相加
B.在一定条件下,两个指针可以进行关系运算
C.在一定条件下,指针可以为空
D.在一定条件下,两个指针可以相互赋值
11.在C++语言中,对函数参数默认值描述正确的是:( )
A.函数参数的默认值只能设定一个
B.一个函数的参数若有多个,则参数默认值的设定可以不连续
C.函数参数必须设定默认值
D.在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值
12. 不能作为函数重载判断依据的是:( )
A.参数个数 B。参数类型 C。函数名字 D。返回类型
13. 以下程序的输出结果是:( )
#include <iostream.h>
void prt(int *x,int *y,int *z){
cout<<++*x<<","<<++*y<<","<<*z++<<endl;
}
int a=10,c=20,b=40;
void main(){
prt(&a,&b,&c); prt(&a,&b,&c);
}
A. 11,42,31 B。11,41,20 C。11,21,40 D。11,41,21
12,21,41 12,42,20 11,21,41 12,42,22
14.以下程序的输出结果是:( )
#include <iostream.h>
void func(char **m){
++m;
cout<<*m<<endl;
}
void main(){
static char *a[]={"morning", "afternoon", "evening"};
char **p;
p=a;
func(p);
}
A.字符o的起始地址 B。字符a的起始地址
C.字符o D。afernoon
15.以下程序的输出结果是:( )
#include <iostream.h>
int fun(char *s){
char *p=s;
while (*p!='\0') p++;
return (p-s);
}
void main(){
cout<<fun("abc")<<endl;
}
A.0 B。1 C。2 D。3
二、填空题(每小题2分,共20分)
1.设
struct student
{ int no;char name[12];
char sex;float score[4];
}stu1;
在程序执行时,系统为stu1分配 个字节的内存空间。
2.设有一函数,其代码如下:
int power (x,n)
{
int i,p;
for (p=1,i=1; i<=n;++i )
p=p*x;
return(p);
}
现要求取消变量i,重写该函数如下,请在空白上填上适当内容。
int power (int x,int n)
{
int p;
for ( _________; n>0; __________)
p=p*x;
return (p);
} 3.函数void revstr(char*s)将字符串s逆置。例如字符串“abcde”,经过逆置后变为“edcba”。
void revstr(char *s)
{ char *p, c;
if(s == NULL) return;
p= ; /* p指向字符串s的最后一个有效字符 */
while ( s < p ) {
/* 交换并移动指针 */
C = *S;
= *p;
= c;
}
}
4.本程序用古典的Eratosthenes的筛法求从2起到指定范围内的素数。如果要找出2至10中的素数,开始时筛中有2到10的数,然后取走筛中的最小的数2,宣布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数3、5、7、9:重复上述步骤,再取走最小数3,宣布它为素数,并取走3的倍数,于是留下5、7。反复重复上述步骤,直 至筛中为空时,工作结束,求得2至10中的全部素数。程序中用数组sieve表示筛子,数组元素sieve[i]的值为1时,表示数i在筛子中,值为-1时表示数i已被取走。
#include <iostream.h>
const int MAX=22500;
void main()
{ unsigned int i , range , factor , k ;
int sieve[MAX] ;
cout<<"please input the range : ";
cin>>range; /*range指出在多大的范围内寻找素数 */
for (i=2 ; i<=range ; i++) /* 筛子初始化 */
;
factor=2 ;
while (factor<=range) {
if ( )
{ /*筛子最小数是素数 */
cout<<factor<<' \t';
k=factor;
while (k<=range)
{ /*移走素数的倍数 */
; /*筛中的个数减一 */
k= ;
}
}
factor++ ;
}
三、写出程序运行结果(每小题5分,共45分)
1.以下程序的执行结果是:
#include <iostream.h>
void fun(int *s,int n1,int n2)
{
int i,j,t;
i=n1; j=n2;
while (i<j){
t=*(s+i); *(s+i)=*(s+j); *(s+j)=t;
i++; j--;
}
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a;
fun(p,0,3); fun(p,4,9); fun(p,0,9);
for(i=0;i<10;i++) cout<<*(a+i);
cout<<endl;
}
void other()
{
static int a=2;
static int b;
int c=10;
a=a+2;i=i+32;c=c+5;
cout<<”___OTHER___\n”;
cout<<”i:”<<i<<”a:”<<a<<”b:”<<b<<”c:”<<c<<endl;
}
2.写出下列程序的运行结果。
#include <iostream.h>
void fun(int a[],int n,int &s){
s=0;
for(int i=0;i<n;i+=2) s+=a[i];
}
void main(){
int x[5]={1,2,3,4,5};
int y[10]={1,2,3,4,5,6,7,8,9,10};
int m,n;
fun(x,5,m);
cout<<"m="<<m<<endl;
fun(y,8,m);
cout<<"m="<<m<<endl;
fun(y+3,5,m);
cout<<"m="<<m<<endl;
}
3.写出以下程序的执行结果
#include <iostream.h>
void other();
int i;
void main()
{
static int a;
int b=-10;
int c=0;
other();
cout<<”___MAIN___\n”;
cout<<”i:”<<i<<”a:”<<a<<”b:”<<b<<”c:”<<c<<endl;
c=c+8;
other();
cout<<”___MAIN___\n”;
cout<<”i:”<<i<<”a:”<<a<<”b:”<<b<<”c:”<<c<<endl;
}
4.写出下列程序的运行结果。
#include <iostream.h>
int f(int a){
return ++a;
}
int g(int& a){
return ++a;
}
void main(){
int m=0,n=0;
m+=f(g(m));
n+=f(f(n));
cout<<"m="<<m<<endl;
cout<<"n="<<n<<endl;
}
5. 写出下列程序的运行结果。
#include <iostream.h>
void main()
{
struct num{
int x; int y;
} sa[] = {{2, 32}, {8, 16}, {4, 48};
struct num *p = sa+1;
int x;
x = p->y / sa[0].x * ++p->x;
cout<<”x=”<<x<<” p->x=”<<p->x<<endl;
}
6. 写出程序的输出结果和函数int p(int k, int a[])的功能。
#include <stdio.h>
int p(int k, int a[])
{ int m, i, c = 0;
for(m = 2; m <= k; m++) {
for(i = 2; i <= m; i++)
if (!(m % i)) break;
if (i == m) a[c++] = m;
}
return c;
}
#define MAXN 20
void main()
{ int i, m, s[MAXN];
m = p(13, s);
for (i = 0; i < m; i++)
printf("%4d\t", s[i]);
printf("\n");
}
7.#include<iostream.h>
template <class TT>
class FF{
TT a1,a2,a3;
public:
FF(TT b1,TT b2,TT b3){
a1=b1;a2=b2;a3=b3;
}
TT Sum(){return a1+a2+a3;}
};
void main(){
FF <int> x(2,3,4),y(5,7,9);
cout<<x.Sum()<<’ ’<<y.Sum()<<endl;
}
8.#include <iostream.h>
class A{
int a;
public :
A(int aa=0){a=aa;}
~A(){cout<<”Destructor A!”<<a<<endl;}
};
class B : public A {
int b;
public:
B(int aa=0,int bb=0):A(aa){b=bb;}
~B(){cout<<”Destructor B!”<<b<<endl;}
};
void main(){
B x(5),y(6,7);
}
9.
#include <iostream.h>
#include <string.h>
void main(){
char *a[5]={“student”,”worker”,”cadre”,”soldier”,”peasant”};
char *p1,*p2;
p1=p2=a[0];
for(int i=0; i<5; i++){
if(strcmp(a[i],p1)>0)p1=a[i];
if(strcmp(a[i],p2)<0)p2=a[i];
}
cout<<p1<<’ ’<<p2<<endl;
}
四、程序设计题(20分)
输入一数组元素个数及数值,并对数组进行选择排序。选择排序思想是:每一趟从待排序的记录中选出最小的记录,放在已排好序的记录后面。
如:7 2 5 3
第一趟排序后:2 7 5 3
第二趟排序后:2 3 5 7
第三趟排序后:2 3 5 7