2021年9月计算机二级C语言试题(总)

发布于 2019-07-26 08:48  编辑:simi
0
计算机等级考试题库 扫码微信刷题

不论你在什么时候开始刷二级C语言试题,重要的是开始之后就不要轻言放弃;不论你在什么时候结束,重要的是结束之后就不要后悔。


二级C语言试题

1

程序改错题

使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为

TC1

TC2

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

试题程序:

#include

#includestructTCO

{

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

virtualvoidfun();

};

classTClpublicTCO

{

voidfun()

{

cout<<"TCl"<}

};

classTC2publicTCO

{

voidfun()

{

cout<<"TC2"<}

};

voidmain()

{

TCO"P;

TClobj1;

TC2obj2;

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

p=*obj1;

p->fun();

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

p=*obj2;

p->fun();

return;

}

参考答案:

(1)应改为“virtualvoidfun()=0;”。

(2)应改为“p=&obj1;”。

(3)应改为“p=&obj2;”。

【解析】如果在基类中不使用这个虚函数,其返回值也是没有意义的,它应该被定义为纯虚函数。所以虚函数fun应该是纯虚函数,也就是声明虚函数时初始化为0的函数。即第2处的“virtualvoidfun()=0;”。第2处的P为指针变量,将对象obj1赋值给P,实际上蹙P指向对象obj1的地址,所以将“p=*obj1;”修改为“P=&obj1;”。第3处的“P=*obj2;”修改为“p=&obj2;”。

简单应用题

使用VC++6.0打开考生交件夹下的源程序文件2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intN[4])的功能是用4个数字,组成互不相同且无重复数字的3位数,并将满足所有条件的数字输出到屏幕,

并且每输出一个3位数就换一行。

程序分析:可填在百位、十位、个位的数字都是1230。组成所有的排列后再去掉不满足条件的排列。如果判定第一个数字是0,则也去掉。

试题程序:

#include

voidfun(intN[4])

{

}

intmain()

intN[4]={1230};

fun(N)

return0;

}

参考答案:

intijk;

for(i=0;i<4;i++)//百位循环

{

for(j=0;j<4;j++)//十位循环

for(k=0;k<4;k++)//个位循环

{

if(i!=j&&j!=k&&k!=i&&N[i]!=0)//

当三位数不同,并且百位不为0

{

cout<}

}

}

【解析】本题利用3层循环,对3位数字是否相同进行判断。如果3位数不同,并且百位不为0,那么依次输出这3 位数,即由3位数组成的数字。

综合应用题

使用VC++6.0打开考生文件夹下的源程序文件3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。

(1)基类People完成打印功能,定义其中的打印函数为

虚函数,请在注释1后添加适当的语句。

(2)Boy继承于People,在构造函数中设置性别为1

请在注释2后添加适当的语句。

(3)Girl继承于People,在构造函数中设置性别为0,请在注释3后添加适当的语句。

(4)实现函数fun,用于传递不同的类型,打印出性别,请在注释4后添加适当的语句。

输出的内容如下:

Sex=Boy

Sex=Girl

注意:除在指定位暨添加语句之外,请不要改动程序中的其他内容。

试题程序:

#include

classPeople

{

public

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

voidprint(){}

intsex;

};

classBoypublicPeople

