《C++语言程序设计》复习题及参考答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

福师1203考试批次《C++语言程序设计》复习题及参考答案本课程复习题所提供的答案仅供学员在复习过程中参考之用,有问题请到课程论坛提问。

福师1203考试批次《C++语言程序设计》复习题及参考答案一本复习题页码标注所用教材为:
教材名称单价作者版本出版社
C++程序设计教程
39.5 钱能2005年9月第2版清华大学出版社
(第二版)
如学员使用其他版本教材,请参考相关知识点
一、选择填空(每小题2分,计16小题,共32分)
1、类MyClass的定义如下:
class MyClass
{
public:
MyClass() { value = 0;}
SetVariable(int i) { value = i; }
private:
int value;
}
则对下列语句序列正确的描述是_______。

MyClass *p,my; p=&my;
A)语句p=&my;是把对象my赋值给指针变量p
B)语句MyClass *p,my;会调用两次类MyClass的构造函数
C)对语句 *p.SetVariable(5)的调用是正确的
D)语句p->SetVariable(5)与语句my.SetVariable(5)等价
【参考答案】:D
2、对类的构造函数和析构函数描述正确的是_______。

A) 构造函数不能重载,析构函数可以重载
B)构造函数可以重载,析构函数不能重载
C)构造函数可以重载,析构函数也可以重载
D)构造函数不能重载,析构函数也不能重载
【参考答案】:B
3、在C++中,数据封装要解决的问题是______。

A)数据的规范化 B)便于数据转换
C)避免数据丢失 D)防止不同模块之间数据的非法访问
【参考答案】:D
4、对于拷贝构造函数,正确的描述是________。

A)在C++语言中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数
B)必须为每个类定义拷贝构造函数
C)如果要使用拷贝构造函数,则必须在类中先定义
D)当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造函数
【参考答案】:A
5、继承具有_____,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。

A)规律性 B)传递性 C) 重复性 D)多样性
【参考答案】:B
6、一个类的友元函数或友元类能够通过成员操作符访问该类的________。

A)私有成员 B) 所有成员 C)公用成员 D) 保护成员
【参考答案】:B
7、关于纯虚函数和抽象类的描述中,错误的是________。

A)纯虚函数是一种特殊的虚函数,它没有具体的实现
B)抽象类是指具有纯虚函数的类
C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D)抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
【参考答案】:C
8、__①___提供了类对外部的接口, __②____是类的内部实现,而__③___不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。

A)公有成员 B)私有成员 C)私有成员函数 D)保护成员
【参考答案】:A、C、D
9、关于C++语言和C语言的关系的下列描述中,错误的是________。

A)C语言是C++语言的一个子集
B)C语言和C++语言都是面向对象的语言
C)C++语言与C语言兼容
D)C++语言对C语言做了些改进
【参考答案】:B
10、组成C++语言程序的是________。

A)子程序 B)过程 C)函数 D)主程序和子程序
【参考答案】:C
11、C++语言规定:一个源程序中,main函数的位置________。

A)必须在最开始 B)必须在系统调用的库函数的后面C)可以任意 D)必须在最后
【参考答案】:C
12、C++中cin是________。

A)一个标准的语句 B)预定义的类
C)预定义的函数 D)预定义对象
【参考答案】:D
13、将C++源程序进行________可得到目标文件。

A)编辑 B)编译
C)连接 D)拼接
【参考答案】:B
14、将目标文件进行________可得到可执行文件。

A)编辑 B)编译
C)连接 D)拼接
【参考答案】:C
15、下列符号中能用作C++自定义标识符的是________。

A)5abc B)if
C)-abc D) abc
【参考答案】:D
16、若要在if后一对圆括号中表示条件“a不等于0成立”,则能正确表示这一关系的表达式为________。

