人人笔试 2011.10.11北航场

C++笔试题D

 选择填空题(20分)

1、  下列叙述正确的是(C)

A 算法的执行效率和数据的存储结构无关

B 算法的空间复杂度是指算法程序中指令(或语句)的条数

C 算法的有穷性是指算法必须能在执行有限个步骤之后终止

D 算法的时间复杂度使指执行算法程序需要的时间

2、  采用拉链法解决冲突的散列表中,查找的平均长度是(B)

A 直接与关键字个数有关

B 直接与装填因子a有关

C 直接与表的容量有关

D 直接与散列函数有关

查找->哈希查找->解决冲突->链表法

3、  设一颗二叉树中有3个叶子节点,8个度为1的节点,则该二叉树中总的节点数为:()

4、  N个顶点的带权无向连通图的最小生成树包含(C)个顶点

A n-1

B n

C n/2

D n+1

5、  设有数组定义:char array[]=”RenRen”;则数组array所占的空间为(C)

A 0

B 6

C 7

D 2

6、  对于长度为n的线性表,在最坏的情况下,快速排序所需要的比较次数为(O(n2))

7、  网卡是完成(C)的功能

A 物理层

B 数据链路层

C 物理层的数据链路层

D 数据链路层和网络层

8、  有如下模板定义,在下列fun的调用中,哪些是错误的(C)

Template <class T> T fun(T x,T y) {return x+y;}

A fun(2,8)

B fun(2.1, 2.2)

C fun(2, 3.1)

D fun<float> (2, 3.2)

9、  对类的构造函数和析构函数描述正确的是(A)

A 构造函数可以重载,析构函数不能重载

B 构造函数不能重载,析构函数可以重载

C 都可以

D 都不可以

10、 假定MyClass为一个类,则执行MyClass a[3],*p[2];语句时,自动调用该类的构造函数(B)次。

A 2

B 3

C 4

D 5

 简单题(25分)

1、  for(;;) 和while(true) 哪个理论效率高?为什么?(3分)

while(true)的效率高。因为它先判断,然后执行,条件不满足之后就不执行了;而for语句每次都需要比较和运算。

2、  类的静态成员和非静态成员有何区别?(5分)

非静态成员必须实例化,而静态成员不是必须实例化。

3、  如下程序段:(12分)

class S{};

class A:public S
{
public:
	virtual void Func()
	{
		cout<<"this A func"<<endl;
	}
};

class B:public A
{
public:
	virtual void Func()
	{
		cout<<"this B func"<<endl;
	}
	void SubFunc()
	{
		Func();
	}
};

class C:public A
{
public:
	void Func()
	{
		cout<<"this C func"<<endl;
	}
	void SubFunc()
	{
		A::Func();
	}
};
void main()
{
	A *pa=new A();
	A *pb=new B();
	A *pc=new C();

	pa->Func();
	pb->Func();
	pc->Func();

	((B*)pb)->SubFunc();
	((C*)pc)->SubFunc();

	int s=sizeof(S);
	int a=sizeof(A);
	int b=sizeof(B);
}

 (1)   输出结果是什么?

this A func

this B func

this C func

this B func

this A func

 (2)   在windows32位系统中,a和b的值分别为多少?请简要说明为什么。

a=4

b=4

32位系统中,分配4个字节。

 (3)   S的值呢?

s=1

S类为空

 

//附录源码:

#include "stdafx.h"

#include <iostream>

#include <stdio.h>

using namespace std;

……

 4、  请你分别划出OSI的七层网络结构图,和TCP/IP的五层结构图。(5分)

七层结构:

应用层

会话层

表示层

传输层

网络层

数据链路层

物理层

 

五层结构:

应用层

传输层

网络层

数据链路层

物理层

 

编程题(55分)

1、  一个人上楼梯,他一次只能上1个,2个或3个台阶,问他上n(1<=n<=100w)个台阶的楼梯总共有多少种方法?(15分)

void zouLouTi(int n)
{
	int x=0;
	int y=0;
	int z=0;
	int count=0;
	for (x=0;x<=n;x++)
	{
		for (y=0;y<=n/2;y++)
		{
			for (z=0;z<=n/3;z++)
			{
				if (x+2*y+3*z==n)
				{
					cout<<x<<"个一步,"<<y<<"个二步,"<<z<<"个三步"<<endl<<endl;
					count++;
				}
			}
		}
	}
	cout<<endl<<"所以,上"<<n<<"个台阶,"<<"一共有"<<count<<"种走法"<<endl<<endl;
}

 2、  在人人网上,如果A和B相识,B和C相识,A和C不相识,那么A和C的关系就是2度好友,以此类推。现给出10万个用户之间的好友关系,要求设计一个时间复杂度为O(n)的方法可以找出某个人在人人网上的所有十度好友。(20分)

在图结构上,找出从当前节点出发,路径为10的所有节点。

 

3、   人人网可以听歌啦,用户可以分享、评论、喜欢、收藏某首歌曲。但是海量的歌曲,用户选择起来很纠结,现在你拥有所有歌曲的操作记录,需要你来设计一个“猜你喜欢”的推荐系统(至少要包含实时性、数据持久性、自我学习成长三种特性)来给用户推荐他们可能喜欢的歌曲。写出思路即可,可随意扩展。(20分)

Class 歌曲

{

         分享

         评论

         喜欢

         收藏

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值