}
A.0.5B.0C0.7D.0.6666666-
9.有如下一段代码:
#defineADD(x,y)x+y
intm=3;
m+=m*ADD(m,m);
则m的值为:
A.15B.12C.18D.58
10.如下是一个带权的图,图中结点A到结点D的关键路径的长度是:
A.13B.15C.28D.58
11.下面的模板声明中,正确的是:
A.template
B.template
C.template
D.template
12.在Windows编程中下面的说法正确的是:
A.两个窗口,他们的窗口句柄可以是相同的B.两个窗口,他们的处理函数可以是相同
的
C.两个窗口,他们的窗口句柄和窗口处理函数都不可以相同.
13.下面哪种情况下,B不能隐式转换为A?
A.classB:
publicA{}B.classA:
publicB{}
C.classB{operatorA();}D.classA{A(constB&);}
14.某公司使用包过滤防火墙控制进出公司局域网的数据,在不考虑使用代理服务器的情
况下,下面描述错误的是”该防火墙能够()”.
A.使公司员工只能访问Internet上与其业务联系的公司的IP地址.
B.仅允许HTTP协议通过,不允许其他协议通过,例如TCP/UDP.
C.使员工不能直接访问FTP服务器端口号为21的FTP地址.
D.仅允许公司中具有某些特定IP地址的计算机可以访问外部网络
15.数字字符0的ASCII值为48,若有以下程序:
main()
{
chara=’1’,b=’2’;
printf(“%c,”,b++);
printf(“%d\n”,b-a);
}
程序运行之后的输出结果是:
A.3,2B.50,2C.2,2D.2,50
二.填空题(共40分)
本程序从正文文件text.in读入一篇英文短文,统计该短文中不同单词和它的出现次数,并
按词典编辑顺序将单词及它的出现次数输出到正文文件word.out中.
程序用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立.然后中序遍历
该二叉树,将遍历经过的二叉树上的节点的内容输出.
程序中的外部函数
intgetword(FILE*pFile,char*pszWordBuffer,intnBufferLen);
从与pFile所对应的文件中读取单词置入pszWordBuffer,并返回1;若单词遇文件尾,已无
单词可读时,则返回0.
#include
#include
#include
#include
#defineSOURCE_FILE"text.in"
#defineOUTPUT_FILE"word.out"
#defineMAX_WORD_LEN128
typedefstructtreenode
{
charszWord[MAX_WORD_LEN];
intnCount;
structtreenode*pLeft;
structtreenode*pRight;
}BNODE;
intgetword(FILE*pFile,char*pasWordBuffer,intnBufferLen);
voidbinary_tree(BNODE**ppNode,char*pszWord)
{
if(ppNode!
=NULL&&pszWord!
=NULL)
{
BNODE*pCurrentNode=NULL;
BNODE*pMemoNode=NULL;
intnStrCmpRes=0;
____
(1)_____;pCurrentNode=*ppNode
while(pCurrentNode)
{
/*寻找插入位置*/
nStrCmpRes=strcmp(pszWord,___
(2)___);pCurrentNode-
>nCount
if(!
nStrCmpRes)
{
___(3)___;pCurrentNode->nCount++
return;
}
else
{
___(4)___;pMemoNode=pCurrentNode
pCurrentNode=nStrCmpRes>0?
pCurrentNode-
>pRight:
pCurrentNode->pLeft;
}
}
}
pCurrent=newBNODE;
if(pCurrentNode!
=NULL)
{
memset(pCurrentNode,0,sizeof(BNODE));
strncpy(pCurrentNode->szWord,pszWord,MAX_WORD_LEN-1);
pCurrentNode->nCount=1;
}
if(pMemoNode==NULL)
{
___(5)___;*ppNode=pCurrentNode
}
elseif(nStrCmpRes>0)
{
pMemoNode->pRight=pCurrentNode;
}
else
{
pMemoNode->pLeft=pCurrentNode;
}
}
voidmidorder(FILE*pFile,BNODE*pNode)
{
if(___(6)___)return;!
pNode||!
pFile
midorder(pFile,pNode->pLeft);
fprintf(pFile,"%s%d\n",pNode->szWord,pNode->nCount);
midorder(pFile,pNode->pRight);
}
voidmain()
{
FILE*pFile=NULL;
BNODE*pRootNode=NULL;
charszWord[MAX_WORD_LEN]={0};
pFile=fopen(SOURCE_FILE,"r");
if(pFile==NULL)
{
printf("Can'topenfile%s\n",SOURCE_FILE);
return;
}
while(getword(pFile,szWord,MAX_WORD_LEN)==1)
{
binary_tree(___(7)___);//pRootNode,szWord
}
fclose(pFile);
pFile=fopen(OUTPUT_FILE,"w");
midorder(pFile,pRootNode);
fclose(pFile);
}
三.附加题(每题30分,2题,共60分)
1.从程序健壮性进行分析,下面的FillUserInfo函数和Main函数分别存在什么问
题?
#include
#include
#defineMAX_NAME_LEN20
structUSERINFO
{
intnAge;
charszName[MAX_NAME_LEN];
};
voidFillUserInfo(USERINFO*parUserInfo)
{
stu:
:
cout<<"请输入用户的个数:
";
intnCount=0;
std:
:
cin>>nCount;
for(inti=0;i{
std:
:
cout<<"请输入年龄:
";
std:
:
cin>>parUserInfo[i]->nAge;
std:
:
stringstrName;
std:
:
cout<<"请输入姓名:
";
std:
:
cin>>strName;
strcpy(parUserInfo[i].szName,strName.c_str());
}
}
intmain(intargc,char*argv[])
{
USERINFOarUserInfos[100]={0};
FillUserInfo(arUserInfos);
printf("Thefirstnameis:
");
printf(arUserInfos[0].szName);
printf("\n");
return0;
}
2.假设你在编写一个使用多线程技术的程序,当程序中止运行时,需要怎样一个机
制来安全有效的中止所有的线程?
请描述其具体流程.
【2013】
【2014】
一 不定项选择题(共25题,每题4分,共100分,少选、错选、多选均不得分)
1 已知一棵二叉树,如果先序遍历的节点顺序是:
ADCEFGHB,中序遍历是:
CDFEGHAB,则后序遍历结果为:
(D)
A.CFHGEBDA B.CDFEGHBA C.FGHCDEBA D.CFHGEDBA
2 下列哪两个数据结构,同时具有较高的查找和删除性能?
(CD)
A.有序数组 B.有序链表 C.AVL树 D.Hash表
3 下列排序算法中,哪些时间复杂度不会超过nlogn?
(BC)
A.快速排序 B.堆排序 C.归并排序 D.冒泡排序
4 初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:
(A)
A.8 3 2 5 1 6 4 7
B.3 2 8 5 1 4 6 7
C.3 8 2 5 1 6 7 4
D.8 2 3 5 1 4 7 6
5 当n=5时,下列函数的返回值是:
(A)
int foo(int n)
{
if(n<2)return n;
return foo(n-1)+foo(n-2);
}
A.5 B.7 C.8 D.10
6 S市A,B共有两个区,人口比例为3:
5,据历史统计A的犯罪率为0.01%,B区为0.015%,现有一起新案件发生在S市,那么案件发生在A区的可能性有多大?
(C)
A.37.5% B.32.5% C.28.6% D.26.1%
7 Unix系统中,哪些可以用于进程间的通信?
(BCD)
A.Socket B.共享内存 C.消息队列 D.信号量
8 静态变量通常存储在进程哪个区?
(C)
A.栈区 B.堆区 C.全局区 D.代码区
9 查询性能(B)
A. 在Name字段上添加主键
B. 在Name字段上添加索引
C. 在Age字段上添加主键
D. 在Age字段上添加索引
10 IP地址131.153.12.71是一个(B)类IP地址。
A.A B.B C.C D.D
11 下推自动识别机的语言是:
(C)
A. 0型语言 B.1型语言 C.2型语言 D.3型语言
12 下列程序的输出是:
(D)
#define add(a+b) a+b
int main()
{
printf(“%d\n”,5*add(3+4));
return 0;
}
A.23 B.35 C.16 D.19
13 浏览器访问某页面,HTTP协议返回状态码为403时表示:
(B)
A 找不到该页面
B 禁止访问
C 内部服务器访问
D 服务器繁忙
14 如果某系统15*4=112成立,则系统采用的是(A)进制。
A.6 B.7 C.8 D.9
15 某段文本中各个字母出现的频率分别是{a:
4,b:
3,o:
12,h:
7,i:
10},使用哈夫曼编码,则哪种是可能的编码:
(A)
A a(000) b(001) h(01) i(10) o(11)
B a(0000) b(0001) h(001) o(01) i
(1)
C a(000) b(001) h(01) i(10) o(00)
D a(0000) b(0001) h(001) o(000) i
(1)
16 TCP和IP分别对应了OSI中的哪几层?
(CD)
A Application layer
B Presentation layer
C Transport layer
D Network layer
17 一个栈的入栈序列是A,B,C,D,E,则栈的不可能的输出序列是?
(C)
A.EDCBA B.DECBA C.DCEAB D.ABCDE
18 同一进程下的线程可以共享以下?
(BD)
A. stack B.data section C.register set D.file fd
19 对于派生类的构造函数,在定义对象时构造函数的执行顺序为?
(D)
1:
成员对象的构造函数
2:
基类的构造函数
3:
派生类本身的构造函数
A.123 B.231 C.321 D.213
20 如何减少换页错误?
(BC)
A 进程倾向于占用CPU
B 访问局部性(locality of reference)满足进程要求
C 进程倾向于占用I/O
D 使用基于最短剩余时间(shortest remaining time)的调度机制
21 递归函数最终会结束,那么这个函数一定?
(B)
A 使用了局部变量
B 有一个分支不调用自身
C 使用了全局变量或者使用了一个或多个参数
D 没有循环调用
22 编译过程中,语法分析器的任务是(B)
A分析单词是怎样构成的
B 分析单词串是如何构成语言和说明的
C 分析语句和说明是如何构成程序的
D 分析程序的结构
23 同步机制应该遵循哪些基本准则?
(ABCD)
A.空闲让进 B.忙则等待 C.有限等待 D.让权等待
24 进程进入等待状态有哪几种方式?
(D)
A CPU调度给优先级更高的线程
B 阻塞的线程获得资源或者信号
C 在时间片轮转的情况下,如果时间片到了
D 获得spinlock未果
25 设计模式中,属于结构型模式的有哪些?
(BC)
A 状态模式 B 装饰模式 C 代理模式 D 观察者模式
二、填空题(共4题10个空,每空2分,共20 分)
1 设有字母序列{Q,D,F,X,A,P,N,B,Y,M,C,W},请写出按二路归并方法对该序列进行一趟扫描后的结果为DQFXAPBNMYCW。
2 关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),要按照关键码值递增的次序进行排序,若采用初始步长为4的Shell的排序法,则一趟扫描的结果是QACSQDFXRHMY;若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是FHCDQAMQRSYX。
3 二进制地址为011011110000,大小为(4)10和(16)10块的伙伴地址分别为:
_________,_________。
4 设t是给定的一棵二叉树,下面的递归程序count(t)用于求得:
二叉树t中具有非空的左、右两个儿子的结点个数N2;只有非空左儿子的个数NL;只有非空右儿子的结点个数NR和叶子结点个数N0。
N2,NL,NR、N0都是全局量,且在调用count(t)之前都置为0。
typedef struct node
{
int data;
struct node *lchild,*rchild;
}node;
int N2,NL,NR,N0;
void count(node *t)
{
if (t->lchild!
=NULL)
if (t->rchild!
=NULL) N2++;
else NL++;
else if (t->rchild!
=NULL) NR++;
else N0++;
if(t->lchild!
=NULL) count(t->lchild);
if(t->rchild!
=NULL) count(t->rchild);
}/* call form :
if(t!
=NULL) count(t);*/
三、其他方向简答题(共2题,每题20分),选作题,不计入总分)
1 、请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置和变化,队伍可能随时有人加入和退出;当有人退出影响到用户的位置排名时需要及时反馈到用户。
2、 A,B两个整数集合,设计一个算法求他们的交集,尽可能的高效。