A)a<>0 B)!a
C)a=0 D)a
【参考答案】:D
二、写出下列程序的运行结果
1、(4分)
#include <iostream.h>
#include <string.h>
class StudentID{
public:
StudentID(int id=0 )
{
value=id;
cout <<"Assigning student id " <<value <<endl; }
~StudentID()
{
cout <<"Destructing id " <<value <<endl;
}
protected:
int value;
};
class Student{
public:
Student(char* pName="no name",int ssID=0):id(ssID) {
cout <<"Constructing student " <<pName <<endl; strncpy(name,pName,sizeof(name));
name[sizeof(name)-1]='\n';
}
protected:
char name[20];
StudentID id;
};
void main()
{
Student s("Mary",2001);
Student t("John");
}
程序运行的结果为:
【知识点】:对象生灭,见P293,主要理解成员的初始化(P305)
2、(5分)
#include <iostream.h>
class Point
{
int x,y;
public:
Point(int x1,int y1)
{
x=x1;y=y1;
}
virtual int area() const
{
return 0;
}
};
class Rect:public Point
{
int l,w;
public:
Rect(int x1,int y1,int l1,int w1):Point(x1,y1)
{
l=l1;w=w1;
}
virtual int area() const
{
return l*w;
}
};
void fun(Point &p)
{
cout << p.area() << endl;
}
void main()
{
Rect rec1(3,4,10,7),rec2(5,10,8,16);
Point *base=&rec2;
fun (rec1);
fun(*base);
}
程序运行的结果为:
【知识点】:继承,见P327,主要理解派生类的构造和继承方式。

3、(2分)
void main()
{ int i=8;
switch (i)
{ case 9:i=i+1;
Default:i=i+1;
Case 10:i=i+1;
Case 11:i=i+1;
}
cout<<i;
}
程序运行的结果为:
【知识点】:switch语句,见P31
4、(3分)
void main()
{ int k=4,n=0;
for (;n<k;)
{ n++;
if(n%3!=0) continue;
k--;
}
cout<<k<<”,”<<n;
}
程序运行的结果为:
【知识点】:for循环,见P36;continue语句,见P51
三、填空题
1、下列程序在构造函数和析构函数中申请和释放类的私有成员,请完成该类的实现。

(8分)
class MyClass
{
public:
MyClass(int a);
~MyClass();
private:
int* X;
};
MyClass::MyClass(int a)
{
____①_____;
}
MyClass::~MyClassO
{
____②______;
}
【知识点】:构造函数的成员初始化(参见P305)和析构函数(参见P316)2、以下是统计一个英文句子中字母出现个数的程序。

请将此程序补充完整。

(8
分)
#include <iostream.h>
int count(char str[]);
void main() {
char sl[80];
cout<<”Enteryaline:”;
cin>>sl;
cout<<”count=”<<count(sl)<<endl;
}
int count(char str[]) {
int num=0;
for(int i=0;str[i];i++)
if(_____(1)_________) num++;
return______(2)________;
}
【知识点】:函数机制,见P134
3、写出下面函数的功能。

(9分)
Float FI(int n) //n为大于等于1的整数
{
float x,y=0;
do{
cin>>x;
n--;
y+=x*x;
}while(n>0);
return y;
}
答:该函数的功能为:______________________
【知识点】:do-while循环,参见P39
四、编程题
1、定义一个Shape抽象类,由它派生出Rectanglr和Circle类,二者都有GetArea( )函数计算对象的面积,GetPerim( ) 函数计算对象的周长。

(9分)#include <iostream.h>
class Shape
{
[①定义GetArea 和GetPerim函数 ______]
};
class Circle:public Shape
{
public:
Circle(float radius):itsRadius(radius){}
float GetArea(){return 3.14*itsRadius*itsRadius;}
float GetPerim(){return 6.28*itsRadius;}
private:
float itsRadius;
};
class Rectangle : public Shape
{
public:
[②定义Rectangle构造函数_____________]
[③定义 GetArea()和 GetPerim()函数_______]
private:
float GetLength(){return itsLength;}
float GetWidth(){return itsWidth;}
private:
float itsWidth;
float itsLength;
};
【知识点】:继承,见P327,主要理解派生类的构造以及继承方式。

2、编写一个程序求一元二次方程的解(10分)。

讨论下述情形:
(1)a=0,不是二次方程。

(2)b^2-4ac=0,有两个相等实根。

(3) b^2-4ac>0,有两个不等实根。

(4) b^2-4ac<0,有两个复根(表示成x+yi,x-yi)。

【知识点】:综合知识题,主要见if语句(参见P27)
3、编写一个程序计算两个给定长方形的面积之和。

要求在设计类成员函数
addarea()(用于计算两个长方形的总面积之和)时使用对象作为参数。

(10分)【知识点】:类及相应的成员函数,参见P252
福师1203考试批次《C++语言程序设计》复习题及参考答案二本复习题页码标注所用教材为:
教材名称单价作者版本出版社
C++程序设计教程
39.5 钱能2005年9月第2版清华大学出版社
(第二版)
如学员使用其他版本教材,请参考相关知识点
一、选择填空(每小题2分,计16小题,共32分)
1、下列不是C++中整型常量的为。