{

publiC

Boy()

{

//********2********}

voidprint()

{

cout<<"Boy"<}

};

classGirlpublicPeople

{

public

Girl()

{

//********3********}

voidprint()

{

cout<<"Girl"<}

};

//********4********{

cout<<"Sex=";

p.print();

}

intmain()

{

Boym

fun(m);

Girln

fun(n);

return0;

}

参考答案:

(1)将“voidprint(){};”补充完整为“virtualvoidprint(){};”。

(2)应添加“sex=1;”。

(3)应添加“sex=0;”。

(4)应添加“voidfun(People&p)”。

【解析】第1处要求“基类People完成打印功能,定义其中的打印函数为虚函数”。虚函数是函数的一种,定义虚函数,在函数名前声明virtual就可以了,所以将第1处的“voidprint(){}”语句修改为“virtualvoidprint(){}”。第2处要求“类Boy继承于People,在构造函数中设置性别为l”。基类People中变量sex用来存放性别,Boy继承People,所以Boy中性别的变量可以使用基类中的sex变量,设置性别为1,即“sex=1;”。第3处要求“类Girl继承于People,在构造函数中设置性别为0”。在第3处添加语句“sex=0;”。第4处要求“实现函数fun,用于传递不同的类型,打印出性别”。根据“P.print();”语句知道,fun函数的形参为指针P,由于它调用了基类People中的成员函数print,所以P的基类为People,即添加函数fun的定义为“voidfun(People&p)”。

 

 

 

 

2

程序改错题

使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为

TC1

TC2

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

试题程序:

#include

#includestructTCO

{

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

virtualvoidfun();

};

classTClpublicTCO

{

voidfun()

{

cout<<"TCl"<}

};

classTC2publicTCO

{

voidfun()

{

cout<<"TC2"<}

};

voidmain()

{

TCO"P;

TClobj1;

TC2obj2;

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

p=*obj1;

p->fun();

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

p=*obj2;

p->fun();

return;

}

参考答案:

(1)应改为“virtualvoidfun()=0;”。

(2)应改为“p=&obj1;”。

(3)应改为“p=&obj2;”。

【解析】如果在基类中不使用这个虚函数,其返回值也是没有意义的,它应该被定义为纯虚函数。所以虚函数fun应该是纯虚函数,也就是声明虚函数时初始化为0的函数。即第2处的“virtualvoidfun()=0;”。第2处的P为指针变量,将对象obj1赋值给P,实际上蹙P指向对象obj1的地址,所以将“p=*obj1;”修改为“P=&obj1;”。第3处的“P=*obj2;”修改为“p=&obj2;”。

简单应用题

使用VC++6.0打开考生交件夹下的源程序文件2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intN[4])的功能是用4个数字,组成互不相同且无重复数字的3位数,并将满足所有条件的数字输出到屏幕,

并且每输出一个3位数就换一行。

程序分析:可填在百位、十位、个位的数字都是1230。组成所有的排列后再去掉不满足条件的排列。如果判定第一个数字是0,则也去掉。

试题程序:

#include

voidfun(intN[4])

{

}

intmain()

intN[4]={1230};

fun(N)

return0;

}

参考答案:

intijk;

for(i=0;i<4;i++)//百位循环

{

for(j=0;j<4;j++)//十位循环

for(k=0;k<4;k++)//个位循环

{

if(i!=j&&j!=k&&k!=i&&N[i]!=0)//

当三位数不同,并且百位不为0

{

cout<}

}

}

【解析】本题利用3层循环,对3位数字是否相同进行判断。如果3位数不同,并且百位不为0,那么依次输出这3 位数,即由3位数组成的数字。

综合应用题

使用VC++6.0打开考生文件夹下的源程序文件3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。

(1)基类People完成打印功能,定义其中的打印函数为

虚函数,请在注释1后添加适当的语句。

(2)Boy继承于People,在构造函数中设置性别为1

请在注释2后添加适当的语句。

(3)Girl继承于People,在构造函数中设置性别为0,请在注释3后添加适当的语句。

(4)实现函数fun,用于传递不同的类型,打印出性别,请在注释4后添加适当的语句。

输出的内容如下:

Sex=Boy

Sex=Girl

注意:除在指定位暨添加语句之外,请不要改动程序中的其他内容。

试题程序:

#include

classPeople

{

public

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

voidprint(){}

intsex;

};

classBoypublicPeople

