试卷代号:1075
国家开放大学2 0 2 0年春季学期期末统一考试
C++语言程序设计 试题
2020年7月
一、单选题(每小题2分,共40分)
1.若a是int类型变量,则表达式a=1000%999的值是( )。
A.0 B.1
C.2 D.3
2.下列表达式中,不属于简单表达式的是( )。
A.-k
B.f(a,b)
C.2050139
D.my name is zhang san
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 (! OK)cout<<“!!”;else cout<<“!!”;
5.while语句的语法格式可表示为:
while(循环条件)循环体
下列关于while语句的表述中,错误的是( )。
A.循环条件应该是一个逻辑表达式
B.循环条件至少执行一次
C.循环体是一个表达式
D.循环体有可能一次都不执行
6.关于语句“long arm[6],”定义了一个一维数组。关于此数组,下列表述中错误的是( )。
A.数组的名称是arm
B.数组的最大下标是6
C.数组有6个元素
D.数组的类型是长整型
7.语句“int am[3] [4];”定义了一个二维数组。关于此数组,下列表述中错误的是( )。
A.数组的类型是整型 B.最大行下标是2
C.最大列下标是3 D.数组有6个元素
8.定义函数的格式是:
类型修饰符函数名(形参声明表){函数体)
其中的语法成分中,不能为空的是( )。
A.类型修饰符 B.函数名
C.形参声明表 D.函数体
9.关于函数调用中的实参,下列表述中最准确的是( )。
A.实参是一个常量 B.实参是一个变量
C.实参是一个类型修饰符 D.实参是一个表达式
10.关于指针,下列表述错误的是( )。
A.不指向任何数据的指针称为空指针
B.每个指针都对应一个地址
C.指针不但标明了某个数据的存储地址,还标明了该数据的类型
D.指针只能用来指向数据
11.函数f的原型是“int f(const int*n,double*d);”,且有如下变量定义:
int k=4;
double m[]一(1,2,3,4};
则下列对f的调用中正确的是( )。
A.f(k,m) B.f(&k,m)
C.f(k,&m) D.f(&k,& m)
12.下列类声明中正确的是( )。
A.class ma{ public:int k;}; B.Class Ma {public: int k;};
C.class char{ public:int k; }; D.class Char{};
13.关于类的析构函数,下列表述中错误的是( )。
A.析构函数在对象行将消亡时被调用
B.析构函数用于完成释放对象占用的计算机资源等收尾工作
C.若类对象没有需要完成的收尾工作,该类可以没有析构函数
D.析构函数没有参数
14.有如下定义:
class Mbf
public:
static int n:
);
Mb mb,&r—mb;
下列表达式试图访问类的静态成员n,其中错误的是( )。
A.mb.n B.r.n
C.Mb.n D.Mb::n
15.关于函数重载,下列表述中错误的是( )。
A.函数重载是指定义与已有函数同名的函数
B.重载的函数与已有函数的返回类型必须相同
C.重载的函数必须保证在调用时其参数的个数或类型与已有函数有所不同
D.若是重载类的成员函数,参数表后有无const修饰可以是它们唯一的区别
16.下列模板函数声明中正确的是( )。
A.template<typename T> void Double (T n) {return n+n;}
B.template (typename T) void Double<T n> {return n+n;}
C.template<typename T> int Int (T n) {return n;}
D.template (typename T) int Int<T n> {return n;}
17.关于继承成员的访问属性,下列表述中错误的是( )。
A.在公有继承方式下,所有继承成员的访问属性保持不变
B.在保护继承方式下,原来的公有属性变为保护属性
C.在私有继承方式下,原来的公有、保护属性变为私有属性
D.在任何继承方式下,原来的私有属性变为继承的私有属性
18.关于虚函数,下列表述中错误的是( )。
A.析构函数可以声明为虚函数
B.构造函数可以声明为虚函数
C.通过指针或引用对虚函数的调用称为多态调用
D.虚函数在派生类重定义后仍然是虚函数,可以进一步重定义
19.有如下类模板定义:
template<typename T>
class Ca {
public:
T fa();
);
要在模板外给出模板类成员函数fa的定义,正确的是( )。
A.T fa()( return 1;)
B.template<typename T>T fa () {return l;)
C.template<typename T>T Ca::fa () (return l;)
D.template<typename T>T Ca<T>:: fa () {return l;)
20.下列标识符中,不属于C++流的预定义流对象的是( )。
A.cerr B.fstream
C.cout D.cin
二、填空题(每小题2分,共20分)
21.若一个应用程序中只定义了一个函数,则该函数的名称是_________________。
22.用来表示常量3.25的类型修饰符是_________________。
23.有如下语句序列:
int j=0;
do cout<<’*’;while(j->0);
执行此语句输出的*的个数是_________________。
24.语句“double as[100];”定义了一维数组as,其最大下标是_________________。
25.系统提供的比较两个字符串大小的函数的名称是_________________。
26.若sizeof (int)的值为4,p是一个int型指针,则表达式p+=3使指针p移动的字节
数是_________________。
27.名为House的类的析构函数的函数名是_________________。
28.在+、-、=、*、>这几个操作符中,只能作为成员函数重载的是_________________。
29.在私有继承方式下,基类的公有成员在派生类中的访问属性是_________________。
30.在C++流中,操作符>>称为_________________。
三、写出下列程序运行后的输出结果(每小题8分,共24分)
31.有如下程序:
#include<iostream>
using namespace std;
class A {
int x; y;
public;
A () { x=0;y=0; }
A(int a, int b) { x=a;y=b; }
~A () {
if(x==y)
cout<<"x=y"<< endl;
else
cout<<"x! =y"<< endl;
}
void Display ()
{cout<<”x=” <<x<<”, y=” <<y<<endl;}
};
void main () {
A a1, a2(2,3);
A1.Display();
a2.Display();
}
运行此程序的输出是( )。
32.有如下程序:
# include<iostream>
using namespace std;
int main () {
int x[]=(2,4,6,8,10,12),a=0;
int i=0;
while(i<6){s+=x[i];i+=3;)
cout<<s;
return O;
}
运行此程序的输出是( )。
33.有如下程序:
# include<iostream>
using namespace std;
int main () {
int x [ ]={1,2,3,4,5),*px=x;
for (int i=0;i<2; i++) px++;
cout<<* px;
return 0;
}
运行此程序的输出是( )。
四、写出下列每个函数的功能(每小题8分,共16分)
34.int SA (int a, int b) {
if(a>b) return l,
else if (a= =b) return O;
else return -1,
}
函数功能 :
35.int LK (int a [], int n) {
float s=0; int i,
for (i=0; i<n; i++) s+=a[i]
s/=n;
int m=0;
for (i=0; i<n; i++) if(a[i] >=s)
return m;
}
函数功能 :