A)02 B)0 C)038 D)0XAE
【参考答案】:C
2、下面表示反斜杠字符的是。

A)‘\’ B)‘\\’ C)“\” D)“\\”
【参考答案】:B
3、已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=‘8’-‘3’+‘a’= 。

A)‘a’ B)‘F’ C)“f” D)表达式错误
【参考答案】:C
4、设有“inta,b,c;”,下列选项中,不符合C++语法的语句是。

A)a=3; B)a+b*c; C){c=a>b?a:b}; D).;【参考答案】:C
5、已知有定义“inta,b;const int c;”,下列符合C++语法的表达式为。

A)4+c=b=0 B)a=++b C)a=c=b=6 D)a=4++ 【参考答案】:B
6、若有语句int a=5;则执行语句a+=a*=10;后,a的值为。

A)55 B)100 C)60 D)105
【参考答案】:B
7、设在某个机器中,int型变量占2个字节的内存,则下列语句的输出结果为。

int i=65535;
cout<<i;
A)65535 B)0 C)-1 D)语法错误
【参考答案】:C
8、执行以下语句后a和b的值分别为。

int a=5,b=6,w=1,x=2,y=3,z=4;
{a=w>x}&&{b=y>z};
A)6,6 B)5,3 C)0,6 D)0,0
【参考答案】:C
9、执行下列语句后,输出的结果为。

int x=0;
cout<<(x=4*5,x*5),x+25;
A)20 B)100 C)45 D)125
【参考答案】:C
10、如果a=1,b=2,c=3,d=4,则表达式a<b?a:c<d?c:d的值为。

A)1 B)2 C)3 D)4
【参考答案】:A
11、void main(void)
{ int n =9;
while (n>6){n--;cout<<n;}
}
该程序的输出结果为。

A)987 B)876 C)8765 D)9876
【参考答案】:B
12、有如下程序
void main(void)
{ int x =23;
do{cout<<x--;}while(!x);
}
该程序的执行结果是。

A)321 B)23 C)不输出任何内容 D)陷入死循环【参考答案】:B
13、下面有关for循环的说法正确的为。

A)for循环只能用于循环次数确定的情况
B)for循环是先执行循环体语句,后判断表达式
C)在for循环中,不能用break语句跳出循环体
D)for循环的循环体中,可以包含多条语句,但必须用花括号括起来【参考答案】:D
14、下列程序运行输出结果为。

void main(void)
{ int i,sum;
for (i=1;i<=3;sum++) sum+=i;cout<<sum;
}
A)6 B)3 C)死循环 D)0
【参考答案】:C
15、以下正确的描述为。

A)continue语句的作用是结束整个循环的执行
B)只能在循环体内和switch语句体内使用break语句
C)在循环体内使用break语句或continue语句的作用相同
D)从多层循环嵌套中退出时只能使用goto语句
【参考答案】:B
16、已知函数f的定义为:
void f()
{.....}
则函数定义中void的含义为。

A)执行函数f后,函数没有返回值
B)执行函数f后,函数不再返回
C)执行函数f后,可以返回任意类型的值
D)以上三个答案全是错误
【参考答案】:A
二、写出下列程序的运行结果
1、(4分)
include<iostream.h>
int f(int x,int y)
{ return(y-x)*x;
void main()
{ int a=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
cout<<d;
}
}
程序的运行结果为:
【知识点】:函数机制,参见P134,主要理解传值参数
2、(4分)
#include<iostream.h>
long fib(int n)
{ if(n>2) return fib(n-1)+fib(n-2);
else return 2;
}
void main(void)
{ cout<<fib(6);}
程序的运行结果为:
【知识点】:递归函数,参见P161
3、(3分)
#include<iostream.h>
void f(int i)
{ cout<<“int”<<i<<endl;}
void f(float f)
{ cout<<“double”<<f<<endl;}
void f(double d)
{ cout<<“double”<<d<<endl;}
void main()
{ f(‘c’);f(‘10’);f(10.1);}
程序的运行结果为:
【知识点】:函数的重载,参见P165
4、(3分)
#include<iostream.h>
Long num cow(int n)
{ int i;
long sum=1;
for (i=4;i<n;i++)sum+=mum cow(n-i);
return sum;
}
void main()
{ int n;
cout<<“Input the Years:”;cin>>n;
cout<<“Cow sum=:”<<num cow(n);
}
程序的运行结果为:
【知识点】:函数调用(参见P134)以及for循环(参见P40)
三、填空题
1、以下程度对输入的一个小写字母,将字母循环后移5个位置后输出,如‘a’变成‘f’,‘w’变成‘b’。

