下半年下午题.docx
- 文档编号:30307428
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:16
- 大小:293.57KB
下半年下午题.docx
《下半年下午题.docx》由会员分享,可在线阅读,更多相关《下半年下午题.docx(16页珍藏版)》请在冰豆网上搜索。
下半年下午题
2016年下半年程序员考试真题(下午题)
试题一(共15分)
阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。
【说明】
设有整数数组A[1:
N](N>1),其元素有正有负。
下面的流程图在该数组中寻找连续排列的若干个元素,使其和达到最大值,并输出其起始下标K、元素个数L以及最大的和值M。
例如,若数组元素依次为3,-6,2,4,-2,3,-1,则输出K=3,L=4,M=7。
该流程图中考察了A[1:
N]中所有从下标i到下标j(j≥i)的各元素之和S,并动态地记录其最大值M。
【流程图】
注:
循环开始框内应给出循环控制变量的初值和终值,默认递增值为1,格式为:
循环控制变量=初值,终值
试题二(共15分)
阅读以下代码,回答问题:
1至问题3,将解答填入答题纸的对应栏内。
【代码1】
#include
swap(intx,inty)
{
inttmp=x;x=y;y=tmp;
}
intmain()
{
inta=3,b=7;
printf("a1=%db1=%d\n",a,b);
swap(a,b);
printf("a1=%db1=%d\n",a,b);
return0;
}
【代码2】
#include
#defineSPACE''//空格字符
intmain()
{
charstr[128]="Nothingisimpossible!
";
inti,num=0,wordMark=0;
for(i=0;str[i];i++)
if(str[i]==SPACE)
wordMark=0;
else
if(wordMark==0)
{
wordMark=1;
num++;
}
printf("%d\n",num);
return0;
}
【代码3】
#include
#defineSPACE''//空格字符
intcountStrs(char*);
intmain()
{
charstr[128]="Nothingisimpossible!
";
printf("%d\n",countStrs(str));
return0;
}
intcountStrs(char*p)
{
intnum=0,wordMark=0;
for(;______;p++)
{
if(______==SPACE)
wordMark=0;
else
if(!
wordMark)
{
wordMark=1;
++num;
}
}
return______;
}
【问题1】(4分)
写出代码1运行后的输出结果。
【问题2】(3分)
写出代码2运行后的输出结果。
【问题3】(8分)
代码3的功能与代码2完全相同,请补充3中的空缺,将解答写入答题纸的对应栏内。
试题三(共15分)
阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
【说明】
下面的程序利用快速排序中划分的思想在整数序列中找出第k小的元素(即将元素从小到大排序后,取第k个元素)。
对一个整数序列进行快速排序的方法是:
在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序的序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。
例如,整数序列“19,12,30,11,7,53,78,25”的第3小元素为12。
整数序列“19,12,7,30,11,11,7,53.78,25,7”的第3小元素为7。
函数partition(inta,intlow,inthigh)以a[low]的值为基准,对a[low]、a[low+l]、…、a[high]进行划分,最后将该基准值放入a[i](low≤i≤high),并使得a[low]、a[low+l]、,..、a[i-1]都小于或等于a[i],而a[i+l]、a[i+2]、..、a[high]都大于a[i]。
函教findkthElem(inta,intstartIdx,intendIdx,inrk)在a[startIdx]、a[startIdx+1]、...、a[endIdx]中找出第k小的元素。
【代码】
#include
#include
intpartition(inta[],intlow,inthigh)
{//对a[low…high]进行划分,使得a[low…i]中的元素都不大于a[i+1…high]中//的元素
intpivot=a[low];//pivot表示基准元素
inti=low,j=high;
while(_______)
{
while(i
a[i]=a[j];
while(i a[j]=a[i]; } __________;//基准元素定位 returni; } intfindkthElem(inta[],intstartIdx,intendIdx,intk) {//整数序列存储在a[startIdx…endIdx]中,查找并返回第K小的元素 if(startIdx<0||endIdx<0||startIdx>endIdx||k<1||k-1>endIdx||k-1 return-1;//参数错误 if(startIdx { intloc=partition(a,startIdx,endIdx);//进行划分,确定基准元素的位置 if(loc==k-1)//找到第k小的元素 return___________; if(k-1 returnfindkthElem(a,_______________,k); else//继续在基准元素之后查找 returnfindkthElem(a,_______________,k); } returna[startIdx]; } intmain() { inti,k; intn; inta[]={19,12,7,30,11,11,7,53,78,25,7}; n=sizeof(a)/sizeof(int);//计算序列中的元素个数 for(k=1;k { for(i=0;i { printf("%d",a[i]); } printf("\n"); printf("elem%d=%d\n",k,findkthElem(a,0,n-1,k)); //输出序列中第K小的元素 } return0; } 试题四(共15分) 阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 图是很多领域中的数据模型,遍历是图的一种基本运算。 从图中某顶点v出发进行广度优先遍历的过程是: ①访问顶点v; ②访问V的所有未被访问的邻接顶点W1,W2,..,Wk; ③依次从这些邻接顶点W1,W2,..,Wk出发,访问其所有未被访问的邻接顶点;依此类推,直到图中所有访问过的顶点的邻接顶点都得到访问。 显然,上述过程可以访问到从顶点V出发且有路径可达的所有顶点。 对于从v出发不可达的顶点u,可从顶点u出发再次重复以上过程,直到图中所有顶点都被访问到。 例如,对于图4-1所示的有向图G,从a出发进行广度优先遍历,访问顶点的一种顺序为a、b、c、e、f、d。 设图G采用数组表示法(即用邻接矩阵arcs存储),元素arcs[i][j]定义如下: 图4-1的邻接矩阵如图4-2所示,顶点a~f对应的编号依次为0~5.因此,访问顶点a的邻接顶点的顺序为b,c,e。 函数BFSTraverse(GraphG)利用队列实现图G的广度优先遍历。 相关的符号和类型定义如下: #defineMaxN: 50/*图中最多顶点数*/ typedefintAdjMatrix[MaxN][MaxN]; typedefstruct{ intvexnum,edgenum;/*图中实际顶点数和边(弧)数*/ AdjMatrixarcs;/*邻接矩阵*/ )Graph; typedefintQElemType; enum{ERROR=0;OK=l}; 代码中用到的队列运算的函数原型如表4-1所述,队列类型名为QUEUE。 【代码】 intBFSTraverse(GraphG) {//图G进行广度优先遍历,图采用邻接矩阵存储 unsignedchar*visited; //visited用于存储图G中各顶点的访问标志,0表示未访问 intv,w,u; QUEUEQQ; //申请存储顶点访问标志的空间,成功时将所申请空间初始化为0 visited=(char*)calloc(G.vexnum,sizeof(char)); if(__________) retumERROR; __________;//初始化Q为空队列 for(v=0;v { if(! visited[v]) {//从顶点v出发进行广度优先遍历 printf("%d",v);//访问顶点v并将其加入队列 visited[v]=1; __________; while(! isEmpty(Q)) { ______________;//出队列并用u表示出队的元素 for(w=0;v if(G.arcs[u][w]! =0&&_______)//w是u的邻接顶点且未访问过 { printf("%d",w);//访问顶点w visited[w]=1; EnQueue(&Q,w); } } } } free(visited); returnOK; }//BFSTraverse 试题六(共15分) 阅读下列说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 以下C++代码实现一个简单的聊天室系统(ChatRoomSystem),多个用户(User)可以向聊天室(ChatRoom)发送消息,聊天室将消息展示给所有用户。 类图如图6-1所表示。 【C++代码】 #include #include usingnamespacestd; classUser { private: stringname; public: User(stringname) { _____________=name; } ~User(){} voidsetName(stringname) { this->name=name; } stringgetName() { returnname; } voidsendMessage(stringmessage); }; classChatRoom { public: staticvoidshowMessage(User*user,stringmessage) { cout<<"["< "< } }; voidUser: : sendMessage(stringmessage) { _________________(this,message); } classChatRoomSystem { public: voidstarup() { User*zhang=newUser("John"); User*li=newUser("Leo"); zhang->sendMessage("Hi! Leo! "); li->sendMessage("Hi! John! "); } voidjoin(User*user) { ___________________("helloeveryone! Iam"+user->getName()); } }; intmain() { ChatRoomSystem*crs=____________________________; crs->starup(); crs->join(___________________("Wayne")); deletecrs; return0; }/* 程序运行结果: [John]: Hi! Leol [Leo]: Hi! John! [Wayne】: HelloEveryone! IamWayne /* 试题五(共15分) 阅读以下说明和Java程序,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 以下Java代码实现一个简单的聊天室系统(ChatRoomSystem),多个用户(User)可以向聊天室(ChatRoom)发送消息,聊天室将消息展示给所有用户。 类图如图5-1所示。 【Java代码】 classChatRoom{ publicstaticvoidshowMessage(Useruser,Strmgmessage){ System.out.println("["+user.getName()+"]: "+message); } } classUser{ privateStringname; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicUser(Stringname){ ___________=name; } publicvoidsendMessage(Stringmessage){ ___________(this,message); } } publicclassChat: RoomSystem{ publicvoidstartup(){ Userzhang=newUser("John"); Userli=newUser("Leo"); zhang.sendMessage("Hi! Leo! "); 1i.sendMessage("Hi! John! "); } publicvoidjoin(Useruser){ _________("HelloEveryone! Iam"+user.getName()); } publicstaticvoidmain(Stringargs){ ChatRoomSystemcrs=___________; Crs.startup(); Crs.join(_________)(“Wayne”)); } } /* 程序运行结果: [John]: Hi! Leol [Leo]: Hi! John! [Wayne】: HelloEveryone! IamWayne */
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 下半年 下午