有些二级C语言试题你需要去做,做了才知道自己行不行,光在那里想是没用的。
二级C语言试题
【1】
程序改错题
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为
TC1
TC2
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。
试题程序:
#include
#include structTCO
{
//********error********
virtualvoidfun();
};
classTCl:publicTCO
{
voidfun()
{
cout<<"TCl"< }
};
classTC2:publicTCO
{
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位数就换一行。
程序分析:可填在百位、十位、个位的数字都是1、2、3、0。组成所有的排列后再去掉不满足条件的排列。如果判定第一个数字是0,则也去掉。
试题程序:
#include
voidfun(intN[4])
{
}
intmain()
intN[4]={1,2,3,0};
fun(N):
return0;
}
参考答案:
inti,j,k;
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;
};
classBoy:publicPeople
{
publiC:
Boy()
{
//********2********}
voidprint()
{
cout<<"Boy"< }
};
classGirl:publicPeople
{
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】
选择题
1.数据的存储结构是指( )。
A.数据所占的存储空间
B.数据的逻辑结构在计算机中的存放形式
C.数据在计算机中的顺序存储方式
D.存储在计算机外存中的数据
2.将E-R图转换到关系模式时,实体与实体间的联系可以表示成( )。
A.属性
B.关系
C.键
D.域
3.对长度为n的线性表进行顺序查找,在最坏情况下需要比较的次数为( )。
A.125
B.n/Z
C.n
D.n+1
4.树是结点的集合,它的根结点的数目是( )。
A.有且只有1个
B.1或多于1
C.0或1
D.至少有2个
5.设R是一个二元关系,S是一个三元关系,则下列运算中正确的是( )。
A.R-S
B.R×S
C.R∩S
D.R∪S
6.关于结构化程序设计原则和方法的描述错误的是( )。
A.选用的结构只允许有一个入口和一个出口
B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现
C.不允许使用GOTO语句
D.语言中所没有的控制结构,应该采用前后一致的方法来模拟
7.对关系S和R进行集合运算,结果中既包含S中的所有元组也包含R中的所有元组,这样的集合运算称为( )。
A.并运算
B.交运算
C.差运算
D.积运算
8.下列叙述中正确的是( )。
A.在面向对象的程序设计中,各个对象之间具有密切的关系
B.在面向对象的程序设计中,各个对象都是公用的
C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小
D.上述三种说法都不对
9.结构化程序设计的三种基本结构是( )。
A.过程、子程序和分程序
B.顺序、选择和重复
C.递归、堆栈和队列
D.调用、返回和转移
10.在数据库设计中,将E-R图转换为关系模式的过程属于( )。
A.需求分析阶段
B.逻辑设计阶段
C.概念设计阶段
D.物理设计阶段
1.B。【解析】数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式。数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。
2.B。【解析】将E-R图转换成指定RDBMS中的关系模式是数据库逻辑设计的主要工作。从E—R图到关系模式的转换是比较直接的,实体和联系都可以表示成关系。
3.C。【解析】对线性表进行顺序查找时,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查找到所要找的元素为止。在最坏情况下,要查找的元素是表的最后一个元素或查找失败,这两种情况都需要将这个元素与表中的所有元素进行比较,因此比较次数为n。
4.C。【解析】树具有明显的层次关系,即树是一种层次结构。在树结构中,根结点在第一层上。当树为非空时,树中有且只有一个根结点,当树为空时,树中根结点的数目为0。
5.B。【解析】关系的交(∩)、并(∪)和差(-)运算要求两个关系是同元的,显然作为二元的R和三元的S只能做笛卡儿积运算。
6.C。【解析】限制使用GOTO语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用GOTO语句。其他三项为结构化程序设计的原则。
7.A。【解析】关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。
8.C。【解析】面向对象的程序设计是用对象模拟问题领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互联系。
9.B。【解析】程序的三种基本控制结构包括顺序、选择和重复(循环),这三种结构足以表达出各种其他形式的结构。
10.B。【解析】数据库设计阶段主要包括需求分析、概念设计、逻辑设计和物理设计。其中逻辑设计的主要工作是将E-R图转换为关系模式。
【3】
1.在C++语言中函数返回值的类型是由( )决定的。
A.调用该函数时系统临时
B.return语句中的表达式类型
C.定义该函数时所指定的函数类型
D.调用该函数时的主调函数类型
2.下列描述正确的是( )。
A.表示m>n为true或mn&&m B.switch语句结构中必须有default语句
C.if语句结构中必须有else语句
D.如果至少有一个操作数为true,则包含‖运算符的表达式为true
3.使用ifstream流类定义流对象并打开磁盘文件时,文件的隐含打开方式为( )。
A.ios::in
B.ios::out
C.ios::inlios::out
D.没有默认
4.下列各类函数中,不是类的成员函数的是( )。
A.构造函数
B.抽象类
C.派生类
D.以上都不对
5.下面关于数组的初始化正确的是( )。
A.charstr[]={’a’,’b’,’e’}
B.charstr[2]={’a’,’b’,’e’)
C.charstr[2][3]={{’a’,’b’},{’C’,’d’},{’e’,’f’}}
D.charstr()={’a’,’b’,’C’}
6.类模板templateclassX{…},其中友元函数f对特定类型T(如int),使函数f(x)成为x模板类的友元,则其说明为( )。
A.friendvoidf();
B.friendvoidf(x);
C.friendvoidA::f();
D.friendvoidC::f(x);
7.类MyClass的定义如下:
classMyClass
{
public:
MyClass(){value=0;}
SetVariable(inti){valtic=i;}
private:
intvalue;
};
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)等价
8.下面关于break语句的描述中,不正确的是( )。
A.break可以用于循环体内
B.break语句可以在for循环语句中出现多次
C.break语句可以在switch语句中出现多次
D.break语句可用于if条件判断语句内
9.如果表达式-x/y中的“--”和“/”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为( )。
A.operator/(x.operator--(),y);
B.operator/(operator--(x),y);
C.X.operator--().operator/(y);
D.y.operator/(operator--(x));
10.已知类A有公用数据成员a,并重载了=运算符,且有Aobj2;constA*ptr=newA;,则下列语句错误的是( )。
A.ptr->a=100;
B.ptr=&obj2;
C.ptr++;
D.obj2=*ptr;
1.C。【解析】函数类型决定了函数返回值的类型。函数值返回类型可以由编译器自动完成类型转换。在函数有返回值的调用中,编译器将return后面的表达式的类型强制转换为该函数定义时指定的返回值类型。
2.D。【解析】本题主要考查C++语言的基本语法,选项A中应该为m>n‖m
3.D。【解析】使用ifstream流类定义流对象并打开磁盘文件时,文件没有默认的打开方式。其中ios::in是为输入而打开;iso::out是为输出而打开。
4.C。【解析】构造函数包括默认构造函数和拷贝构造函数等,析构函数和构造函数一样属于类的特殊的成员函数。而友元函数则是为了增加类的访问灵活性而允许其他类的成员函数或全局函数访问类的内部变量或成员函数的一种机制,其缺点是破坏了类的封装性。
5.A。【解析】本题考查的是字符数组的初始化。选项B中用三个元素初始化大小为2的数组,越界了;选项C中应该是2行3列的数组,题中使用3行2列初始化;选项D中数组应用方括号。
6.B。【解析】声明一个函数模板的格式template<模板形参表声明>函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。
7.D。【解析】语句p=&my;是把对象my的地址值赋给指针变量P。语句MyClass*P,my;,由于P只是一个指向对象的指针,因此定义指针P不调用构造函数,所以此语句只调用一次构造函数。对成员函数的引用可以通过两种形式:指针->成员函数(形参表)或者对象名.成员函数名(形参表)。
8.D。【解析】本题考查break语句的使用。break可以结束switch语句和for循环语旬,但是不能使用在条件判断语句内。
9.B。【解析】本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且c1、c2都是该类的对象,则c1.operator+(c2)与c1+c2含义相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与c1+c2含义相同。同理,运算符“/”作为友元函数重载,则(--x)/y与表达式operator/((…x),y)相同。前缀运算符“--”作为友元函数重载,则--x与operator--(x)相同,所以组合起来是operator/(operator--(x),y);,即B选项。
10.A。【解析】本题考查const修饰符的作用。注意,const位置不同,其修饰的部分也是不同的。本题中const修饰的是ptr所指的对象本身,所以,ptr可以重新指向新的对象,而ptr->a则无法被更新。
【4】
1.(A )是构成C语言程序的基本单位。
A、函数
B、过程
C、子程序
D、子例程
2.C语言程序从 ( C ) 开始执行。
A、 程序中第一条可执行语句
B、 程序中第一个函数
C、 程序中的main函数
D、包含文件中的第一个函数
3、以下说法中正确的是( C )。
A、C语言程序总是从第一个定义的函数开始执行
B、在C语言程序中,要调用的函数必须在main( )函数中定义
C、C语言程序总是从main( )函数开始执行
D、C语言程序中的main( )函数必须放在程序的开始部分
4.下列关于C语言的说法错误的是( B ) 。
A、 C程序的工作过程是编辑、编译、连接、运行
B、 C语言不区分大小写。
C、 C程序的三种基本结构是顺序、选择、循环
D、C程序从main函数开始执行
5.下列正确的标识符是(C )。
A、-a1
B、a[i]
C、a2_i
D、int t
6.下列C语言用户标识符中合法的是(B )。
A、3ax
B、x
C、case
D、-e2 E)union
7.下列四组选项中,正确的C语言标识符是( C )。
A、 %x
B、a+b
C、a123
D、123
8、下列四组字符串中都可以用作C语言程序中的标识符的是( A)。
A、print _3d db8 aBc
B、I\am one_half start$it 3pai
C、str_1 Cpp pow while
D、Pxq My->book line# His.age
9.C语言中的简单数据类型包括(D )。
A、整型、实型、逻辑型
B、整型、实型、逻辑型、字符型
C、整型、字符型、逻辑型
D、整型、实型、字符型
10.在C语言程序中,表达式5%2的结果是 ( C ) 。
A、2.5
B、2
C、1
D、3
【5】
1.C语言中,关系表达式和逻辑表达式的值是( B ) 。
A、0
B、 0或1
C、 1
D、‘T’或’F’
2. 下面( D )表达式的值为4.
A、 11/3
B、 1.0/3
C、 (float)11/3
D、 (int)(1.0/3+0.5)
3.设整型变量 a=2,则执行下列语句后,浮点型变量b的值不为0.5的是( B )
A、b=1.0/a
B、b=(float)(1/A、
C、b=1/(float)a
D、b=1/(a*1.0)
4. 若“int n; float f=3.8;”,则执行“n=(int)f%3”后,n的值是(A)
A、1
B、4
C、4.333333
D、4.6
5. 以下对一维数组a的正确说明是:( D )
A、char a(10);
B、 int a[];
C、int k=5,a[k];
D、char a[3]={‘a’,’b’,’c’};
6.以下能对一维数组a进行初始化的语句是:( C )
A、int a[5]=(0,1,2,3,4,)
B、 inta(5)={}
C、 int a[3]={0,1,2}
D、 int a{5}={10*1}
7.在C语言中对一维整型数组的正确定义为( D )。
A、int a(10);
B、int n=10,a[n];
C、int n;a[n];
D、#define N 10
8.已知:int a[10]; 则对a数组元素的正确引用是( D )。
A、a[10]
B、a[3.5]
C、a(5)
D、a[0]
9.若有以下数组说明,则i=10;a[a[i]]元素数值是(C )。
int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};
A、10
B、9
C、6
D、5
10.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( B )
A、2
B、3
C、4
D、无确定值
考无忧小编tips:
喜欢跑步的人很多,但天天跑步的人不多;拥有梦想的人很多,但坚持一个梦想的人不多;喜欢学习的人很多,但天天学习的人不多。现实生活中,每个人的思想都很丰富,但是能够持之以恒地坚持做一件事情的人并不多。所以,有人成功,有人失败,有人笑,有人哭,关键看你是否能坚持下去,是否能坚持复习以上的二级C语言试题。
文章推荐:
2019年全国计算机等级考试题库“二级MS Office 高级应用考试大纲”
全国计算机等级考试报考成功后可以退费吗?(内附计算机等级考试题库)
温馨提示:
考试想拿高分吗?更多计算机等级考试题库二级ms office试题请点击查看>>>二级ms office
想要了解更多的计算机等级考试题库请点击下载>>>计算机等级考试题库
想知道更多关于计算机等级考试题库的近期资讯吗?点击进入>>>计算机等级考试题库资讯