请在横线上填入正确的内容。

(10分)#include<iostream.h>
void main()
{ char c;cin>>c;
if(c>=‘a’&&c<=‘u’)①;
else if (c>=‘v’&&c<=‘z’)②;
cout<<c;
}
【知识点】:if语句(参见P27)以及字符型变量(参见P70)
2、以下程序是计算x,y,z三个数中值最小的,请在横线上填入正确的内容。

(15分)
#include<iostream.h>
void main()
{ int x=4,y=5,z=8;
int u,v;
u=x<y?①;
v=u<z?②;
}
【知识点】:if语句,参见P27
四、编程题
1、编程求1000之内的所有“完数”及其因子。

所谓“完数”是指一个数恰好等
于它的因子之和。

例如6是完数,因为6=1+2+3。

(9分)
【知识点】:for循环(参见P36)以及if语句(参见P27)
2、编写程序,其中包含三个重载的display()函数。

第一个函数输出一个double 值,前面用字符串“A double:”引导,第二个函数输出一个int值,前面用字符串“A int:”引导;第三个函数输出一个char字符,前面用字符串“A char:”引导。

在主函数中,分别用double,float,int,char和short型变量去调用
display()函数,并对结果做简要说明。

(10分)
【知识点】:函数重载,参见P165
3、编程:输入一个三位整数,将它反向输出。

(10分)
【知识点】:if语句,参见P27页
福师1203考试批次《C++语言程序设计》复习题及参考答案三本复习题页码标注所用教材为:
教材名称单价作者版本出版社
C++程序设计教程
39.5 钱能2005年9月第2版清华大学出版社
(第二版)
如学员使用其他版本教材,请参考相关知识点
一、选择填空(每小题2分,计16小题,共32分)
1、运算符+、=、*、>=中,优先级最高的运算符是。

A)+ B)= C)* D)>=
【参考答案】:C
2、下列说法正确的是。

A)cout<<“\n”是一个语句,它能在屏幕上显示”\n”
B)\68代表的是字符D。

C)1E+5的写法正确,它表示余割整型常量。

D)0x10相当于020。

【参考答案】:D
3、下列不合法的变量名为()。

A)int B)int1 C)name_1 D)name0
【参考答案】:A
4、下面正确的为()。

A)4.1/2 B)3.2%3
C)3/2==1 结果为1 D)7/2 结果为3.5
【参考答案】:A
5、已知a=4,b=6,c=8,d=9,则“(a++,b>a++&&c>d)?++d:a<b”值为。

A)9 B)6 C)8 D)0
【参考答案】:D
6、已知i=5,j=0,下列各式中运算结果为j=6的表达式是。

A)j=i+(++j) B)j=j+i++ C)j=++i+j D)j=j+++i 【参考答案】:C
7、如果s是int型变量,且s=6,则下面s%2+(s+1)%2表达式的值为____。

A)0 B)语法错 C)1 D)“假”
8、C++源文件的扩展名为。

A)cpp B)c C)txt D)exe
【参考答案】:A
9、C++的合法注释是。

