1、二级 C+模拟 497及答案解析(总分:156.50,做题时间:90 分钟)一、选择题(总题数:40,分数:68.50)1.下列语句都是程序运行时的第 1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是_。(分数:1.00)A.coutintemal12345;B.coutleft12345;C.coutright12345;D.coutsetw(6)12345;2.有下列程序: #includestdio.h void main() FILE *pf; char *s1=“China“,*s2=“Beijing“; pf=fopen(“abc.dat“,“wb+“); fwri
2、te(s2,7,1,pf); rewind(pf); /*文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf); 以上程序执行后 abc.dat文件的内容是 _ 。(分数:2.00)A.ChinaB.ChinangC.ChinaBeij ingD.BeijingChina3.能正确表示逻辑关系:“a10 或 a0”的 C语言表达式是(分数:2.00)A.a10 or a0B.a0 | a10C.a10 B.x=+y;C.(x+y)+;D.+x=y;5.线性表 L=(a1,a2,a3,ai,an),下列说法正确的是(分数:1.00)A.每个元素都有一个直接前件
3、和直接后件B.线性表中至少要有一个元素C.表中诸元素的排列顺序必须是由小到大或由大到小D.除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件6.有如下程序: #includeiostream using namespace std; class test private: int a; public: test0cout+“constructor“+endl; test(int a)cout+a+endl;) test(const test cout+,copy constructor“+endl; test()Cout+“destructor“+endl; ; i
4、nt main() test A(3); return 0; 运行时输出的结果是_。(分数:2.00)A.3B.constructordestructorC.copy constructordestructorD.3destructor7.设有变量说明“char s=“Program“,*p=s;”,则以下叙述正确的是_。(分数:2.00)A.数组 s的长度与 strlen(p)+1的值相同B.p5的值等于 s5的值C.sizeof(s)等于 sizeof(p)D.sizeof(s)等于 sizeof(*p)8.下列不属于 C+预定义的流对象的是(分数:2.50)A.cfileB.cinC.c
5、outD.clog9.有如下程序: #includeiostream using namespace std; class Base public: virtual void function1()cout“0“; void function2()cout“1“; ; class Derived:public Base public: void function1()cout“2“; void function2()cout“3“; ; int main() Base*p=new Derived(); p-function1(); p-function2(); return 0; 运行时的输出
6、结果是_。(分数:2.50)A.01B.21C.03D.2310.在下列模式中,能够给出数据库物理存储结构与物理存取方法的是_。(分数:2.50)A.外模式B.内模式C.概念模式D.逻辑模式11.在 C+中既可以用于文件输入又可以用于文件输出的流类是_。(分数:2.50)A.fstreamB.ifstreamC.ofstreamD.iostream12.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是_。(分数:2.50)A.不合法的运算符B.一元运算符C.无操作数的运算符D.二元运算符13.下列程序的执行结果是_。 #include class Sampleint x,y;pub
7、lic:Sample()x=y=0;Sample(int a,int b)x=a;y=b;Sample()if(x=y)cout“x=y“endl;elsecout“x!=y“endl;void disp()cout“x=“x“,y=“yendl;void main()Sample s1(2,3);s1.disp(); A.x=2,y=2 B.x=3,y=3 C.x=2,y=3 D.x=3,y=2A B C D C解析 本题考查类的构造函数和析构函数。首先,Samples1(2,3);会调用含有两个参数的构造函数Sample(int a,int b)x=a;y=b;,disp()函数输出成员变
8、量 x和 y的值 x=2,y=3;然后结束时调用析构函数,因为 x和 y值不等,故输出 x!=y。(分数:1.00)A.x=2,y=2B.x=3,y=3C.x=2,y=3D.x=3,y=214.下列关于类模板的模板参数的叙述中,错误的是_。(分数:1.00)A.模板参数可以作为数据成员的类型B.模板参数可以作为成员函数的返回类型C.模板参数可以作为成员函数的参数类型D.模板参数不能作为成员函数的局部变量的类型15.下列关于类定义的说法中,正确的是_。(分数:2.00)A.类定义中包括数据成员和函数成员的声明B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进
9、行定义16.下列程序段中的变量已正确定义: for(i=0;i1;i+,i+) for(k=1;k3;k+);printf(“*“); 程序段的输出结果是_。(分数:2.50)A.*B.*C.*D.*17.在函数中,可以用 auto、extern、register 和 static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是_。(分数:1.00)A.autoB.externC.registerD.static18.语句序列“char*p=“teacher“; p+=2; coutp+2“/t“*(p+2);”的输出结果是_。(分数:2.00)A.acher
10、aB.cher cC.her hD.h her19.下列是软件调试技术的是_。(分数:1.00)A.错误推断B.集成测试C.回溯法D.边界值分析20.有如下程序: #include iostream using namespace std: class Test public: Test() n+=2; Test() n-=3; ; static int getNum() return n; privaue: static int n: ; int Test:n=1; int main() Test* p=new Test; delete p; cout“n=“Test:getNum()end
11、1; return 0; 执行后的输出结果是(分数:2.00)A.n=0B.n=1C.n=2D.n=321.下面不属于需求分析阶段工作的是_。(分数:1.00)A.需求获取B.可行性研究C.需求分析D.撰写软件需求规格说明书22.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为 _ 。(分数:2.00)A.publicB.protectedC.privateD.static23.算法的有穷性是指_。(分数:1.00)A.算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用24.数据库设计中反映用户
12、对数据要求的模式是_。(分数:2.50)A.内模式B.概念模式C.外模式D.设计模式25.以下不能正确定义二维数组的选项是 _ 。(分数:2.00)A.int a22=1,2;B.int a2=1,2,3,4);C.int a22=1,2,3;D.int a2=1,2,3,4;26.有以下程序: #includeiostream using namespace std; class R public: R(int r1,int r2) R1=r1; R2=r2; void print(); void print()corist; private: int R1,R2; ; void R:pri
13、nt() void R:print()coiist int main() R a(5,4); const R b(20,52); b.print(); return 0; 执行后的输出结果是_。(分数:1.00)A.5,4B.20,52C.0,0D.4,527.设有一个已按各元素的值排好序的线性表(长度大于 2),对给定的值 k,分别用顺序查找法和二分查找法查找一个与 k相等的元素,比较的次数分别是 s和 b,在查找不成功的情况下,s 和 b的关系是_。(分数:2.50)A.s=bB.sbC.sbD.sb28.对于循环队列,下列叙述中正确的是_。(分数:1.00)A.队头指针是固定不变的B.队
14、头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针29.有下列程序: #includeiostream Using namespace std; Class Amount int amount; public; Amount(int n=O):amount(n) Int getAmount()constreturn amount; Amount return ; int main() Amount x(3),y(7); x+=y; coutx.getAmount()endl; return 0; 己知程序的运行结果是 10,则横线处缺失的表达式是
15、 _ 。(分数:2.00)A.*thisB.thisC. break: case“/“:*Z=X/y;break; 以下合法的函数调用语句是 _ 。(分数:1.00)A.sub(10,20,Ch,y);B.sub(1.2+3,2*2,“+“,”,则表达式 i/j的结果是_。(分数:1.00)A.0B.0.7C.0.66667D.0.6666666739.在数据结构中,从逻辑上可以把数据结构分成 _ 。(分数:2.00)A.动态结构和静态结构B.线性结构和非线性结构C.集合结构和非集合结构D.树状结构和图状结构40.数据库设计中反映用户对数据要求的模式是_。(分数:1.00)A.内模式B.概念模
16、式C.外模式D.设计模式二、基本操作题(总题数:1,分数:40.00)41.请使用 VC6或使用【答题】菜单打开 proj1 下的工程 proj1,其中有枚举 DOGCOLOR、狗类 Dog和主函数 main的定义。程序中位于每个“/ ERROR *found*”下的语句行有错误,请加以改正。改正后程序的输出结果应该是: There is a white dog named Hoho. There is a black dog named Haha. There is a motley dog named Hihi. 注意:只修改每个“/ ERROR *found*”下的那一行,不要改动程序中
17、的其他内容。 #include iostream using namespace std; /狗的颜色:黑、白、黄、褐、花、其他 enum DOGCOLOR BLACK, WHITE, YELLOW, BROWN, PIEBALD, OTHER; class Dog /狗类 DOGCOLOR color; char name20; static int count; public: Dog (char name, DOGCOLOR color) strcpy(this-name,name); / ERROR *found* strcpy (this - color, color); DOGCO
18、LOR getColor() const return color; / ERROR *found* const char * getName() const return * name; const char * getColorString() const switch(color) case BLACK: return “black“; case WHITE: return “white“; case YELLOW: return “yellow“; case BROWN: return “brown“; case PIEBALD: return “piebald“; return “m
19、otley“; void show() const cout “There is a“ getColorString() “dog named“ name “.“ endl; ; int main() / ERROR *found* Dog dog1(“Hoho“, WHITE), dog2(“Haha“, BLACK); dog3(“Hihi“, OTHER); dog1.show(); dog2.show(); dog3.show(); return 0; (分数:40.00)_三、简单应用题(总题数:1,分数:30.00)42.请使用 VC6或使用【答题】菜单打开 proj2 下的工程
20、proj2,此工程包含有一个源程序文件proj2.cpp,其中定义了 Stack类和 ArrayStack类。 Stack是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack 为抽象类,它只定义了栈的用户接口,如下所示: 公有成员函数 功能 push 入栈:在栈顶位置添加个元素 pop 退栈:取出并返回栈顶元素 ArrayStack是 Stack的派生类,它实现了 Stack定义的接口。ArrayStack 内部使用动态分配的字符数组作为栈元素的存储空间。数据成员 maxSize表示的是栈的最大容量,top 用于记录栈顶的位置。成员函数push和 pop分别实现具体的入栈和退栈
21、操作。 请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为: a,b,c c,b,a 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“/ *found*”。 / proj2.cpp #include iostream using namespace std; class Stack public: virtual void push(char c) = 0; virtual char pop() = 0; ; class ArrayStack : public Stack char * p; int maxSize; int t
22、op; public: ArrayStack(int s) top = 0; maxSize = s; / *found* p =_; ArrayStack() / *found* _; void push (char c) if (top = maxSize) cerr “Overflow! /n“; return; / *found* _; top +; char pop() if (top = 0) cerr “Underflow! /n“; return “/0“; top -; / *found* _; ; void f(Stack cout ch0 “,“ ch1 “,“ ch2
23、endl; sRef.push(ch0); sRef.push(ch1); sRef.push(ch2); cout sRef.pop() “,“; cout sRef.pop() “,“; cout sRef.pop() endl; int main() ArrayStack as(10); f(as); return 0; (分数:30.00)_四、综合应用题(总题数:1,分数:18.00)43.请使用 VC6或使用答题菜单打开 proj3 下的工程 proj3,其中声明的 DataList类,是一个用于表示数据表的类。sort 成员函数的功能是将当前数据表中的元素升序排列。请编写这个 s
24、ort函数。程序的正确输出应为: 排序前:7, 1, 3, 11, 6, 9, 12, 10, 8, 4, 5, 2 排序后:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 要求: 补充编制的内容写在“/*333*”与“/*666*”两行之同。不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out. dat中。输出函数 writeToFile已经编译为 obj文件,并且在本程序调用。 /DataList. h #includeiostream using namespace std; class DataList /数据表类 int len; double
25、*d; public: DataList(int len, double data=NULL); DataList() deleted; int length()const return len;/数据表长度(即数据元素的个数) double getElement(int i)const return di; void sort();/数据表排序 void show()const;/显示数据表 ; void writeToFile(char*, const DataList /main. cpp #include “DataList. h“ DataList:DataList(int len,
26、 double data): len(len) d=new doublelen; for(int i=0; ilen; i+) di=(data=NULL? 0.0: datai); void DataList:sort()/数据表排序 /*333* /*666* void DataList:show()const /显示数据表 for(int i=0; ilen-1; i+)coutdi“,“; coutdlen-1endl; int main() double s=7, 1, 3, 11, 6, 9, 12, 10, 8, 4, 5, 2; DataList list(12, s); co
27、ut“排序前:“; list. show(); list. sort(); coutendl“排序后:“; list.show(); writeToFile(“ “, list); return 0; (分数:18.00)_二级 C+模拟 497答案解析(总分:156.50,做题时间:90 分钟)一、选择题(总题数:40,分数:68.50)1.下列语句都是程序运行时的第 1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是_。(分数:1.00)A.coutintemal12345;B.coutleft12345;C.coutright12345;D.coutsetw(6)12345
28、; 解析:解析 本题考查控制输出格式,A、B、C 选项都会输出“12345”,只有 D选项输出“12345”,所以本题答案为 D。2.有下列程序: #includestdio.h void main() FILE *pf; char *s1=“China“,*s2=“Beijing“; pf=fopen(“abc.dat“,“wb+“); fwrite(s2,7,1,pf); rewind(pf); /*文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf); 以上程序执行后 abc.dat文件的内容是 _ 。(分数:2.00)A.ChinaB.Chinang
29、 C.ChinaBeij ingD.BeijingChina解析:解析 本题考查 fwrite的调用形式。 其格式为“fwrite(buffer,size,count,fp);”。 fwritie函数的功能是对 fp所指向的文件存入 count次,每次存入一个大小为 size的数据块,将存入的数据块存到 buffer指向的内存区,如果 buffer内存区有数据则将其覆盖。 本题中第一次调用 fwrite函数,向文件中写入是 S2的值“Beijing”,第二次调用 fwrite函数,向文件中写入 S1的值“China”,并将之前“。Beijing”的前几个字符覆盖,得到 Chinang。3.能正
30、确表示逻辑关系:“a10 或 a0”的 C语言表达式是(分数:2.00)A.a10 or a0B.a0 | a10C.a10 B.x=+y;C.(x+y)+; D.+x=y;解析:5.线性表 L=(a1,a2,a3,ai,an),下列说法正确的是(分数:1.00)A.每个元素都有一个直接前件和直接后件B.线性表中至少要有一个元素C.表中诸元素的排列顺序必须是由小到大或由大到小D.除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件 解析:解析 线性表可以为主表;第一个元素没有直接前件,最后一个元素没有直接后件;线性表的定义中,元素的排列并没有规定大小顺序。6.有如下程
31、序: #includeiostream using namespace std; class test private: int a; public: test0cout+“constructor“+endl; test(int a)cout+a+endl;) test(const test cout+,copy constructor“+endl; test()Cout+“destructor“+endl; ; int main() test A(3); return 0; 运行时输出的结果是_。(分数:2.00)A.3B.constructordestructorC.copy constr
32、uctordestructorD.3destructor 解析:解析 此题考查的是构造函数和析构函数。一个类可以有多个构造函数,但只能有一个析构函数。每一个对象在被创建时,都会隐含调用众多构造函数中的一个,而在销毁时又会隐含调用唯一的析构函数。此题中,主函数创建对象 A是会隐含调用 test(int a)这个构造函数,输出 3;接着主函数结束,对象 A销毁又隐含调用test()析构函数输出 destructor。7.设有变量说明“char s=“Program“,*p=s;”,则以下叙述正确的是_。(分数:2.00)A.数组 s的长度与 strlen(p)+1的值相同B.p5的值等于 s5的值
33、 C.sizeof(s)等于 sizeof(p)D.sizeof(s)等于 sizeof(*p)解析:8.下列不属于 C+预定义的流对象的是(分数:2.50)A.cfile B.cinC.coutD.clog解析:9.有如下程序: #includeiostream using namespace std; class Base public: virtual void function1()cout“0“; void function2()cout“1“; ; class Derived:public Base public: void function1()cout“2“; void fun
34、ction2()cout“3“; ; int main() Base*p=new Derived(); p-function1(); p-function2(); return 0; 运行时的输出结果是_。(分数:2.50)A.01B.21 C.03D.23解析:解析 基类的指针可以指向派生类的对象,但是反过来,派生类的指针是不允许指向基类的对象的。通过该指针也只能访问派生类中从基类继承来的公有成员,不能访问派生类中新增的成员,除非通过强制类型转换将基类的指针转换为派生类的指针。10.在下列模式中,能够给出数据库物理存储结构与物理存取方法的是_。(分数:2.50)A.外模式B.内模式 C.概念
35、模式D.逻辑模式解析:解析 内模式出了数据库物理存储结构与物理存取方法。它处于最底层,反映了数据在计算机物理结构中的实际存储形式。11.在 C+中既可以用于文件输入又可以用于文件输出的流类是_。(分数:2.50)A.fstream B.ifstreamC.ofstreamD.iostream解析:12.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是_。(分数:2.50)A.不合法的运算符B.一元运算符 C.无操作数的运算符D.二元运算符解析:解析 成员函数有隐含参数的 this指针,一般是第一个操作数,并不显式出现在参数表中。即对于单目运算符,参数表为空,对于双目运算符,参数表中
36、有一个参数。13.下列程序的执行结果是_。 #include class Sampleint x,y;public:Sample()x=y=0;Sample(int a,int b)x=a;y=b;Sample()if(x=y)cout“x=y“endl;elsecout“x!=y“endl;void disp()cout“x=“x“,y=“yendl;void main()Sample s1(2,3);s1.disp(); A.x=2,y=2 B.x=3,y=3 C.x=2,y=3 D.x=3,y=2A B C D C解析 本题考查类的构造函数和析构函数。首先,Samples1(2,3);会
37、调用含有两个参数的构造函数Sample(int a,int b)x=a;y=b;,disp()函数输出成员变量 x和 y的值 x=2,y=3;然后结束时调用析构函数,因为 x和 y值不等,故输出 x!=y。(分数:1.00)A.x=2,y=2B.x=3,y=3C.x=2,y=3 D.x=3,y=2解析:解析 本题考查类的构造函数和析构函数。首先,Samples1(2,3);会调用含有两个参数的构造函数 Sample(int a,int b)x=a;y=b;,disp()函数输出成员变量 x和 y的值 x=2,y=3;然后结束时调用析构函数,因为 x和 y值不等,故输出 x!=y。14.下列关于
38、类模板的模板参数的叙述中,错误的是_。(分数:1.00)A.模板参数可以作为数据成员的类型B.模板参数可以作为成员函数的返回类型C.模板参数可以作为成员函数的参数类型D.模板参数不能作为成员函数的局部变量的类型 解析:解析 本题考查类模板的概念和定义,模板参数可以作为成员函数的局部变量的类型。15.下列关于类定义的说法中,正确的是_。(分数:2.00)A.类定义中包括数据成员和函数成员的声明 B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义解析:解析 类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。类的成员函数可
39、以在类内定义。16.下列程序段中的变量已正确定义: for(i=0;i1;i+,i+) for(k=1;k3;k+);printf(“*“); 程序段的输出结果是_。(分数:2.50)A.*B.*C.*D.* 解析:解析 本题中第二个 for循环语句的后面有一个分号,所以两个 for循环语句的执行语句为空。当两个 for循环语句执行完后,再执行 printf语句输出一个星号。所以正确答案为选项 D。17.在函数中,可以用 auto、extern、register 和 static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是_。(分数:1.00)A.auto
40、B.externC.registerD.static解析:解析 变量的存储方法分为静态存储和动态存储两大类,包含 4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。变量如果没有说明存储类型,那么默认就是 auto。18.语句序列“char*p=“teacher“; p+=2; coutp+2“/t“*(p+2);”的输出结果是_。(分数:2.00)A.acher aB.cher cC.her h D.h her解析:19.下列是软件调试技术的是_。(分数:1.00)A.错误推断B.集成测试C.回溯法 D.边界值分析解析:解析 软件调试技术包
41、括强行排错法、回溯法和原因排除法。边界值分析、错误推断都是黑盒测试的方法。20.有如下程序: #include iostream using namespace std: class Test public: Test() n+=2; Test() n-=3; ; static int getNum() return n; privaue: static int n: ; int Test:n=1; int main() Test* p=new Test; delete p; cout“n=“Test:getNum()end1; return 0; 执行后的输出结果是(分数:2.00)A.n=
42、0 B.n=1C.n=2D.n=3解析:解析 本题考核静态数据成员与静态成员函数的定义与使用方式。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员题中变量 n是静态数据成员,对象对其操作的结果具有叠加作用,main函数中先定义了 Test的对象*p,然后又 delete p,所以对静态数据 n进行了两次操作,分别是“n+=2”和“n-=3”,n 的初始值是 1,那么 n最后的值变为 0。main 函数最后通过调用静态函数 getNum得到 n的值,并输出。21.下面不属于需求分析阶段工作的是_。(分数:1.00)A.需求获取B.可行性研究 C.需求分析D.撰写软件需求规格说明书解析:
43、解析 需求分析阶段对待开发软件提出的需求进行分析并给出详细定义,编写软件规格说明书及初步的用户手册,提交评审,可以分为 4个方面:需求获取、需求分析、编写需求规格说明书和需求评审。可行性研究是软件生命周期的第二阶段主要任务,在需求分析之前,故选择 B选项。22.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为 _ 。(分数:2.00)A.public B.protectedC.privateD.static解析:解析 因为 public类型的权限控制属性允许类对象对类属性和方法进行访问。23.算法的有穷性是指_。(分数:1.00)A.算法程序的运行时间是有限
44、的 B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用解析:解析 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。24.数据库设计中反映用户对数据要求的模式是_。(分数:2.50)A.内模式B.概念模式C.外模式 D.设计模式解析:解析 本题考查的知识点是数据库的三级模式,包括:慨念模式、外模式和内模式。其中,概念模式是数据库系统中对全局数据逻辑结构的描述。外模式是用户的数据视图。内模式又称物理模式,给出了数据库的物理存储结构和物耻方法,内模式对用户是透明的。因此本题正确答案为 C。25.以下不能正确
45、定义二维数组的选项是 _ 。(分数:2.00)A.int a22=1,2;B.int a2=1,2,3,4); C.int a22=1,2,3;D.int a2=1,2,3,4;解析:26.有以下程序: #includeiostream using namespace std; class R public: R(int r1,int r2) R1=r1; R2=r2; void print(); void print()corist; private: int R1,R2; ; void R:print() void R:print()coiist int main() R a(5,4); const R b(20,52); b.print(); return 0; 执行后的输出结果是