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分)
七层结构:
应用层
会话层
表示层
传输层
网络层
数据链路层
物理层
五层结构:
应用层
传输层
网络层
数据链路层
物理层
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 歌曲
{
分享
评论
喜欢
收藏
}