2012迅雷笔试题

1、微机中1K字节表示的二进制位数是()
A、1000B、0X1000 C、1024 D、0X1024
2、设C语言中,一个int型数据在内存中占2个字节,则unsigned int 型数据的取值范围为()
A、0--- 255 B、0--- 32767 C、0--- 65535 D、0--- 2147483647
3、在C语言中,要求运算数必须是整型的运算符是()
A、/ B、++ C、|= D、%

4、下面程序段的运行结果是()

[cpp] view plain copy print ?
  1. char c[5] = {'a','b','\0','c','\0'};
  2. printf("%s",c);
char c[5] = {'a','b','\0','c','\0'};
printf("%s",c);
A、'a"b' B、ab C、ab_c D、ab_c_ (其中_表示空格)

5、下列关于数组的初始化正确的是()
A、 char str[2] = {"a","b"}
B、 char str[2][3] = {"a","b"}
C、 char str[2][3] = {{'a','b'},{'e','f'},{'g','h'}}
D、 char str[] = {"a","b"}
6、判断字符串a和b是否相等,应当使用()
A、if(a==b) B、if(a=b) C、if(strcpy(a,b)) D、if(strcmp(a,b))
7、一直inta[3][4];则下列能表示a[1][2]元素值的是()
A、*(*(a+1)+2) B、*(a+1+2) C、(&a[0]+1)[2] D、*(a[0]+1)
8、若希望当A的值为奇数时,表达式的值为真,A的值为偶数时,表达式的值为假,则以下不能满足要求的表达式是()
A、A%2==1 B、!(A%2==0) C、!(A%2) D、A%2
9、以下哪项可以用来释放 p = malloc() 分配的内存()
A、free(p) B、delete p C、delete []p D、sizeof p
10、下列有关静态成员函数的描述中,正确的是()
A、静态数据成员可以再类体内初始化
B、静态数据成员不可以被类对象调用
C、静态数据成员不受private控制符作用
D、静态数据成员可以直接用类名调用
11、按e1、e2、e3、e4的次序进栈(中间可能有出栈操作,例如e1进栈后出栈,e2再进栈),则可能的出栈序列是()

A、e3、e1、e4、e2 B、e2、e4、e3、e1C、e3、e4、e1、e2 D、任意序列

12、某二叉树结点的中序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、G、E,该二叉树对应的树林包括多少棵树()
A、1 B、2 C、3 D、4
13、单链表的每个结点包括一个指针link,它指向该结点的后继结点,现要将指针q指向的新结点插入到指针p指向的单链表结点之后,下面的操作序列中哪一个是正确的?
A、q = p->link; p->link = q->link
B、p->link = q->link; q = p->link
C、q->link = p->link; p->link = q
D、p->link = q; q->link = p->link;
14、函数原型void fun(int a,int b=5,char c='*');下面的调用中不合法的是()
A、fun(4,1) B、fun(99) C、fun(11,2,'a') D、fun(15,'*')
15、以下叙述中不正确的是()
A、在不同的函数中可以使用相同名字的变量
B、函数中的形式参数是局部变量
C、在一个函数内定义的变量只在本函数范围内有效
D、在一个函数内的复合语句中定义的变量在本函数范围内有效(只在复合语句中有效)
16、设有一下宏定义:
#define N 3
#define Y(n) ((N+1)*n)
则执行语句:z=2*(N+Y(5+1))后的z值为()
A、38 B、42 C、48 D、54
17、以下程序程序的运行结果是()

[cpp] view plain copy print ?
  1. int main(void)
  2. {
  3. char a[]={"programming"},b[]={"language"};
  4. char *p1,*p2;
  5. int i;
  6. p1=a,p2=b;
  7. for(i=0;i<7;i++)
  8. {
  9. if(*(p1+i)==*(p2+i))
  10. printf("%c",*(p1+i));
  11. }
  12. return 0;
  13. }
int main(void)
{
	char a[]={"programming"},b[]={"language"};
	char *p1,*p2;
	int i;
	p1=a,p2=b;
	for(i=0;i<7;i++)
	{
		if(*(p1+i)==*(p2+i))
			printf("%c",*(p1+i));
	}
	return 0;
}
A、gm B、rg C、or D、ga
18、若有以下程序段:

