职位类型:技术类
面试地点:深圳
招聘公司:迅雷网络
迅雷技术类笔试题目
1.下列程序的输出结果为: (B)
#include
void main()
{
char* a[ ] = { "hello", "the", "world"};
char** pa = a;
pa ;
cout<<”*pa<
A) theworld
B) the
C) ello
D) ellotheworld
2.已知二叉树后序遍历序列是 bfegcda,中序遍历序列是 badefcg,它的前序遍历序列是: (B)
A) abcdefg
B) abdcefg
C) adbcfeg
D) abecdfg
3.栈和队列的共同特点是: (C)
A) 都是先进先出
B) 都是先进后出
C) 只允许在短点处插入和删除元素
D) 没有共同点
4.下面程序的运行结果为: (A)
#include
void main()
{span>
int a, x;
for(a = 0, x = 0; a<=1 && !x ; a )
{
a ;
}
cout<< a << x <
A) 21
B) 22
C) 32
D) 41
5.下列选项,不正确的是: (B) while 后没有分号
A) for(int a=1; a<=10; a );
B) int a=1;
do
{
a ;
}while(a<=10)
C) int a=1;
while(a<=10)
{
a ;
}
D) for(int a= 1; a<=10; a )a ;
6.下面关于数组的初始化正确的是: (B)
A) char str[2] = {“a”,”b”};
B) char str[2][3]={“a”,”b”}
;
C) char str[2][3]={{?a?,?b?},{?e?,?d?},{?e?,?f?}};
D) char str[] = {“a”, “b”};
7.下列说法正确的是: (B)
A) 内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B) 内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C) 类的内联函数必须在类体内定义
D) 类的内联函数必须在类体外通过关键字 inline 定义
8.下面对静态成员的描述中,正确的是: (D)
A) 静态数据成员可以在类体内初始化
B) 静态数据成员不可以被类的对象调用
C) 静态数据成员不能受 private 控制符的作用
D) 静态数据成员可以直接用类名调用
9.下列运算符中,在 C 语言中不能重载的是: (C)
A) * B) >= C) :: D) delete
10.下面关于多态性的描述,错误的是:(C)
A) C 语言的多态性分为编译时的多态性和运行时的多态性
B) 编译时的多态性可通过函数重载实现
C) 运行时的多态性可通过模板和虚函数实现 //模板的是编译时多态性,而虚函数是运行时
D) 实现运行时多态性的机制称为动态绑定
11.如果进栈序列为 e1,e2,e3,e4,e5,则可能的出栈序列是: (D)
A) e3,e2,e5,e4,e1
B) e2,e3,e5,e4,e1
C) e3,e2,e4,e5,e1
D) 以上都有可能
12.下面关于类和对象的描述中,错误的是: (A)
A) 类就是 C 语言中的结构体类型,对象就是 C 语言中的结构体变量
B) 类和对象之间的关系是抽象和具体的关系
C) 对象是类的实例,一个对象必须属于一个已知的类
D) 类是具有共同行为的若干对象的统一描述体
13.下面关于数组的描述错误的是:( D)
A) 在 C 语言中数组的名字就是指向该数组第一个元素的指针
B) 长度为 n 的数组,下标的范围是 0-n-1
C) 数组的大小必须在编译是确定
D) 数组只能通过值参数和引用参数两种方式传递给函数
注释:
在把数组作为参数传递给函数时,有值传递(by value)和地址传递(by reference)两种方式。
在值传递方式中,要在数组参数的尾部加上一对方括号([]),调用函数时只需将数组的地址(即数组名)传递给函数。
例如:如果数组 x 被声明为: int x[10];
那麽函数被说明为: void byval_func(int[]);
参数 int[]告诉编译程序 byval_func()函数只有一个参数,即一个由 int 型值组成的数组。 函数调用时只需将数组名传递给函数:byval_func(x);
#include
void byval_func(int[]);
void main(void);
void main(void)
{
int x[10];
int y;
for(y=0;y<10;y )
x[y]=y;
byval_func(x);
}
void byal_func(int i[])
{
int y;
for(y=0;y<10;y )
printf("%d\n",i[y]);
> }
在值传递方式中,数组 x 将被复制一份,复制所得的数组将被存放在栈中,然后由 byval_func()函数接收并打印出来。由於传递给 byval_func()函数的是初始数组的一份拷贝,因此在 byval_func()函数内部修改传递过来的数组对初始数组没有任何影响。
值传递方法的开销是很大的,因为首先它要完整地复制初始数组并将这份拷贝存放到栈中,这将耗费相当可观的运行时间, 因而值传递方法效率较低;其次,初始化数组的拷贝需要占用额外的内存空间(栈中的内存);最后,编译程序需要专门产生一部分用来复制初始数组的代码,这将使程序变大。
地址传递方法克服了值传递方法的缺点。在地址传递方法中,传递给函数的是指向初始数组的指针,不用复制数组,因此程序变得简练,也节省了栈中的内存空间。在地址传递过程中,只需在函数原形中将函数的参数说明为指向数组元素数据类型的一个指针。
例如同样定义一个数组 x: int x[10];
那麽函数被说明为: int const_funt(const int*);
参数 const int*告诉编译程序 const_funt()函数只有一个参数,即指向一个 int 类型常量的指针。
函数调用时只需将数组的地址传递给函数:const_func(x);
#include
void const_func(const int*);
void main(void);
void main(void)
{
int x[10];
int y;
for(y=0;y<10;y )
x[y]=y;
constl_func(x);
}
void const_func(const int*i)
{
int y;
for(y=0;y<10;y )
printf("%d\n",*(i y));
}
在值传递方式中,没有复制初始数组并将其拷贝存放在栈中,const_func()函数只接收到指向一个 int 类型常量
的指针,因此在编写程序时要保证传递给 const_func()函数的是指向一个由 int 类型常量组成的数组的指针。 const
修饰符的作用是防止意外修改初始数组中的某一个元素。
14.引用标准库时,下面的说法你认为哪个是正确的:( B)
A) 语句#include “ stdlib.h”是正确的, 但会影响程序的执行速度
B) 语句#include
C) 语句#include
D) 语句#include “ stdlib.h”是错误的
注释: include ""是先从本地目录开始寻找,然后去寻找系统路径,而 Include <> 相反先从系统目录,后从本地目录。
15.设 a、 b、 c、 d、 m、 n 均为 int 型变量,且 a=5、 b=6、 c=7、 d=8、 m=2、 n=2,则逻辑表达式( m=a>b) &&(n=c>d)运算后, n 的值为:( C)
A) 0
B) 1
C) 2
D) 7
16.不能作为重载函数的调用的依据是:( C)
A) 参数个数
B) 参数类型
C) 函数类型
D) 函数名称
17.下列程序的输出结果为: (D)
#include< iostream. h>
int func(int n)
{
if〔 n<1)return 1;
else return n func(n-1);
return 0;
}
void main()
{
cout<
A) 0
B)10
C)15
D)16
18.建立派生类对象时,3 种构造函数分别是 a(基类的构造函数)、 b(成员对象的构造函数)、 c(派生类的构造函
数)这 3 种构造函数的调用顺序为: (A)
A)abc
B)acb
C)cab
D)cba
19.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是:( D)
A)一元运算符
B)二元运算符
C)选项 A)和选项 B)都可能
D)重载错误
解析: C 中用友元函数重载运算符至少有一个参数,重载一目运算符要有一个参数,重载二目运算符要有
两个参数。
20.有以下程序段:( D)?
#define F(X,Y) (X)--; (Y) (X)*(Y);
int i, a = 3, b = 4;
for( i = 0; i<5; i ) F(a,b)
printf(“%d, %d”, a, b);
输出结果是:()
A) 3, 4
B) 3, 5
C) -2, 5
D) -2, 9
21.下列 for 循环的循环体执行次数为:( A)
for(int i(10), j(1); i=j=0; i , j--)
A) 0;
B) 1;
C) 无限;
D)以上都不对
22.下面程序的输出结果是( D)
char *p1= “ 123” , *p2 = “ ABC” , str[ 50] = "xyz";
strcpy( str 2,strcat( p1,p2)) ;
cout << str;
A) xyz123ABC
B) z123ABC
C) xy123ABC  ;
D)出错
23.下面函数的执行结果是输出( B)
char str[ ] = “xunlei”;
char *p = str;
int n = 10;
printf(“%d, %d, %d\n”, sizeof(str), sizeof(p), sizeof(n));
A) 4, 4, 4
B) 7, 4, 4
C) 6, 4, 4
D) 6, 6, 4
24.有下列程序段:
char *p, *q;
p = (char*) malloc(sizeof(char) * 20);
q = p;
scanf(“%s %s”, p, q);
printf(“%s %s\n”, p, q);
若从键盘输入: abc def, 则输出结果是( A)
A) def def
B) abc def
C) abc d
D) d d
解析: q=p;因此 p,q 指向的是同一段内存.scanf 先是把 abc 写到 p 指向的空间,再把 def 写到 q 指向的空间,也就是同一段空间,因此 abc 被 def 覆盖了。
25.现在有以下语句:
struct _THUNDER{
int iVersion;
char cTag;
char cAdv;
int iUser;
char cEnd;
}Thunder;
int sz = sizeof(Thunder);
则执行后,变量 sz 的值将得到( D)
A) 11
B) 12
C) 13
D) 16
26.有如下程序段:
void GetMemeory(char* p)
{
p = (char*) malloc (100);
}
void test()
{
char *str=NULL;
GetMemory(str);
strcpy(str,”Thunder”);
strcat(str 2, “Downloader”);
printf(str);
}
请问运行 Test 函数结果是:( D)
A) Thunder Downloader
B) under Downloader
C) Thunderownloader
D) 程序崩溃
解析:在函数中给指针分配空间,实际上是给指针的临时变量分配空间,函数结束后,这个临时变量也消亡,
而 str 仍然为 NULL,没有为其分配空间,此时 strcpy()是肯定会出错的。
27.函数调用 exec((v1,v2), (v3,v4,v5),v6,v7);中,实参的个数是( A)
A) 4
B) 5
C) 6
D) 7
28.p 是指向类 X 的成员 m 的指针, s 是类 X 的一个对象。现要给 m 赋值,( C)是正确的。
A) s.p = 5
B) s->p = 5
C) s.*p = 5
D) *s.p = 5
29.函数 fun( char* p) { return p;}的返回值是( B)
A)无确切值
B) 行参 p 中存放的地址值
C) 一个临时存储单元的地址
D) 行参 p 自身的地址值
30.a,b 均为不等于 0 的整形变量,以下关系式恒成立的是:( C)
A) a*b/a*b == 1  ;
B) a/b*b/a == 1
C) a/b*b a%b == a
D) a/b*b == a
31.设有如下说明:
typedef struct ST{ long a; int b; char c[2]; } NEW;
则下面叙述中正确的是: (C)
A)以上的说明形式非法
B) ST 是一个结构体类型
C) NEW 是一个结构体类型
D) NEW 是一个结构体变量
32.下列表达式正确的是:( C)
A) 9
B) ( x y)
C) c c c
D) ( a-b--)
33.在 int b[ ][3] = {{1},{3,2},{4,5,6},{0}};中, sizeof(b) = ( D)。
A) 4
B) 12
C) 28
D) 48
34.以下程序的输出结果是: (D)
#define M(x,y,z) x*y z
main()
{
int a=1, b=2, c=3;
printf(“%d\n”,M(a b,b c,c a));
}
A) 19
B) 17
C) 15
D) 12
35.若有以下定义和语句:
int u=010, v= 0x10, w=10;
printf(“ %d, %d,%d\n” ,u,v,w);
则输出结果是: (A)
A)8,16,10
B)10,10,10
C)8,8,10
D)8,10,10
36.下面程序段的输出结果是:( B)
int a=5, b=4, c=3, d=2;
if(a>b>c)
printf(“%d\n”,d);
else if((c-1>=d)==1)
printf(“%d\n”, d 1);
else
printf(“%d\n”, d 1);
A) 2
B) 3
C) 4
D) 编译错误
37.有如下程序段,
请问 k 的值是:( D)
enum {a, b=5, c, d=4, e} k; k =c;
A) 3 B) 4 C) 5 D) 6
38.有如下程序段:
int i, n = 0;
double x = 1, y1 = 2.1/1.9, y2 = 1.9/2.1;
for( i = 1; i<22; i )
x = x*y1;
while( x!=1.0)
{
x =x*y2;
n ;
}
printf(“%d\n”, n);
请问执行结果是:( A)
A) 21
B) 22
C)无限循环
D) 程序崩溃
48. 用树形结构表示实体之间联系的模型是( C)
A) 关系模型
B) 网状模型
C) 层次模型
D)以上三个都是
39.有如下程序段:
char fun(char *);
main()
{
char *s = “one”, a[5] = {0}, (*f1)(char *) = fun, ch;
}
则对函数 fun 的调用语句正确的是( C)
A) *f1(&a);
B) f1( *s) ;
C) f1(&ch)
D) ch = *f1(s);要改成( *f1) (s)才正确
40.有如下程序段:
int c = 23;
printf(“%d\n”, c&c);
请问执行结果是:( C)
A) 0
B) 46
C) 23
D) 以上都不对