{

publiC

Boy()

{

//********2********}

voidprint()

{

cout<<"Boy"<}

};

classGirlpublicPeople

{

public

Girl()

{

//********3********}

voidprint()

{

cout<<"Girl"<}

};

//********4********{

cout<<"Sex=";

p.print();

}

intmain()

{

Boym

fun(m);

Girln

fun(n);

return0;

}

参考答案:

(1)将“voidprint(){};”补充完整为“virtualvoidprint(){};”。

(2)应添加“sex=1;”。

(3)应添加“sex=0;”。

(4)应添加“voidfun(People&p)”。

【解析】第1处要求“基类People完成打印功能,定义其中的打印函数为虚函数”。虚函数是函数的一种,定义虚函数,在函数名前声明virtual就可以了,所以将第1处的“voidprint(){}”语句修改为“virtualvoidprint(){}”。第2处要求“类Boy继承于People,在构造函数中设置性别为l”。基类People中变量sex用来存放性别,Boy继承People,所以Boy中性别的变量可以使用基类中的sex变量,设置性别为1,即“sex=1;”。第3处要求“类Girl继承于People,在构造函数中设置性别为0”。在第3处添加语句“sex=0;”。第4处要求“实现函数fun,用于传递不同的类型,打印出性别”。根据“P.print();”语句知道,fun函数的形参为指针P,由于它调用了基类People中的成员函数print,所以P的基类为People,即添加函数fun的定义为“voidfun(People&p)”。

 

 

 

3

1[单选题] 下面叙述中错误的是()

A.软件测试的目的是发现错误并改正错误

B.对被调试的程序进行“错误定位”是程序调试的必要步骤

C.程序调试通常也称为Debug

D.软件测试应严格执行测试计划,排除测试的随意性

参考答案:A

参考解析:软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错误,所以选项A错误。程序调试的基本步骤有:错误定位、修改设计和代码,以排除错误、进行回归测试,防止引进新的错误。程序调试通常称为Debug,即排错。软件测试的基本准则有:所有测试都应追溯到需求、严格执行测试计划,排除测试的随意性、充分注意测试中的群集现象、程序员应避免检查自己的程序、穷举测试不可能、妥善保存测试计划等文件。

2[单选题] 以下关于结构化程序设计的叙述中正确的是()

A.结构化程序使用goto语句会很便捷

B.C语言中,程序的模块化是利用函数实现的

C.一个结构化程序必须同时由顺序、分支、循环三种结构组成

D)由三种基本结构构成的程序只能解决小规模的问题

参考答案:B

参考解析:滥用goto语句将使程序的流程毫无规律,可读性差,对于初学者来说尽量不要使用,所以A错误。一个结构化程序可以包含顺序、分支、循环结构中的一种或多种,所以C错误。由三种基本结构构成的程序可以解决任何复杂的问题,所以D错误。

3[单选题] 算法的空间复杂度是指()

A.算法在执行过程中所需要的计算机存储空间

B.算法所处理的数据量

C.算法程序中的语句或指令条数

D.算法在执行过程中所需要的临时工作单元数

参考答案:A

参考解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择A

4[单选题] 若变量x,y已正确定义并赋值,以下符合C语言语法的表达式是()

A.x+1=y

B.++xy=x- -

C.x=z+10=z+y

D.double(x)/10

参考答案:B

参考解析:A选项中不能将变量Y赋给表达式,C选项中错误与A选项一样,D选项中强制类型转换表达式应写成(double)x/10

5[单选题] 数据库应用系统中的核心问题是()

A.数据库设计

B.数据库系统设计

C.数据库维护

D.数据库管理员培训

参考答案:A

参考解析:数据库应用系统中的核心问题是数据库的设计。

6[单选题] 下列叙述中正确的是()

A.switch语句中,不一定使用break语句

B.switch语句中必须使用default

C.break语句必须与switch语句中的case配对使用

D.break语句只能用于switch语句

参考答案:A

参考解析:default语句在switch语句中可以省略,所以B错误;switch语句中并非每个case后都需要使用break语句,所以C错误;break语句还可以用于for等循环结构中,所以D错误。

7[单选题] 对于一个正常运行的C程序,以下叙述中正确的是()

A.程序的执行总是从main函数开始,在程序的最后一个函数中结束

B.程序的执行总是从程序的第一个函数开始,在main函数结束

C.程序的执行总是从main函数开始

D.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束

参考答案:C

参考解析:任何一个c程序都是从主函数main开始,至主函数main结束,所以选择c选项。

8[单选题] 以下定义数组的语句中错误的是()

A.int num[][3]={{12}3456};

B.int num[2][4]={{12}{34}{56}};

C.int num[]={123456};

D.int hum[][4]={123456};

参考答案:B

参考解析:B)选项中定义的数组为24列,而赋值时赋成了3行所以出错。

9[单选题] 以下关于typedef的叙述错误的是()

A.typedef可以增加新类型

B.typedef只是将已存在的类型用一个新的名字来代替

C.typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名

D.typedef为类型说明一个新名,通常可以增加程序的可读性

参考答案:A

参考解析:typedef并不是增加了新类型,而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强程序的可移植性。所以A选项错误。

10[单选题] E-R图中,用来表示实体联系的图形是()

A.椭圆形

B.矩形

C.菱形

D.三角形

参考答案:C

参考解析:在E-R图中实体集用矩形,属性用椭圆,联系用菱形。

 

 

 

4

