admin 管理员组

文章数量: 1184232


2024年5月21日发(作者:restapi 取数)

2021年福建省莆田市全国计算机等级考试

C++语言程序设计真题(含答案)

学校:________ 班级:________ 姓名:________ 考号:________

一、1.选择题(10题)

1. 数据库概念设计中由分散到集中的设计方法是

A.视图设计 B.视图集成设计 C.集中式模式设计 D.分散式模式设计

2. 常用的关系运算是关系代数和( )。

A.集合代数 B.逻辑演算 C.关系演算 D.字段

3. 若表R在排序前已按键值递增顺序排列,则 ______ 算法的比较次

数最少。

A.直接插入排序 B.快速排序 C.归并排序 D.选择排序

4.在c++语言中,数据封装要解决的问题是( )。

A.数据的规范化 B.便于数据转换 C.避免数据丢失 D.防止不同模块之

间数据的非法访问

5. 下列对变量的引用中,错误的是( )。

a;int &p=a;

a;char &p=a;

a;int &p;p=a;

a;float &p=a;

6. 若有以下程序: #include<iostream> using namespace std; int fun()

{ static int i=0; int s=1; s+=i; i++; return s; } int main() { int i,a=0; for(i=0;i

<5;i++) a+=fun(); cout<<a<<endl; return 0; } 程序运行后,输出的结

果是( )。

A.20 B.24 C.26 D.15

7. 有如下程序 #include<iostream.h> void main( ) { char

ch[2][5]={"6937","8254"},*p[2]; int i,j,s=0; for(i=0;i<2;i++)p[i]=ch[i];

for(i=0;i<2;i++) for(j=0;p[i][j]>'0';j+=2) s=10*s+p[i][j]-'0';

A.69825 B.63825 C.6385 D.693825

8. 以下程序输出结果是 ______。 #include<iostream.h> void fun(int x,

int y,int z){z=x+y;} void main() { int a=10; fun (2,2,a); cout<<a; }

A.0 B.4 C.10 D.无定值

9. 下列叙述中,正确的是( )。

A.线性表是线性结构 B.栈与队列是非线性结构 C.线性链表是非线性

结构 D.二叉树是是线性结构

10. 有如下程序: #include<iostream> using namespace std; Class