A)/*This is a C program/* B)// This is a C program
C)“This is a C program” D)//This is a C program//
【参考答案】:B
10、下列数组的定义中,是错误的。

A)char ca1[]={‘c’,’m’,’n’}; B)char ca2=”name”;
C) char ca3[4]=”your”; D)int array[]={1,2,3,4};【参考答案】:C
11、下列一维数组定义正确的是。

A)x=6;int num[x]; B)const int x=6;float a[x];
C)const float x=6;int b[x]; D)const int x=6;int c[x];【参考答案】:B
12、关于函数的声明和定义正确的是。

A)函数的声明是必须的,只有这样才能保证编译系统对调用表达式和函数之间的参数进行检测,以确保参数的传递正确
B)函数的定义和声明可以合二为一,可以只有函数定义即可
C)函数在声明时,其参数标识符可省略,但参数的类型、个数与顺序不能省略
D)函数的存储类型为外部型,所以可以在其他函数中被调用,它在定义时象其他外部变量一样,可以在其他函数内定义
【参考答案】:C
13、在函数的返回值类型与返回值表达式的类型的描述中,错误的是。

A)函数返回值的类型是在定义函数时确定,在函数调用时是不能改变的
B)函数返回值的类型就是返回值表达式的类型
C)函数返回值表达式类型与返回值类型不同时,函数表达式类型应转换成返回值类型
D)函数返回值类型决定了返回值表达式的类型
14、若有以下定义,则说法错误的是。

int a=100,*p=&a ;
A)声明变量p,其中*表示p是一个指针变量
B)变量p经初始化,获得变量a的地址
C)变量p只可以指向一个整形变量
D)变量p的值为100
【参考答案】:D
15、若有以下定义,则赋值正确的是。

int a ,b , *p;
float c, *q;
A)p=&c B)q=p C)p=NULL D)q=new int
【参考答案】:C
16、如果x是整型变量,则合法的形式是。

A)&(x+5) B)*x C)&*x D)*&x 【参考答案】:D
二、写出下列程序的运行结果
1、(4分)
#include<iostream.h>
f(int a)
{
int b=0;
static int c=3;
b++;
c++;
return(a+b+c);
}
void main( )
{
int a=2,i;
for(i=0;i<3;i++)
cout<<f(a)<<endl;
}
程序的运行结果为:
【知识点】:函数机制中的传值参数,参见P137 2、(4分)
下列程序的运行结果是______________________。

#include <iostream.h>
class A {
public:A(){
cout<<"1";
}
~A(){
cout<<"2";
}
};
class B:public A {
public:B(){cout<<"3";}
~B(){cout<<"4";}
};
void main() {
B b;
}
【知识点】:构造函数和析构函数。

见P293
3、(3分)
#include<iostream.h>
int a=10;
f(int a)
{ static b=2;
return b+=a+b;
}
void main()
{ for(int i=0;i<2;i++)cout<<f(a);}
程序的运行结果为:
【知识点】:函数机制中的传值参数,参见P137
4、(3分)
#include<iostream.h>
int m1(int a);
int m2(int a);
void main()
{ cout<<m1(11);}
int m1(int a)
{ if(a<0)return a;
else m2(a-1)
}
int m2(int a)
{ if(a<0)return a;
else m1(a-3)
}
程序的运行结果为:
【知识点】:函数机制中的传值参数,参见P137
三、填空题
1、程序中函数check()的功能是检查value中的值四舍五入成整数后,与num 的值是否相等,相等则显示“Ok!”,否则显示“Sorry!”。

请将程序补充完整。

(8分)
#include <iostream.h>
void check(int num,float value) {
int val;
val=_____(1)_________;
if(_______(2)__________)
cout<<”Ok!”<<endl;
else cout<<”Sorry!”<<endl;
}
void main() {
check(24,23.56);
check(15,14.23);
}
答:(1)______________________ (2)_____________________
【知识点】:函数机制(参见P134)以及if语句(参见P27)
2、若有定义语句:char s[100],d[100];int j=0,i=0;,且s中已赋字符串,请填空以实现字符串复制(注:不得使用逗号表达式)。

(8分)
while (s[i]){d[j]= ①;j++;}
d[j]=0;
【知识点】:字符数组,参见P77;以及while循环
3、输入一个整数,输出该整数的所有素数因子。

例如,输入120,输出为2、2、2、3和5。

(9分)
#include <iostream.h>
void main() {
int m,i=2;
cout<<"please input m:";
cin>>m;
while()
if(m%i==0) {cout<<i<<","; m=m/i; }
else ________;
}
【知识点】:if语句,参见P27
四、编程题
1、输入一个星期几的数字号码,输出相应的英文单词。

要求使用指针数组实现。

(10分)
【知识点】:if-else语句,参见P27
2、编程对用户输入一个含有10个整数的一维数组,分别计算数组中所有正数和所有负数的和。

(10分)
【知识点】:if-else语句,参见P27
3、建立一个基类Building ,用来存储一座楼房的层数、房间数以及它的总平方英尺数。

建立派生类Housing,继承Building,并存储下面的内容:卧室和浴
室的数量,另外,建立派生类Office,继承Building,并存储灭火器和电话的数目。

然后,编制应用程序,建立住宅楼对象和办公楼对象,并输出它们的有关数据。

(9分)
【知识点】:综合知识点,主要理解类及其成员函数(P252)。

相关文档
最新文档