1[单选题] 以下叙述中正确的是

A.两个字符串可以用关系运算符进行大小比较

B.函数调用strlen(s);会返回字符串S实际占用内存的大小(以字节为单位)

C.C语言本身没有提供对字符串进行整体操作的运算符

D.当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和

参考答案:C

参考解析:本题考查字符串处理函数strienstrcatstrcmpB选项中strlen返回的是字符串s实际占用内存大小加上结尾符,A选项中不能用关系运算符进行大小比较,可以使用strcmpD选项当使用连接函数strcat时,内存空间会减少一个字符位置。

2[单选题] 一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是( )

A.一对一B.一对多C.多对多D.多对一

参考答案:C

参考解析:因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。

3[单选题] 对于while(!E)s;,若要执行循环体s,则E的取值应为:

A.E等于1B.E不等于0C.E不等于1D.E等于0

参考答案:D

参考解析:while语句的一般形式为:while(表达式)语句;其中表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(0)时,执行循环体语句。该题中如要执行语句s,则!E应为真,因此E应等于0D选项正确。

4[单选题] 在软件设计中不使用的工具是( )

A.系统结构图B.PADC.数据流图(DFD)D.程序流程图

参考答案:C

参考解析:系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,是在概要设计阶段用到的。PAD图是在详细设计阶段用到的。程序流程图是对程序流程的图形表示,在详细设计过程中用到。数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是在可行性研究阶段用到的而非软件设计时用到,所以选择C

5[单选题] 若有定义语句:char a='\82';则变量a()

A.说明不合法B.包含1个字符C.包含2个字符D.包含3个字符

参考答案:B

参考解析:char a='\82',定义字符量achar型变量值为1个字节长度,并从右侧开始运算,所以a的值应为'2'。因此B选项正确。

6[单选题] fp已定义为指向某文件的指针,且没有读到该文件的末尾,则C语言函数feof(fp)的函数返回值是

A.EOFB.0C.-1D.0

参考答案:D

参考解析:本题考查文件的定位,feof函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符)eof函数值为非零值,否则为0,所以选项D正确。

7[单选题] 以下叙述中正确的是

A.只要适当地修改代码,就可以将do-whilewhile相互转换

B.对于“for(表达式1;表达式2;表达式3)循环体”首先要计算表达式2的值,以便决定是否开始循环

C.对于“for(表达式1;表达式2;表达式3)循环体”,只在个别情况下才能转换成while语句

D.如果根据算法需要使用无限循环(即通常所称的“死循环”),则只能使用while语句

参考答案:A

参考解析:B选项中,for语句中需要先求解先求解表达式1;C选项中,for语句使用最为灵活,它完全可以取代while语句;D选项中,对于死循环,也可以使用for语句。因此A选项正确。

8[单选题]若有以下说明语句:

struct date

{ int year;

int month;

int day;

}brithday;

则下面的叙述不正确的是__C___.

A struct是声明结构体类型时用的关键字

B struct date 是用户定义的结构体类型名

C brithday是用户定义的结构体类型名

Dyear,day 都是结构体成员名

9[单选题]以下对结构变量stul中成员age的非法引用是 B

struct student

{ int age;

int num;

}stu1,*p;

p=&stu1;

A stu1.age

B student.age

C p->age

D(*p).age

10[单选题]设有如下定义:

struck sk

{ int a;

float b;

}data;

int *p;

若要使P指向data中的a域,正确的赋值语句是 C

A p=&a;

B p=datAa;

Cp=&datAa;

D*p=datAa;

11[单选题]设有以下说明语句:

typedef struct stu

{ int a;

float b;

} stutype;

则下面叙述中错误的是( D )

Astruct是结构类型的关键字

Bstruct stu是用户定义的结构类型

Cab都是结构成员名

Dstutype是用户定义的结构体变量名

12[单选题]语句int *p;说明了 C

Ap是指向一维数组的指针

Bp是指向函数的指针,该函数返回一int型数据

Cp是指向int型数据的指针

Dp是函数名,该函数返回一指向int型数据的指针

 

 

 

 

5

1、软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()

A.编译程序

B.操作系统

C.教务管理系统

D.汇编程序

参考答案:C

参考解析: 编译软件、操作系统、汇编程序都属于系统软件,只有C教务管理系统才是应用软件。

2、设有定义:

int a=1b=2e=3;

以下语句中执行效果与其他三个不同的是()