[cpp] view plain copy print ?
  1. int a[]={4,0,2,3,1},i,j,t;
  2. for(i=1;i<5;i++)
  3. {
  4. t=a[i];
  5. j=i-1;
  6. while(j>=0 && t>a[j])
  7. {
  8. a[j+1]=a[j];
  9. j--;
  10. }
  11. a[j+1]=t;
  12. }
int a[]={4,0,2,3,1},i,j,t;
	for(i=1;i<5;i++)
	{
		t=a[i];
		j=i-1;
		while(j>=0 && t>a[j])
		{
			a[j+1]=a[j];
			j--;
		}
		a[j+1]=t;
	}
A、对数组a进行插入排序(升序)
B、对数组a进行插入排序(降序)
C、对数组a进行选择排序(升序)
D、对数组a进行选择排序(降序)

19、以下程序的输出结果是()

[cpp] view plain copy print ?
  1. #define P 3
  2. int F(int x)
  3. {
  4. return (P*x*x);
  5. }
  6. void main()
  7. {
  8. printf("%d\n",F(3+5));
  9. }
#define P 3
int F(int x)
{
	return (P*x*x);
}
void main()
{
	printf("%d\n",F(3+5));
}
A、49
B、192
C、29

D、77

20、以下代码中,A的构造函数和析构函数分别执行了几次()

A *pa = new A[10];
delete []pa;

A、1、1 B、10、10 C、1、10 D、10、1
21、在顺序表{3、6、8、10、12、15、16、18、21、25、30}中,用二分法查找关键码值11,所需的关键码比较次数是()
A、2 B、3 C、4 D、5
22、若int占2个字节,char 占1个字节,float占4个字节,sizeof(xc)的大小是()

[cpp] view plain copy print ?
  1. struct stu
  2. {
  3. union
  4. {
  5. char b[5];
  6. int bh[2];
  7. }class;
  8. char xm[8];
  9. float cj;
  10. }xc;
struct stu
{
	union
	{
		char b[5];
		int bh[2];
	}class;
	char xm[8];
	float cj;
}xc;
A、16 B、18 C、20 D、22
23、设二叉树根结点的层次为0,一棵深度(高度)为k的满二叉树和同样深度的完全二叉树各有f个结点和c个结点,下列关系式不正确的是()
A、f >= c B、c > f C、f=2^k+1 D、c>2k-1
24、关于引用和指针的区别,下列叙述错误的是()
A、引用必须初始化,指针不必
B、指针初始化以后不能被改变,引用可以改变所指的对象
C、删除空指针是无害的,不能删除引用
D、不存在指向空值的引用,但是存在指向空值的指针
25、属于网络层协议的是()
A、IP B、TCP C、ICMP D、X.25
26、STL中的哪种结构在增加成员时可能会引起原有数据成员的存储位置发生变动()
A、map B、set C、list D、vector
27、windows消息调度机制是()
A、指令队列 B、指令堆栈 C、消息队列 D、消息堆栈
28、在排序方法中,关键码比较次数和记录的初始排列无关的是()
A、Shell排序 B、归并排序 C、直接插入排序 D、选择排序
29、假设A为抽象类,下列声明()是正确的

A、A fun(int ); B、A *p; C、int fun(A) D、A Obj;

抽象类不能定义对象。但是可以作为指针或者引用类型使用。

30、如果类的定义如下,则以下代码正确并且是良好编程风格的是()
A、std::auto_ptr pObj(new Object);
B、std::vector> object_vector;
C、std::auto_ptr pObj(new Object);
D、std::vector> object_vector;
二、填空题

1、写出float x 与零值比较的if语句。

不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。

if(x>0.0000001 && x<-0.0000001)

2、在32位系统中,char str[]="xuelei"; char *p = str; sizeof(str)=() ,sizeof(p)=() ,sizeof(*p)=()

答案分别是: 7、4、1,分别对数组、指针和一个字符类型求大小。。

3、Internet物理地址和IP地址转换采用什么协议? RARP协议
4、char a[2][2][3] = {{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}}};
for(int i = 0;i<12;i++)
printf("%d", );

在空格处填上合适的语句,顺序打印出a中的数字。

答案:a[i/6][(i/3)%2][i%3];这道题目是多维数组的输出问题,这里要考虑的是每维数字的取值顺序问题:第一维,前六次循环都取0,后六次取1,于是i/6可以满足要求;第二维,前3次为0,再3次为1,再3次为0,再3次为1,用量化的思想,i/3把12个数字分为4组每组3个,量化为0、1、2、3,为要得到0、1、0、1我们这里就需要对(0、1、2、3)%2=(0、1、0、1),于是(i/3)%2;最后一维我们需要的是(0、1、2;0、1、2;0、1、2;0、1、2;)我们就填上i%3。

