1、,a,b); Swap( a, b); Printf(a2 = %d b2=%dn”,a,b); return 0;【代码2】stdio.h#define SPACE /空格字符Int main() char str128 =”Nothing is impossible! “;int i,num =0,wordMark=0; for(i=0;stri;i+) If(stri=SPACE) WordMark=0; else If(wordMark=0) wordMark=1; Mun+; Printf(“%d/n”,num) retun 0;【代码3】#define SPACE “/空格字符in
2、t countStrs(char *);int main()char str128 = Nothing is impossible! ;Printf(%d/n,(1)(str)retum 0;int countStrs(char *p) int num=0, wordMark= 0; for(;(2);p+) If(3)=SPACE) wordMark= 0; if( !wordMark ) wordMark = 1; +mun retum (4) ;【问题1】(4分) 写出代码1运行后的输出结果。【问题2】(3分) 写出代码2运行后的输出结果。【问题3】(8分) 代码3的功能与代码2完全相同
3、,请补充3中的空缺,将解答写入答题纸的对应栏内。 试题三(共15分) 阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 下面的程序利用快速排序中划分的思想在整数序列中找出第k小的元素(即将元素从小到大排序后,取第k个元素)。 对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序的序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。 例如,整数序列“19, 12, 30, 11,7,53, 78, 25的第3小元素为12。整数序
4、列“19, 12,7,30, 11, 11,7,53. 78, 25, 7的第3小元素为7。 函数partition(int a, int low,int high)以alow的值为基准,对alow、alow+l、ahigh进行划分,最后将该基准值放入ai (lowihigh),并使得alow、alow+l、,、Ai-1都小于或等于ai,而ai+l、ai+2、ahigh都大于ai。函教findkthElem(int a,int startIdx,int endIdx,inr k)在astartIdx、astartIdx+1、.、aendIdx中找出第k小的元素。【代码】#include Int
5、 partition(int a ,int low, int high)/对 alow.high进行划分,使得alow.i中的元素都不大于ai+1.high中的元素。int pivot=alow; /pivot表示基准元素Int i=low,j=high;while( 1) ) While(ipivot)-j; ai=ajaipivot)+i; aj=ai(2) ; /基准元素定位return i; Int findkthElem(int a,int startIdx,int endIdx, int k)/整数序列存储在astartldx.endldx中,查找并返回第k小的元素。if (sta
6、rtldx0 |endIdxendIdx | kendIdx |k-1startIdx) Return-1; /参数错误 if(startIdxendldx) int loc=partition(a, startIdx, endldx); 进行划分,确定基准元素的位置if (loc=k-1) 找到第k小的元素 return (3) ; if(k-l loc) /继续在基准元素之前查找 return findkthElem(a, (4) ,k); else 继续在基准元素之后查找 return findkthElem(a, (5) ,k); return astartIdx; int i, k;
7、 int n;int a = 19, 12, 7, 30, 11, 11, 7, 53, 78, 25, 7; n= sizeof(a)sizeof(int) /计算序列中的元素个数for (k=1;kn+1;k+)in;i+) printf(“%d/t”,ai); printf(“n”); printf(“elem %d=%dn,k,findkthElem(a,0,n-1,k);/输出序列中第k小的元素return 0; 试题四(共15分) 【说明】 图是很多领域中的数据模型,遍历是图的一种基本运算。从图中某顶点v出发进行广度优先遍历的过程是: 访问顶点v;访问V的所有未被访问的邻接顶点W1
8、 ,W2 ,.,Wk;依次从这些邻接顶点W1 ,W2 ,.,Wk出发,访问其所有未被访问的邻接顶点;依此类推,直到图中所有访问过的顶点的邻接顶点都得到访问。 显然,上述过程可以访问到从顶点V出发且有路径可达的所有顶点。对于从v出发不可达的顶点u,可从顶点u出发再次重复以上过程,直到图中所有顶点都被访问到。例如,对于图4-1所示的有向图G,从a出发进行广度优先遍历,访问顶点的一种顺序为a、b、c、e、f、d。图4-1图4-2设图G采用数组表示法(即用邻接矩阵arcs存储),元素arcsij定义如下:图4-1的邻接矩阵如图4-2所示,顶点af对应的编号依次为05.因此,访问顶点a的邻接顶点的顺序为
9、b,c,e。函数BFSTraverse(Graph G)利用队列实现图G的广度优先遍历。相关的符号和类型定义如下:#define MaxN:50 *图中最多顶点数*typedef int AdjMatrixMaxNMaxN;typedef struct int vexnum,edgenum; *图中实际顶点数和边(弧)数* AdjMatrix arcs; *邻接矩阵*)Graph;typedef int QElemType;enum ERROR=0;OK=l;代码中用到的队列运算的函数原型如表4-1所述,队列类型名为QUEUE。 表4-1 实现队列运算的函数原型及说明int BFSTraver
10、se(Graph G)/图G进行广度优先遍历,图采用邻接矩阵存储 unsigned char*visited; /visited用于存储图G中各顶点的访问标志,0表示未访问 int v,w;u; QUEUEQ Q;申请存储顶点访问标志的空间,成功时将所申请空间初始化为0visited=(char*)calloc(G.vexnum, sizeof(char);If( (1) )retum ERROR; (2) ; /初始化Q为空队列for( v=0; vG.vexnum; v+) if(!visitedv) /从顶点v出发进行广度优先遍历%d”,v); /访问顶点v并将其加入队列 visited
11、v=l; (3) ; while(!isEmpty(Q) (4) ; /出队列并用u表示出队的元素 for(v=0;vstringusing namespace std;class User private: string name;public: User(string name) User() void setName(string name) this-name=name; string getName() void sendMessage(string message); class ChatRoom . static void showMessage(User* user, string message) coutgetName()messagesendMessage( li_ void join(User* user) (3) (HeIIoEveryone!l am+user-getName(); . ; . ; int main() ChatRoomSystem*crs= (4) ; crs-startup();join( (5) (Wayne); delete crs;/* 如需了解更多程序员真题资讯,请看希赛软考学院!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1