TestClass {int a; public: TestClass(int x){a=x;} void show(){cout<<

a;}}; class TestClass1:public TestClass {int b; public: TestClass1(int

i):TestClass(i+1),b(i){} voi

A.5 B.1 C.0 D.2

二、单选题(13题)

11. 数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定

的图符构成。下列图符名标识的图符不属于数据流图合法图符的是

( )。

A.控制流 B.加工 C.数据存储 D.源和潭

12.对于循环队列,下列叙述中正确的是()。

A.队头指针是固定不变的

B.队头指针一定大于队尾指针

C.队头指针一定小于队尾指针

D.队头指针可以大于队尾指针,也可以小于队尾指针

13.对于一个类定义,下列叙述中错误的是

A.如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数。

B.如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函

数。

C.如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷

贝构造函数。

D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造

函数。

14.语句ofstream f("SALARY.DAT",ios_base::app);的功能是建立

流对象f,并试图打开文件与f关联,而且

A.若文件存在,将其置为空文件;若文件不存在,打开失败

B.若文件存在,将文件指针定位于文件尾:若文件不存在,建立一个新

文件

C.若文件存在,将文件指针定位于文件首;若文件不存在,打开失败

D.若文件存在,打开失败;若文件不存在,建立一个新文件

15.下面关于类和对象的描述中,错误的是( )。

A.类就是C语言中的结构体类型,对象就是C语言中的结构体变量

B.类和对象之间的关系是抽象和具体的关系

C.对象是类的实例,一个对象必须属于一个已知的类

D.类是具有共同行为的若干对象的统一描述体

16.以下关键字不能用来声明类的访问权限的是( )。

C..proteCted e

17.若有以下定义: inta[]={1,2,3,4,5,6,7}; charc1=b,c2=2;

则数值不为2的表达式是( )。

A.a[1] 1 C.a[3-c2] D.c2-0

18.

19.

20.在一个派生类的成员函数中,试图调用其基类的成员函数“void

f();”,但无法通过编译。这说明( )。

A.f()是基类的私有成员 B.f()是基类的保护成员 C.派生类的继承方式

为私有 D.派生类的继承方式为保护

21.静态成员函数没有()。

A.返回值 指针 C.指针参数 D.返回类型

22.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。

下面属于应用软件的是_________。

A.编译程序 B.操作系统 C.教务管理系统 D.汇编程序

23.某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度

为(假设根结点在第1层)( )。

A.3 B.4 C.6 D.7

三、2.填空题(12题)

24. 假设a、b均是整型变量,则表达式a=2,b=5,a++,b++,a+b值为

【 】。

25. 多态性分为两类:编译时的多态性和【 】的多态性。

26. 程序

#include"iostream.h"

void main( )

{

int i =10;

int j=5;

cout<<j+i++<<endl;

}

的结果为【 】。

27. 在C++中,类的成员有3种访问权限,它们分别是公有、【 】和私

有。

28. 数据的逻辑结构有线性结构和【 】两大类。

29. 某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树

中共有______个结点

30. 有如下类定义,请将Sample类的复制构造函数补充完整。

class Sample{

public:

Sample( ){ }

~Sample( ){if(P)delete P;)

Sample(const Sample&s){______}

void SetData(int datA) {P=new int(datA) ;}

private:

int*P:

};

31. 为解决在多重继承环境中因公共基类带来的______问题,C++语言

提供了虚基类机制。

32. 程序段的输出结果是【 】。

int x=3,y=2,z=1;

count<<(x/y&~z);

33. 实现编译时的多态性的机制称为【 】,实现运行时的多态性的机制

称为【 】。

34. 软件开发过程主要分为需求分析、设计、编码与测试4个阶段,其

中______阶段产生“软件需求规格说明书”。

35. 类通过______与外界发生关系。

四、程序改错题(10题)

36.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序要

求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输

入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕

中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include

voidmain

{

inti=0;

charstr[120];

cout<<"Enterastringendwith?."<

//********error********

cin.getline(str,120);

//********error********

while(str)

{

//********error********

if(str[i])=a)

str[i]=str[i]-a+A;

i++;

}

cout<

return;

}

37.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错误,请改正错误,使程序正常运行,并且要求最后一个

catch必须抛出执行的任何异常。

程序异常,输出信息为

error

O

ERROR

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include

intmain

{

try

{

throw("error");

}

//********error********

catch(chars)

{

cout<

}

try

{

throw((int)0);

}

//********error********

catch

{

cout<

}

try

{

throw(O);

throw("error");

}

//********error********

catch

{

cout<<"ERROR"<

}

return0;

}

38.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,但该程

序运行有问题,请改正main函数中的错误,使该程序的输出结果正

确。

程序输出:

8

8

注意:错误的语句在/********error********/的下面。修改该语句

即可,其他的语句不能修改。

试题程序:

#include(iostream.h>

classCO

{

public:

/********error********/

staticintn=0:

CO

{

n++:

}

~CO

{

n--:

}

}:

/********error********/

intCO::n;

voidmain

{

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

/********error********/

eout<

cout<

}

39.使用VC++6.0打开考生文件夹下的源程序文件

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实

现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在

//******error******的下面。

试题程序:

#include

#include

//********error********

usingstd;

voidWriteFile(char*s)

{

ofstreamout1;

//********error********

out1.open("1.txt",binary|app);

for(inti=0;s[i]!=0;i++)

{

//********error********

out1.puts(s[i]);

}

out1.close;

}

voidClearFile

{

ofstreamout1;

out1.open("1.txt");

out1.close;

}

intmain

{

chars[1024];

ClearFile;

cout<<"pleaseinputastrin9:"<

cin.getline(s,1024);

WriteFile(s);

return0;

}

40.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序

要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可

能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出

到屏幕中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include

voidmain