5、以下函数查找一个整数数组中第二大的数,请填空。

[cpp] view plain copy print ?
  1. constint MINNUMBER = -32767;
  2. int find_sec_max(int data[],int count)
  3. {
  4. int maxnumber = data[0];
  5. int sec_max = MINNUMBER;
  6. for(int i = 1;i < count; i++)
  7. {
  8. if(data[i] > maxnumber)
  9. {
  10. }
  11. else
  12. {
  13. if(data[i] > sec_max)
  14. }
  15. }
  16. return sec_max;
  17. }
const int MINNUMBER = -32767;
int find_sec_max(int data[],int count)
{
	int maxnumber = data[0];
	int sec_max = MINNUMBER;
	for(int i = 1;i < count; i++)
	{
		if(data[i] > maxnumber)
		{


		}
		else
		{
			if(data[i] > sec_max)

		}
	}
	return sec_max;
}
上面的三个空格处依次应该填上:sec_max = maxnumber; maxnumber = data[i]; sec_max = data[i];

6、下面程序可从1....n中随机输出m个不重复的数,请填空。

[cpp] view plain copy print ?
  1. knuth(int n,int m)
  2. {
  3. srand((unsigned)time(NULL));
  4. for(int i = 0;i < n;i++)
  5. {
  6. if(_________)
  7. {
  8. cout<"\n";
  9. ______________
  10. }
  11. }
  12. }
knuth(int n,int m)
{
	srand((unsigned)time(NULL));
	for(int i = 0;i < n;i++)
	{
		if(_________)
		{
			cout<

分别为:rand()%(n-i)

7、以下prim函数的功能是分解质因数,请填空。

[cpp] view plain copy print ?
  1. void prim(int m,int n)
  2. {
  3. if(m>n)
  4. {
  5. while(_________) n++;
  6. ______________;
  7. prim(m,n);
  8. cout<
  9. }
  10. }
  11. void main()
  12. {
  13. int n = 435234;
  14. prim(n,2);
  15. }
void prim(int m,int n)
{
	if(m>n)
	{
		while(_________)  n++;
		______________;
		prim(m,n);
		cout<
答案分别为:m%n 和 m/=n

8、程序改错。

[cpp] view plain copy print ?
  1. int fun(vector<int>& val)
  2. {
  3. copy(val.begin() , val.end() , ostream_iterator<int>(cout,"\n"));
  4. ......
  5. }
  6. void main()
  7. {
  8. int a[5] = {1,2,3,4,5};
  9. vector<int> v;
  10. copy(a , a + 5 , v.begin());
  11. fun(vector<int>(v));
  12. prim(n,2);
  13. }
int fun(vector& val)
{
	copy(val.begin() , val.end() , ostream_iterator(cout,"\n"));
	......
}
void main()
{
	int a[5] = {1,2,3,4,5};
	vector v;
	copy(a , a + 5 , v.begin());
	fun(vector(v));
	prim(n,2);
}
错误的代码和改正后的代码分别为:

9、C++中const有什么用途(至少说出三种):1、便于进行类型检查;2、可以节省空间避免不必要的内存分配,提高了效率;3、保护被修饰的对象,防止意外修改,增强程序的健壮性。

10、下面程序的功能是输出数组的全排列,请填空。

[cpp] view plain copy print ?
  1. void perm(int list[],int k,int m)
  2. {
  3. if(_______)
  4. {
  5. copy(list,list+m,ostream_iterator<int>(cout," "));
  6. cout<
  7. return ;
  8. }
  9. for(int i = k ; i <= m ; ++i)
  10. {
  11. swap(&list[k] , &list[i]);
  12. ______________;
  13. swap(&list[k] , &list[i]);
  14. }
  15. }
  16. void main()
  17. {
  18. int list[] = {1,2,3,4,5};
  19. perm(list,0,sizeof(list)/sizeof(int)-1);
  20. }
void perm(int list[],int k,int m)
{
	if(_______)
	{
		copy(list,list+m,ostream_iterator(cout," "));
		cout<
答案分别是: k == m 和 perm(list , k+1 , m)

你可能感兴趣的:(面试题,list,fun,c,object,delete,float)