1、国家计算机二级(C+)86 及答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:35,分数:70.00)1.表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是( )。(分数:2.00)A.6B.7C.8D.92.有以下程序 #include“iostream.h“ void main( ) int i=1,j=1,k=2; if( (j+|k+) printf(“%d/n“,*p+*q); 程序运行后的输出结果是_。 (分数:2.00)A.16B.10C.8D.64.有以下程序: main() int i=1,j=2,k=3
2、; if(i+=1 程序运行后的输出结果是_。 (分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 35.有如下程序 #include #include using namespace std; class MyClass public: MyClass()cout =D.private cout printf18.下列关于虚基类的描述,错误的是( )。(分数:2.00)A.设置虚基类的目的是为了消除二义性B.虚基类的构造函数在非虚基类之后调用C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调
3、用派生类的构造函数19.有如下程序: #include using namespace std; class Base public: void output()coutPrint(); delete ptr; return 0; ) 程序的输出结果是 (分数:2.00)A.IBB.iDC.2BD.2D20.执行以下程序后,test.txt 文件的内容是(若文件能正常打开)_。 #include main() FILE *fp; char *s1=“Fortran“,*s2=“Basic“; if(fp=fopen(“test.txt“,“wb“)=NULL) printf(“Cant ope
4、n test.txt file/n“); exit(1); fwrite(s1,7,1,fp); /*把从地址 s1开始的 7个字符写到 fp所指文件中*/ f seek(fp, 0L,SEEK_SET); /*文件位置指针移到文件开头*/ fwrite(s2,5,1,fp); fclose(fp); (分数:2.00)A.BasicanB.BasicFortranC.BasicD.FortranBasic21.有如下定义: int a51,3,5,7,9, * p=a;下列表达式中不能得到数值 5的是(分数:2.00)A.a2B.a3C.*(p+2)D.*p+422.下列叙述中正确的是(分数
5、:2.00)A.程序执行的效率与数据的存储结构密切相关B.程序执行的效率只取决于程序的控制结构C.程序执行的效率只取决于所处理的数据量D.以上三种说法都不对23.若有下面的函数调用 fun(a+b,3,max(n-1,b)则 fun的实参个数是【 】(分数:2.00)A.3B.4C.5D.624.下面程序的运行结果是( )。 # include iostreamh void main( ) int num=1; intref=num; ref=ref+2; cout num; num=num+3; cout ref endl; (分数:2.00)A.13B.16C.36D.3325.有如下程序
6、 #include using namespace std; class A public: virtual Void funcl()coutfuncl(); p-func2(); retum0; 运行程序,屏幕上将显示输出_。 (分数:2.00)A.B1B2B.A1A2C.B1A2D.A1B226.有如下程序 #include using namespace std; class Base protected: Base()cout0) switch(k) default : break; case 1 : n+=k; case 2 : case 3 : n+=k; k-; printf(“
7、%d/n“,n); 程序运行后的输出结果是_。 (分数:2.00)A.0B.4C.6D.733.下面有关 for循环的正确描述是( )。(分数:2.00)A.for循环只能用于循环次数已经确定的情况B.for循环是先执行循环体语句,后判断表达式C.在 for循环中,不能用 break语句跳出循环体D.for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来34.已知枚举类型声明语句为: enum COLORWHITE,YELLOW,GREEN5,RED,BLACK10;则下列说法中错误的是(分数:2.00)A.枚举常量 YELLOW的值为 1B.枚举常量 RED的值为 6C.枚举常量
8、BLACK的值为 10D.枚举常量 WHITE的值为 135.下面这个程序的结果是( )。 #includeiostreamh classA private: inta; public: voidseta( );intgeta( ); voidA:seta( ) a=1; intA:geta( ) returna; classB private: inta; publiC: voidseta( );intgeta( ); voidB:seta( ) a=2; intB:geta( ) returna; classC:publicA,publicB private: intb; public:
9、voiddisplay( ); voidC:display( ) int b:geta( ); coutb; voidmain( ) Cc; cseta( ); c.display( ); (分数:2.00)A.1B.2C.随机输出 1或 2D.程序有错二、填空题(每空 2分,共 30分)(总题数:13,分数:390.00)36.类模板不同于函数模板,类模板只可用 1 型参数。(分数:30.00)填空项 1:_37.以下程序中函数 huiwen 的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串 yes!,否则函数返回字符串 no!,并在主函数中输出,所谓 回文即正向与反向的拼
10、写都一样,例如:adgda。请填空。 #include char *huiwen(char *str) char *p1,*p2; int i,t=0; p1=str;p2= 1 ; for(i=0;inext; r=q-next; sum+=q-next-num; sum+=r-next-next-num; printf(“%d/n“,sum); (分数:30.00)填空项 1:_46.类模板不同于函数模板,类模板只可用 1 型参数。(分数:30.00)填空项 1:_47.已知程序的结果为 123,请填空。 #includeiostream.h templateclassT classA p
11、ublic: Tx,y,z; voiddisplay( )coutx“y“z; ; voidmain( ) Aintal; 1 2 3 al.display( ); (分数:30.00)填空项 1:_48.按“行进后出”原则组织数据的数据结构是 1 。(分数:30.00)国家计算机二级(C+)86 答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:35,分数:70.00)1.表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是( )。(分数:2.00)A.6B.7 C.8D.9解析:本题中考查了 WhileWend循环语句,条
12、件是 I=1,当运行一次之后,I=I+3,I 变为 3了,不满足条件了,所以在运行中,只运行了一次就停止了,最终输出结果为 3。2.有以下程序 #include“iostream.h“ void main( ) int i=1,j=1,k=2; if( (j+|k+) printf(“%d/n“,*p+*q); 程序运行后的输出结果是_。 (分数:2.00)A.16B.10 C.8D.6解析:数组 a 各元素 a0a9的值依次为 110;在程序的说明部分,指针变量 p 初始化为 if(i+=1 程序运行后的输出结果是_。 (分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3
13、3 解析: 执行“i+=1 char *s1=“Fortran“,*s2=“Basic“; if(fp=fopen(“test.txt“,“wb“)=NULL) printf(“Cant open test.txt file/n“); exit(1); fwrite(s1,7,1,fp); /*把从地址 s1开始的 7个字符写到 fp所指文件中*/ f seek(fp, 0L,SEEK_SET); /*文件位置指针移到文件开头*/ fwrite(s2,5,1,fp); fclose(fp); (分数:2.00)A.Basican B.BasicFortranC.BasicD.FortranBa
14、sic解析:此题考核的是文件的读写,定义一个 FILE类型结构体的指针 fp,以“只写”方式打开一个test.txt文 件,并向文件输入指针变量 s1指向的 7个字符,则文件内的内容为“Fortran”,执行fseek函数文件位置指针 移到文件的开头,再次向文件输入指针变量 s2指向的 5个字符,虽然此时的文件前 5个字符字符已被“Forta” 所占用,但当向文件输入“Basic”这五个字符时,系统会覆盖原有的内容“Forta”,所以最后 test.txt里的 内容为:Basican。21.有如下定义: int a51,3,5,7,9, * p=a;下列表达式中不能得到数值 5的是(分数:2.
15、00)A.a2B.a3 C.*(p+2)D.*p+4解析:22.下列叙述中正确的是(分数:2.00)A.程序执行的效率与数据的存储结构密切相关 B.程序执行的效率只取决于程序的控制结构C.程序执行的效率只取决于所处理的数据量D.以上三种说法都不对解析:一种数据的逻辑结构根据需要可以表示成多种存储结构,而采用不同的存储结构,其数据处理的效率是不同的。因此,在进行数据处理时,选择合适的存储结构是很重要的。23.若有下面的函数调用 fun(a+b,3,max(n-1,b)则 fun的实参个数是【 】(分数:2.00)A.3 B.4C.5D.6解析:在 fun()中用“,“隔开的参数表示其参数的个数,
16、所以其共有 3个参数。24.下面程序的运行结果是( )。 # include iostreamh void main( ) int num=1; intref=num; ref=ref+2; cout num; num=num+3; cout ref endl; (分数:2.00)A.13B.16C.36 D.33解析:本题考查的是考生对引用的掌握,ref 实际上就是变量 num的别 名,所以 ref=ref+2时,num 已经变成了 3。25.有如下程序 #include using namespace std; class A public: virtual Void funcl()cou
17、tfuncl(); p-func2(); retum0; 运行程序,屏幕上将显示输出_。 (分数:2.00)A.B1B2B.A1A2C.B1A2D.A1B2解析:26.有如下程序 #include using namespace std; class Base protected: Base()cout0) switch(k) default : break; case 1 : n+=k; case 2 : case 3 : n+=k; k-; printf(“%d/n“,n); 程序运行后的输出结果是_。 (分数:2.00)A.0B.4C.6D.7 解析:在 switch 语句中,表达式的值
18、与某一个 case 后面的常量表达式的值相等时,就执行此 case 后面的语 句,若所有的 case 中的常量表达式的值都没有与表达式的值匹配的,就执行 default 后面的语句,各个 case 和 default 的出现次序不影响执行结果。所以在本题中,当 k=5 和 k=4 的时候,case 都没有与其匹配的值, 所以执行了 default 语句;当 k=3 时,执行“case 3 : n+=k;”得 n=3,然后执行 default;当 k=2 时,执行“case2 : case 3 : n+=k;”得 n=5,然后执行 default;当 k=1 时,执行“case 1 : n+=k
19、; case 2 : case 3 : n+=k;” 使得 n 加两次 k,得到 n=7。33.下面有关 for循环的正确描述是( )。(分数:2.00)A.for循环只能用于循环次数已经确定的情况B.for循环是先执行循环体语句,后判断表达式C.在 for循环中,不能用 break语句跳出循环体D.for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 解析:选项 A) for循环可以用于循环次数不确定的情况;选项 B) for循环是先判断表达式,后执行循环体语句;选项 C) 在 for循环中,可以用 break语句跳出循环体,从而接着执行循环体后面的语句。34.已知枚举类型声明语
20、句为: enum COLORWHITE,YELLOW,GREEN5,RED,BLACK10;则下列说法中错误的是(分数:2.00)A.枚举常量 YELLOW的值为 1B.枚举常量 RED的值为 6C.枚举常量 BLACK的值为 10D.枚举常量 WHITE的值为 1 解析:枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值;枚举元素本身由系统定义了一个表示序号的数值,从 0开始顺序定义为 0,1,2。所以枚举函数中对象的值应从。开始,依次加 1,如果有的对象已赋值,则后面也按照前面的值依次加 1的原则。35.下面这个程序的结果是( )。 #includeiostreamh classA
21、private: inta; public: voidseta( );intgeta( ); voidA:seta( ) a=1; intA:geta( ) returna; classB private: inta; publiC: voidseta( );intgeta( ); voidB:seta( ) a=2; intB:geta( ) returna; classC:publicA,publicB private: intb; public: voiddisplay( ); voidC:display( ) int b:geta( ); coutb; voidmain( ) Cc;
22、cseta( ); c.display( ); (分数:2.00)A.1B.2C.随机输出 1或 2D.程序有错 解析:在类 A中有 geta( )函数,在类 B中也有 geta( )函数,类 C继承了类 A和类 B,这样就产生了二义性,所以程序会出错。二、填空题(每空 2分,共 30分)(总题数:13,分数:390.00)36.类模板不同于函数模板,类模板只可用 1 型参数。(分数:30.00)填空项 1:_ (正确答案:类)解析:本题考查的是类模板的定义,C+语言中模板分为两种:类模板和函数模板, 类模板只能用于类型参数,函数模板可以重载。 37.以下程序中函数 huiwen 的功能是检查
23、一个字符串是否是回文,当字符串是回文时,函数返回字符串 yes!,否则函数返回字符串 no!,并在主函数中输出,所谓 回文即正向与反向的拼写都一样,例如:adgda。请填空。 #include char *huiwen(char *str) char *p1,*p2; int i,t=0; p1=str;p2= 1 ; for(i=0;inext; r=q-next; sum+=q-next-num; sum+=r-next-next-num; printf(“%d/n“,sum); (分数:30.00)填空项 1:_ (正确答案:5)解析:程序通过语句“s0.next=s+1; s1.nex
24、t=s+2; s2.next=s;”将结构体变量 s 中各结点链接成了一个 循环链表,即最后一个结点的指针域指向了头结点(s2.next=s;),整个链表形成一个环,并通过语句“p=s; q=p-next; r=q-next;”将结构体指针变量 p、q、r 指向了各结点,故本题输出的 sum=3+2=5。46.类模板不同于函数模板,类模板只可用 1 型参数。(分数:30.00)填空项 1:_ (正确答案:类)解析:本题考查的是类模板的定义,C+语言中模板分为两种:类模板和函数模板, 类模板只能用于类型参数,函数模板可以重载。 47.已知程序的结果为 123,请填空。 #includeiostream.h templateclassT classA public: Tx,y,z; voiddisplay( )coutx“y“z; ; voidmain( ) Aintal; 1 2 3 al.display( ); (分数:30.00)填空项 1:_ (正确答案:a1.x=1;)解析:通过程序的结果知道数据类型是 int,所以调用时声明模板实参为 int的,再对 x,y,z 进行赋值。48.按“行进后出”原则组织数据的数据结构是 1 。(分数:30.00)解析:
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1