{

inti=0;

charstr[120];

cout<<"Enterastringendwith?."<

//********error********

cin.getline(str,120);

//********error********

while(str)

{

//********error********

if(str[i])=a)

str[i]=str[i]-a+A;

i++;

}

cout<

return;

}

41.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行有问题,请改正main函数中的错误,使程序的输出结果为:

number=1

number=10

number=100

注意:不要改动main函数,不能增加或删除行。也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include

classTC

{

public:

TC(inti)

{

number=i;

}

voidSetNumber(intm)

{

number=m;

}

intGetNumberconst

{

returnnumber;

}

voidPrintconst

{

cout<<"number="<

}

private:

intnumber;

};

voidmain

{

//********error********

TCobjl;

objl.Print;

TCobj2(3);

//********error********

objl.number=10;

//********error*‰******

TC.SetNumber(100);

objl.Print;

obj2.Print;

}

42.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

注意:错误的语句在//******error******的下面,修改该语句即

可。

试题程序:

#include(iostream.h)

classTC

{

inti;

public:

TC;

voiddisplay;

~TC;

};

//******error******

TC:TC

{

cout<<"Constructor"<<",";

i=0;

)

//******error******

TC:display

{

tout<<"i="<

}

//******error******

TC:TC

{

COUI<<"Destructor"<

}

voidmain

{

TCa;

a.display;

}

43.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行有问题,请改正main函数中的错误,使程序的输出结果为:

number=1

number=10

number=100

注意:不要改动main函数,不能增加或删除行。也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include

classTC

{

public:

TC(inti)

{

number=i;

}

voidSetNumber(intm)

{

number=m;

}

intGetNumberconst

{

returnnumber;

}

voidPrintconst

{

cout<<"number="<

}

private:

intnumber;

};

voidmain

{

//********error********

TCobjl;

objl.Print;

TCobj2(3);

//********error********

objl.number=10;

//********error*‰******

TC.SetNumber(100);

objl.Print;

obj2.Print;

}

44.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

注意:错误的语句在//******error******的下面,修改该语句即可。

试题程序:

#include(iostream.h)

classTC

{

inti;

public:

TC;

voiddisplay;

~TC;

};

//******error******

TC:TC

{

cout<<"Constructor"<<",";

i=0;

)

//******error******

TC:display

{

tout<<"i="<

}

//******error******

TC:TC

{

COUI<<"Destructor"<

}

voidmain

{

TCa;

a.display;

}

45.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错。请改正程序中的错误,使程序输出的结果为

100

37

32

注意:错误的语句在//******error******的下面,修改该语句即

可。

试题程序:

#include

//******error******

voidmain

{

//******error******

intm=0142:

//******error******

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

}

五、综合应用题(2题)

46.使用VC++6.0打开考生文件夹下的源程序文件3.cpp。类

People包括姓名和年龄两个字段。函数fun获得年龄比较大的人的姓

名,然后输出这个姓名到屏幕。

其中定义的类并不完整,按要求完成下列操作,将类的定义补充完

整。

(1)完成类的构造函数功能,请在注释1后添加适当的语句。

(2)完成构造函数对姓名的赋值,请在注释2后添加适当的语句。

(3)定义类的友元函数fun,请在注释3后添加适当的语句。

(4)补充函数fun的年龄比较功能,请在注释4后添加适当的语句。

注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其

他的程序代码。

试题程序:

#include

classPeople

{

public:

//********1********

{

inti;

for(i=0;sUserName[i]!=0;i++)

{m_UserName[i]=sUserName[i];

}

//********2********

m_Old=nOld;

}

private:

charm_UserName[32];

intm_Old;

//********3********

};

voidfun(char*s,People&personl,People&person2

{

//********4********

if

{

for(inti=0;personl.m_UserName[i]!=0;i+

+)

{

s[i]=personl.m_UserName[i];

s[i+1]=0;

}

}

else

{

for(inti=0;person2.m_UserName[i]!=0;i+

+)

{s[i]=person2.m_UserName[i];

s[i+1]=0;

}

}

}

voidmain

{

chars[32];

Peoplepl("abc",20);


本文标签: 程序 设计 函数 错误 文件