1、国家计算机二级(C+)68 及答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:35,分数:70.00)1.下列情况中,不会调用拷贝构造函数的是【 】(分数:2.00)A.用一个对象去初始化同一类的另一个新对象时B.将类的一个对象赋值给该类的另一个对象时C.函数的形参是类的对象,调用函数进行形参和实参结合时D.函数的返回值是类的对象,函数执行返回调用时2.有以下结构体说明和变量的定义,且指针 p指向变量 a,指针 q指向变量 b。则不能把结点 b连接到结点 a之后的语句是( )。 structnode chardata; struct
2、node*next; a,b,*p=a,*q=b; (分数:2.00)A.3 4 7 5B.3 5 7 4C.1 2 3 4D.1 2 3 53.下列程序的输出结果是( )。 #includeiostreamh void main( ) int a3,i,j,k=2; for(i=0;i3;i+)ai=i; for(i=0;ik;i+) for(j=0;jk;j+) aj=ai; couta2; (分数:2.00)A.2B.3C.1D.04.下列程序的运行结果为( )。 #includeiostreamh void main( ) int a=2; int b=a+1; cout a/b en
3、dl; (分数:2.00)A.0.66667B.0C.0.7D.0.666666665.以下对结构体类型变量 td 的定义中,错误的是_。 (分数:2.00)A.B.C.D.6.设有程序段 int k=10; while(k=0)k=k-1; 则下面描述中正确的是( )。(分数:2.00)A.0B.1C.2D.57.C+语言中标点符号中表示一条预处理命令开始的是( )。(分数:2.00)A.StyleB.DefaultC.CaptionD.Cancel8.对表达式 for(表达式 1;表达式 3)可理解为( )。(分数:2.00)A.for(表达式 1;0;表达式 3)B.for(表达式 1;
4、1;表达式 3)C.for(表达式 1;表达式 3;)D.for(;表达式 3)9.函数 fun的返回值是( )。 fun(char*a,char*b) intnum=0,n=0; while(*(a+num)!=/0)num+; while(bn)*(a+num)=bn;num+;n+; returnnum; (分数:2.00)A.字符串 a的长度B.字符串 b的长度C.字符串 a和 b的长度之差D.字符串 a和 b的长度之和10.如果表达式 x * y + z中,“ * ”是作为友元函数重载的,“+”是作为友元函数重载的,则该表达式还可为 ( )。(分数:2.00)A.public voi
5、d method( )B.public void method( ) throws ExceptionC.public void method( ) throw TimedoutExceptionD.public throw TimedOutException void method( )11.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为(分数:2.00)A.n+1B.n-1C.2nD.n212.现有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向一个链表中连续 的三个结点。 struct node char data; struct node *next; *p
6、,*q,*r; (分数:2.00)A.q-next=r-next; p-next=r;r-next=q;B.p-next=r; q-next=r-next;r-next=q;C.q-next=r-next;r-next=q;p-next=r;D.r-next=q;p-next=r;q-next=r-next;13.判断 char型变量 c是否为小写字母的正确表达式是( )。(分数:2.00)A.a =c =zB.(c =A) p-next=r;r-next=q;B.p-next=r; q-next=r-next;r-next=q;C.q-next=r-next;r-next=q;p-next=
7、r;D.r-next=q;p-next=r;q-next=r-next; 解析:选项 D 中首先将 q 赋给 r-next,也就是将结点 q 的地址存放在结点 r 的指针域中;接着将 r 赋给 p-next, 也就是将结点 r 的地址存放在结点 p 的指针域中,此时完成了 q 和 r 所指结点的交换。q-next=r-next 的目 的是想将 q 的指针域指向下一个结点的数据地址,但由于一开始执行了 r-next= q,即已将 r 的指针域中存 放了 q 结点的地址,所以再做操作“q-next=r-next”就相当于将 q 指向了其本身,也就是和下一个结点断开了,所以选项 D 操作错误。13.
8、判断 char型变量 c是否为小写字母的正确表达式是( )。(分数:2.00)A.a =c =zB.(c =A) int fun2(double x,double y) double a=0,b=0; a=fun1(x);b=fun1(y); return(int)(a+b); main() double w;w=fun2(1.1,2.0); 程序执行后变量 w中的值是_。 (分数:2.00)A.5.21B.5C.5 D.0解析:此题考核的是数值类型的定义与强制转换。本题在进行调用函数 fun2()时,又对函数 fun1()进行了调 用,由于函数 fun1()定义为整型,所以第一次调用 fun
9、1()时返回的值为 1,然后再将 1 赋值给 a,此时由于 a 为 double 型,则系统自动类型转换,将 1 转换成了 1.000000 赋值给了变量 a,以此类推,得 b 的值为 4.000000, 然后通过“return(int)(a+b);”将 a+b 的值强制转换为 int 型 5 返回给主函数,此时又由 w 的类型为 double, 所以返回的整型值 5 又被转换为 double 型。故输出结果为 5.0。22.对于语句 cout setfill(*) setw(10) 1 setfill(*) setw(2) 2;的输出结果是 ( )。(分数:2.00)A.* * * * *
10、* * * * 1 * 2 B.* * * * * * * * 12C.* * * * * * * 1 * 2D.12 * * * * * * * *解析:C+语言中 setfil1的意思是在空格的地方填上 setfil1函数中的参数字符,setw 的意思是没置整个输出字符串的字符个数,本题中用:来代替空格。23.下列程序的运行结果是( )。 #includeiostreamh void fun(int *a,iht *B) int *k; k=a;a=b;b=k; void main( ) inta=3,b=6,*x= 则数值为 9 的表达式是_。(分数:2.00)A.*p+9B.*(p+8
11、)C.*p+=9D.p+7解析:25.C+中运算符优先级由高到低排列正确的是( )。(分数:2.00)A. B.SetNum(50);)解析:本题考查的是考生使用对象指针调用成员函数的能力,指针调用成员函数应该使用符号“-”。44.算法复杂度主要包括时间复杂度和 1 复杂度。(分数:30.00)填空项 1:_ (正确答案:空间)解析:程序在计算机上运行时所耗费的时间由下列因素所决定:程序运行时所需输入的数据总量,对源程 序进行编译所需时间,计算机执行每条指令所需时间,程序中的指令重复执行的次数。前一条取决于实现 算法的计算机软、硬件系统,习惯上常常把语句重复执行的次数作为算法运行时间的相对量度
12、,称作算法 的时间复杂度。算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。45.以下程序运行后的输出结果是 1。 #include void fun(char *s,int p,int k) int i; for(i=p;i2 char s=“abcdefg“; fun(s,3,strlen(s); puts(s); (分数:30.00)填空项 1:_ (正确答案:abcfg)解析:函数 fun 的作用是将 s 所指的字符串中从第 p+3 到第 k+1 个字符向前移动两个位置。本题程序是将 数组 s 中从第 6 个元素开始的值分别向前移动两个位置。在执行 fun 函数时,p 的值是
13、3,k 的值是 7,所 以,具体执行“for(i=p;i46.测试用例包括输入值集和 1 值集。(分数:30.00)填空项 1:_ (正确答案:输出)解析:软件测试用例是为了有效发现软件缺陷而编写的包含测试目的、测试步骤、期望测试结果的特定集合。正确认识和设计软件测试用例可以提高软件测试的有效性,便于测试质量的度量,增强测试过程的可管理性。软件测试用例包括:输入值集和输出值集。测试用例是软件测试的核心。47.通过使用 new和 delete两个运算符进行的分配为 1 存储分配。(分数:30.00)填空项 1:_ (正确答案:动态)解析:本题考查的是对动态分配内存的掌握,在 C+语言中,使用关键字 new和 delete 进行动态内存申请和释放。 48.若要在 C盘根目录下作为二进制文件打开文件 testdat,则应该用的语句是 1。(分数:30.00)填空项 1:_ (正确答案:ifstream fin(“C:/testdat“,ios_binary);或ifstream fin;finopen(c:/test daf“ios_binary);)解析:C+中打开文件有两种方式ifstream fin(“testdat“);ifstream fin;finopen(“testdat“);,ios_binary 的意义是以二进制文件打开。