试卷代号:11075
国家开放大学2 0 2 3年春季学期期末统一考试
C++语言程序设计 试题
2023年7月
一、单选题(每小题2分,共40分)
1.执行下面语句后,将输出( )个*号。
for(int i= 20;i> =0 ,i-一)cout<<′*′;
A.0 B.19
C.20 D.21
2.执行下面语句后,x的值是( )。
int x=4,y;
y= x――;
A.3 B.4
C.2 D.0
3.下列表达式中,有副作用的是( )。
A.i++ B.i+3
C.i>3 D.i==3
4.若OK是一个逻辑型变量,则在下列语句中,与其他语句输出不同的那个语句是( )。
A. if(OK) cout<<“!!”;else cout<<“??”;
B. if(OK==true) cout<<“!!”;else cout<<“??”;
C. if(! OK==true) cout<<“!!”;else cout<<“??”;
D. if(l OK)cout<<“??”;else cout<<“!!”;
5.while语句的语法格式可表示为:
while(循环条件)循环体
下列关于while语句的表述中,错误的是( )。
A.循环条件应该是一个逻辑表达式 B.循环条件应至少执行一次
C.循环体是一个逻辑表达式 D.循环体有可能一次都不执行
6.语句”double brm[5]={1,2,3};”定义了一个一维数组。关于此数组,下列表述中错误的是( )。
A.数组的名称是brm B.数组的类型是双精度实型
C.数组有5个元素 D.元素brm[l]的初值是1
7.语句”int data[][3]={{1,2,3),{1,2),{1));”定义了一个二维数组。关于此数组,下列表述中错误的是( )。
A.数组名称是data B.数组有6个元素
C.最大列下标是2 D.元素data[2][1]的值为O
8.已知f是一个无参有返回值函数。下列对f的调用中,作为语句调用的是( )。
A.f()+1; B.x=f();
C. cout<<f(); D.f();
9.已知函数f的原型是:void f(int xy[],int size);,其中size表示数组xy的元素个数且还有如下数组定义:
int a[]一{1,2,3,4,5,6);
下列对f的调用中正确的是( )。
A.f(a[],6) B.f(a,6)
C.f(xy[],6) D.f(xy,6)
10.要想定义一个指向字符串”Hello!”的指针p,且不允许通过p修改所指向的字符串,则p应定义为( )。
A. char*const p=“Hello!”; B.const char*p=“Hello!”;
C. char const p=“Hello!”; D.const char p=“Hello!”;
11.下列语句定义变量p使得语句”cout<<p;”输出单词Goodmorning,其中错误的定义语句是( )。
A. char p[]=“Goodmorning”;
B. char*p=“Goodmorning”;
C.char p[]={′G′,′O′O,′d′,′m′,′o′,′r′, ′n′F′,′g′,′\O′);
D.char*p={′G′,′o′,′o′,′d′,′m′,′o′,′r′,′n′,′i′,n′,g′,′\0};
12.有如下类声明:
classf
int i,j;
private:
int m;
public:
int n:
private:
int p;
};
其中私有成员的个数是( )。
A.2 B.3
C.4 D.5
13.关于类的构造函数,下列表述中错误的是( )。
A.每个类至少有两个构造函数
B.构造函数的名称与类名相同
C.可以不提供实参的构造函数称为默认的构造函数
D.构造函数可以重载
14.关于复制构造函数,下列表述中错误的是( )。
A.复制构造函数参照参数传来的对象来初始化同类的新对象
B.每个类可以有多个复制构造函数
C.如果类中没有声明复制构造函数,系统将自动生成一个默认的复制构造函数
D.默认的复制构造函数以内存映像复制的方式来初始化新对象
15.已知应用系统中已声明了如下函数:
int block(double,int=0);
下列函数声明试图重载block,其中正确的是( )。
A. double block(double,int); B.int block(double,int, char=′A′);
C. int block(double,long=0); D.int block(double,int, char);
16.关于函数模板,下列表述中错误的是( )。
A.函数模板声明以保留字template开头
B.必须用虚拟类型参数声明模板函数返回值的类型
C.调用模板函数时,模板实参在一定条件下可以省略
D.在调用模板函数时,根据需要,有可能生成该函数模板的一个实例
17.关于基类和派生类,下列表述中错误的是( )。
A. 一个基类可以有若干派生类
B.一个派生类可以有若干基类
C.基类是它的所有派生类的共性的体现
D.派生类继承基类的所有非私有成员作为自己的成员
18.关于虚函数,下列表述中错误的是( )。
A.只有用virtual修饰的函数才是虚函数
B.只有类的成员函数才能声明为虚函数
C.在派生类中可以重新定义基类声明的虚函数
D.静态成员函数不得声明为虚函数
19.关于类模板,下列表述中错误的是( )。
A.类模板以保留字template开头
B.类模板的每一个实例就是一个类定义
C.可以为任意的一个或多个模板参数设置默认值
D.有默认值的实参在一定条件下可以省略
20.下列标识符中,不属于C++流操纵符的是( )。
A. delete B.setw
C.endl D.right
二、填空题(每小题2分,共20分)
21.程序开发过程的四个步骤按正确的顺序分别称___________.
22.有如下枚举声明:
enum ANIMAL{ DOG, CAT=35, PIG, HEN, DOVE};
其中DOVE所对应的整数是_____________。
23.结束所在循环类语句或switch语句执行的中断语句的保留字为_____________。
24.语句”float p[5]={1.lf,2.2f,3.3f);”定义了一维数组p,其元素个数是 。
25若一函数直接或间接调用了该函数自身,此种类型的调用称为_____________。
26.有两个不同操作符都用符号*表示,一个用于乘法,另一个用于_________________。
27.在定义类对象的语句执行时,系统在建立每个对象的过程中将自动调用该类的 _____________使其初始化。
28.重载”/”的操作符函数的名称是 。
29.具有纯虚函数的类称为_____________。
30.在C++流中,endl、setw、left等用于控制流的输入输出的符号统称为 _____________。
三、写出下列程序运行后的输出结果(每小题8分,共24分)
31.有程序:
# include<iostream>
using namespace std;
class A{
private :
int n;
public :
A(int i) { n=i; }
A& operator ++() {n++; return * this; }
A operator ++(int) { n+ =2; return * this; }
void Display() {cout<<′rn=u<<n<< endl;)
};
void main(){
A a(2),b(2);
a++;
++b;
a.Display();
b.Display();
}
运行此程序的输出是( )。
32.有如下程序:
# include<iostream>
using namespace std;
int main(){
int x口={2,4,6,8,10,12),s=0;
for(int i=l; i<6; i+=2)s+=x[i];
cout<<s;
return O:
}
运行此程序的输出是( )。
33.有如下程序:
# include<iostream>
using namespace std;
int main(){
int x[]= {1,2,3,4,5),*px=x;
for(int i=O;i<5; i++) cout<<*(px+i);
return O:
}
运行此程序的输出是( )。
四、写出下列每个函数的功能(每小题8分,共16分)
34. int WD(int a[], int n) {
int m=a[0],
for(int i=l;i<n;i++)
if(a[i]>m)m—a[i];
return m;
}
35. double FI(int n){//n为大于等于1的整数
double x,y=0;
do}
cin>>x;
y+=x*x;
} while(- -n);
return y;
}
函数功能: