一、选择题:15 分共 10 题
1. 在排序方法中,关键码比较次数与记录地初始排列无关的是:D
A. Shell 排序 B. 归并排序 C. 直接插入排序 D. 选择排序
2. 以下多线程对 int 型变量x的操作,哪几个需要进行同步:B C
A. x=y; B. x++; C. ++x; D. x=1;
3. 代码
void func()
{
static int val;
…
}
中,变量 val 的内存地址位于:B
A. 已初始化数据段 B.未初始化数据段 C.堆 D.栈
4. 同一进程下的线程可以共享以下:B
A. stack B. data section C. register set D.thread ID
5. TCP 和 IP 分别对应了 OSI 中的哪几层?E G
A. Application layer B. Data link layer C.Presentation layer D. Physical layer E. Transport layer F. Session
layer G. Network layer
6. short a[100],sizeof(a) 返回?D
A. 2 B. 4 C. 100 D. 200 E. 400
7. 以下哪种不是基于组件的开发技术__B___。
A. XPCOM B. XP C. COM D. CORBA
8. 以下代码打印的结果是(假设运行在 i386系列计算机上):C
struct st_t
{
int status;
short *pdata;
char errstr[32];
};
st_t st[16];
char *p = (char *)( st[2].errstr + 32 );
printf( "%d", ( p - (char *)(st)) );
A. 32 B. 114 C. 120 D. 1112
9. STL 中的哪种结构是连续形式的存储:D
A. map B. set C. list D. vector
10. 一个栈的入栈序列是 A,B,C,D,E,则栈的不可能的输出序列是:C
A. EDCBA B. DECBA C. DCEAB D. ABCDE
二、简答题:20 分,共 2 题
1. (5 分)重复多次 fclose一个打开过一次的 FILE *fp 指针会有什么结果,并请解释。
考察点:导致文件描述符结构中指针指向的内存被重复释放,进而导致一些不可预期的异常。
2. (15 分)下面一段代码,想在调用f2(1) 时打印 err1,调用 f2(2) 时打印 err4,但是代码中有一些问题,请做尽可能少的修改使之正确。
1 static int f1( const char *errstr,unsigned int flag ) {
2 int copy, index,len;
3 const static char**__err = { "err1", "err2", "err3","err4" };
4
5 if( flag &0x10000 )
6 copy = 1;
7 index = ( flag& 0x300000 ) >> 20;
8
9 if( copy ) {
10 len = flag &0xF;
11 errstr = malloc(len );
12 if( errstr = NULL)
13 return -1;
14 strncpy( errstr,__err[index], sizeof( errstr ) );
15 } else
16 errstr = __err +index;
17 }
18
19 void f2( int c ) {
20 char *err;
21
22 swtch( c ) {
23 case 1:
24 if( f1( err,0x110004 ) != -1 )
25 printf( err );
26 case 2:
27 if( f2( err,0x30000D ) != -1 )
28 printf( err );
29 }
30 }
三、编程题:30 分共 1 题
注意:要求提供完整代码,如果可以编译运行酌情加分。
1. 求符合指定规则的数。
给定函数 d(n) = n + n 的各位之和,n 为正整数,如 d(78) = 78+7+8=93。这样这个函数可以看成一个生成器,如 93 可以看成由 78 生成。
定义数 A:数 A 找不到一个数 B 可以由 d(B)=A,即 A 不能由其他数生成。现在要写程序,找出 1 至 10000 里的所有符合数 A 定义的数。
输出:
1
3
…
四、设计题:35 分共 1 题
注意:请尽可能详细描述你的数据结构、系统架构、设计思路等。建议多写一些伪代码或者流程说明。
1. 假设一个 mp3 搜索引擎收录了 2^24 首歌曲,并记录了可收听这些歌曲的 2^30 条 URL,但每首歌的 URL 不超过 2^10 个。系统会定期检查这些 URL,如果一个 URL 不可用则不出现在搜索结果中。现在歌曲名和 URL 分别通过整型的 SONG_ID 和 URL_ID 唯一确定。对该系统有如下需求:
1) 通过 SONG_ID 搜索一首歌的 URL_ID,给出 URL_ID 计数和列表
2) 给定一个 SONG_ID,为其添加一个新的URL_ID
3) 添加一个新的 SONG_ID
4) 给定一个 URL_ID,将其置为不可用
限制条件:内存占用不超过 1G,单个文件大小不超过 2G,一个目录下的文件数不超过 128 个。