C++技术考察笔试题

  • 格式:docx
  • 大小:23.02 KB
  • 文档页数:6

一、 C++技术类(100分)
(一) 选择题(2分*10题)
1. 以下叙述中错误的是( )
A. 一个类中可以有多个构造函数
B. 一个类中可以有多个析构函数
C. 一个类中可以有多个同名的成员函数
D. 一个类中的数据成员可以是对象类型

2. 在int a=10,*p=&a;语句中,p的值( )
A. 变量p的地址值
B. 10
C. .变量a的地址值
D. 无意义

3. 长度为n的有序线性表中进行二分查找,最坏的情况下时间复杂度是( )
A. O(n)
B. O(n2)
C. O(log2n)
D. O(nlog2n)

4. 关于类和对象不正确的说法是()
A. 类是一种类型,它封装了数据和操作
B. 对象是类的实例
C. 一个类的对象只有一个
D. 一个对象必属于某个类

5. 在C++中,容器是一种()
A. 标准类
B. 标准对象
C. 标准函数
D. 标准类模板

6. 若整型变量x=2,则表达式x<<2的结果是( )
A. 2
B. 4
C. 6
D. 8

7. 若变量都已定义,以下哪个能正确地交换两个变量的值:( )
A. a=t;t=b;b=a;
B. a=b^a;b=b^a;a=a^b;
C. a=a+b;b=a-b;a=a-b;
D. *a=t;t=*b;*b=*a;
8. 下列表达式的值为false的是( )
A. 1<3 && 5<7
B. !(2>4)
C. 3&0&&1
D. !(5<8)||(2<8)

9. 设int a=10, b=11, c=12;表达式(a+b)A. 2
B. 0
C. –2
D. 1

10. 表示“大于10而小于20的数“,正确的是:( )
A. 10B. x>10||x<20
C. x>10&x<20
D. !(x<=10||x>=20)

(二) 填空题(4分*5题)
1. C++标志符的五种作用域是:程序级, ____, ____, ____, ____.
2. 写出输出结果:
int main(int argc, char *argv[])
{
int a = 5;
printf("%d\t", ++a < a++ ? ++a : a++);
printf("%d\t", a);
a = 5;
printf("%d\t", a++ < ++a ? a++ : ++a);
printf("%d\t", a);
return 0;
}
___________
3. 写结果
int main( )
{
int a,b,c,x;
a=b=c=0;
for (int k=0; k<10; k++)
{
cin>>x;
switch(x%3)
{
case 0: a+=x; break;
case 1: b+=x; break;
case 2: c+=x; break;
}
}
cout<return 0;
}
_________
4. 写运行结果
int main( )
{
int x = 9999;
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
cout << countx;
}
______
5. 写运行结果
union
{
int i;
char x[2];
}a;

void main( )
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d",a.i);
}
_____

(三) 程序题(10分*3题)
1. 已知链表的头结点head,写一个函数把这个链表逆序。
2. 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序,要求用递
归方法进行。
3. 有个数组a[100]存放了100个数,这100个数取自1-99,且只有两个相同的数,剩下的98个
数不同,写一个搜索算法找出相同的那个数的值.(注意空间效率时间效率尽可能要低).
(四) 简答题(10分*3题)
1. 作为面向对象语言,C++有哪些性质
2. strcpy函数和memcpy函数有什么区别?它们各自使用时应该注意什么问题?
3. const 有什么用途?(请至少说明两种)

参考答案:

一、 C++技术类(100分)
(一) 选择题(2分*10题)
1. B
2. C
3. C
4. C
5. D
6. D
7. C
8. C
9. B
10. D

(二) 填空题(4分*5题)
1. 文件级,类级,函数级,程序块级.
2. 7 8 7 8
3. 141,64,452
4. 8
5. 266
(三) 程序题(10分*3题)
1. 参考
Node * ReverseList(Node *head) //链表逆序
{
if ( head == NULL || head->next == NULL )
return head;
Node *p1 = head ;
Node *p2 = p1->next ;
Node *p3 = p2->next ;
p1->next = NULL ;
while ( p3 != NULL )
{
p2->next = p1 ;
p1 = p2 ;
p2 = p3 ;
p3 = p3->next ;
}
p2->next = p1 ;
head = p2 ;
return head ;
}

2. 参考:
Node * MergeRecursive(Node *head1 , Node *head2)
{
if ( head1 == NULL )
return head2 ;
if ( head2 == NULL)
return head1 ;
Node *head = NULL ;
if ( head1->data < head2->data )
{
head = head1 ;
head->next = MergeRecursive(head1->next,head2);
}
else
{
head = head2 ;
head->next = MergeRecursive(head1,head2->next);
}
return head ;
}

3. 参考:
int GetTheExtraVal(char*var,int size)
{
int val;
int i=0;
for(;i{
if(var[var[i]&0x7F]&0x80)
{
val=var[i]&0x7F;
break;
}
var[var[i]&0x7F]|=0x80;
}
for(i>=0;--i)
{
var[var[i]&0x7F]&=0x7F;
}
return val;
}
(四) 简答题(10分*3题)
1. 参考:考察对封装,继承,派生,3大特色的理解
2. 参考:考察对于api的正确认识
3. 参考:考察const修饰符理解。