A.if(a>b) c=aa=bb=c;

B.if(a>b) {e=aa=bb=e;}

C.if(a>b)e=a;a=b;b=C;

D.if(a>b) {c-7-a;a=b;b=e;}

参考答案:C

参考解析: 由于a小于b,所以所有选项中的条件都为假,c选项中实际执行了a=b;b=c;两个操作。而ABD选项由于条件不成立.所以什么也没有做,所以选择C选项。

3、若有以下定义:

则对x数组元素的正确引用是()

A.pt+3

B.*&x[10]

C.*(pt+10)

D.*(x+3)

参考答案:D

参考解析: 没有A选项的引用形式。*&放在一起作用抵消,所以B选项错误,最大只能引用到x[9]*(pt+i)表示引用指针pt所指元素后的第i个元素,所以c选项错误,最大只能为*(pt+9)。因此D选项正确。

4、若有定义语句:double a* P=&a;以下叙述中错误的是()

A.定义语句中的*号是一个间址运算符

B.定义语句中的*号是一个说明符

C.定义语句中的P只能存放double类型变量的地址

D.定义语句中,*P=&a把变量a的地址作为初值赋给指针变量P

参考答案:A

参考解析: 在变量定义double a* P=&a;中,*号是一个指针运算符,而非间址运算符,所以A错误。

5、若有定义语句:int x=10;,则表达式x-=x+x的值为()

A.0

B.-20

C.-10

D.10

参考答案:C

参考解析: 算术运算符+的优先级高于-=,且-=的结合方向为自右向左,所以表达式x-=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,选择C

6、下列排序方法中,最坏情况下比较次数最少的是()

A.冒泡排序

B.简单选择排序

C.直接插入排序

D.堆排序

参考答案:D

参考解析: 冒泡排序与筒单插入排序与简单选择排序法在最坏情况下均需要比较n(n-1)/2次,而堆排序在最坏情况下需要比较的次数是nlog2n

7、以下叙述中错误的是()

A.使用三种基本结构构成的程序只能解决简单问题

B.结构化程序由顺序、分支、循环三种基本结构组成

C.C语言是一种结构化程序设计语言

D.结构化程序设计提倡模块化的设计方法

参考答案:A

参考解析: 使用顺序,选择(分支),循环三种基本结构构成的程序可以解决所有问题,而不只是解决简单问题,所以A错误。

8、以下不构成无限循环的语句或语句组是()

A.n=0

do{++n;}while(n<=0);

B.n=0;

while(1){n++;}

C.n=10;

while(n);{n--;}

D.for(n=0i=1;;i++)n+=i;

参考答案:A

参考解析: 选项Ado后面的语句只执行了一次便结束了循环;B选项中条件while(1)永远成立,所以是死循环;C选项中n的值为10,而循环体为空语句,所以wilile(n)永远为真,进入死循环;D选项中for语句第二个表达式为空,所以没有判别条件,进入死循环。

9、若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是()

A.1

B.0

C.2

D.不知道a的值,不能确定

参考答案:A

参考解析: 逻辑或”||”要求只要两边的运算对象有一个非零,结果就为真。虽然不知道a的值,但是若al,则左边运算对象为1;a的值不是1,则右边运算对象的值为1,所以总能保证一边非零,所以结果为真,即1

10、支持子程序调用的数据结构是()

A.

B.

C.队列

D.二叉树

参考答案:A

参考解析: 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A




考无忧小编tips

有时候经历越多越会明白,在这个世界上,总有几样东西是别人拿不走的。比如,你读过的书、看过的风景、复习过的二级C语言试题,更包括你那些曾经被嘲笑过的梦想。







文章推荐:

重磅!2021年全国计算机等级考试时间安排已出!

全国计算机等级考试大纲(2021年版)

全国计算机等级考试教材目录(2021年版)

二级MS Office高级应用与设计考试大纲(2021年版)

【计算机等级考试】二级MS Office2021年考点变化 



温馨提示:

考试想拿高分吗?更多计算机等级考试题库二级ms office试题请点击查看>>>二级ms office

想要了解更多的计算机等级考试题库请点击下载>>>计算机等级考试题库

想知道更多关于计算机等级考试题库的近期资讯吗?点击进入>>>计算机等级考试题库资讯






本文网址:http://www.k51.com.cn/info/jsjdjks/1907/2654774.html
选择分享到: