




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Ray Shiu 资格考试题库 /rayshiu 豆丁网2010年软考程序员考试(下午题)考前预测试题及答案(2套)2010年软考程序员考试(下午题)预测模拟试题及答案(1)下午试卷 (考试时间 14:0016:30 共150分钟) 本试卷共8道题,考生需解答5道题,其中试题1试题3是必答题,试题4和试题5两题任选1道题,试题6至试题8三题任选1道解答。对于任选题,如果解答的试题数超过1道,则题号小的1道题解答有效。每题15分,满分75分。试题一 【说明】 该程序的功能是从文件INDAT中读取一篇英文文章存入到字符串数组xx中,以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后把结果xx输出到文件OUT6DAT中。 例如:原文:You He Me I am a student 结果:Me He You student a am I 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 【函数】 #include #include #include #include char xx5080; int maxline=0;/*文章的总行数*/ int ReaaDat(void); void WriteDat(void); void StrOL(void) char*pl,*p2,t80; int i; for(i=0;ip1=xxi;t0=0; while(*p1)p1; while(p1=xxi) while(!isalpha(*p1)p1!=xxi)p1-; p2=p1; while( (1) )p1-; if(p1=xxi) if(isalpha(*p1)p1-; else if(!isalpha(*(p1+1)break; p2; (2) ; strcat(t,p1+1); strcat(t, ); strcpy(xxi,t); void main() if( (3) ) printf(数据文件indat不能打开!n007); return; StrOL(); writeDat(); getch(); int ReadDat(void) FILE*fp; int i=0; char*p; if(fp=fopen(e:aindat,r)=NULL)return 1; while(fgets(xxi,80,fp)!=NULL) p=strchr(xxi,n); if(p)*p=0; i; maxline= (4) fclose(fp); return 0; void WriteDat(void) FILE*fp; int i; fp=fopen(e:aout6dat,w); for(i=0;idata(4) ;小于查找左子树 else if(tree-data(5) ;大于查找左子树 else return tree; return tree; 【答案】 (1)p=p-left (2)p=p-right (3)return P (4)return SearchSortTree(tree-left) (5)return SearchSortTree(tree-right)试题三 假设以带头结点的单循环链表作非递减有序线性表的存储结构。函数deleteklist(LinkList head)的功能是删除表中所有数值相同的多余元素,并释放结点空间。 例如:链表初始元素为: (7,10,10,21,30,42,42,42,51,70) 经算法操作后变为: (7,10,21,30,42,51,70) 【函数1】 void deleteklist(LinkList head) LinkNode*p,*q; p=head-next; while(p!=head) q=p-next; while( (1) ) (2) ; free(q); q=p-next; p=p-next; 【说明2】 已知一棵完全二叉树存放于一个一维数组Tn中,Tn中存放的是各结点的值。下面的程 序的功能是:从T0开始顺序读出各结点的值,建立该二叉树的二叉链表表示。 【函数2】 #include typedef struct node int data; stuct node leftChild,rightchild; BintreeNode; typedef BintreeNode*BinaryTree; void ConstrncTree(int T,int n,int i,BintreeNode*ptr) if(i=n) (3) ;置根指针为空 else ptr=-(BTNode*)malloc(sizeof(BTNode) ptr-data=Ti; ConstrucTree(T,n,2*i+1, (4) ); ConstrucTree(T,n, (5) ,ptr-rightchild); main(void) /*根据顺序存储结构建立二叉链表* Binarytree bitree;int n; printf(please enter the number of node:ns;n); int*A=(int*)malloc(n*sizeof(int); for(int i=0;in;i)scanf(d,A+i);/*从键盘输入结点值*/ for(int i=0;in;i)printf(d,Ai); ConstructTree(A,n,0,bitree); 答案: (1)q!=head &q-data=p-data (2)p-next=q-next (3)ptr=NULL (4)ptr-leftchild (5)2*i+2试题四 阅读下列函数说明和C函数,将应填入 n 处的字句写在答题纸的对应栏内。 函数2.1说明 函数strcat(char s, char t)的功能是:将字符串t复制连接字符串s的尾部,并返回新 字符串的首地址作为函数值。例如:若s=“abcd”,t=“efg”,则新字符串应该是“abcdefg”。 函数2.1 char *strcat(char s, char t) char *p; p = s + strlen(s)-1 while( (1) ) (2) ; *p = 0; return s; 函数2.2说明 函数f(char *str, char del)的功能是:将非空字符串str中的指定字符del删除,形成一个 新字符串仍存放在str所指内存单元中。 例如若str的值为“33123333435”,del的值为3,调用此函数后,新字符串为:“1245”。 函数2.2 void f(char *str, char del) int i, j, len; len=strlen(str); i=j=0; while(iif ( (3) ) (4) = stri; i+; (5) ; 试题五 阅读以下说明和C代码,将应填入 n 处的字句写在答题纸的对应栏内。 说明 下面程序中函数fun的功能是:在含有10 个元素的s数组中查找最大数,及最大数所在位置 (即,下标值),最大数可能不止一个。最大数作为函数值返回,最大数的个数通过指针变量n传回,所在位置由数组pos传回。 例如: 若输入 2 8 5 7 8 4 5 3 2 8 则应输出: The max: 8 Total: 3 /最大数出现次数 The positions: 1 4 9 #include #define M 10 int fun(int *a, int *n, int pos) int i, k, max=-32767; (1) for(i=0; iif( (2) ) max=ai; for(i=0; iif( (3) ) posk+=i; *n=k; return max; main() int aM, posM, i=0, j, n; printf(Enter 10 number :); for(i=0; ij=fun( (5) ); printf(The max: %dn, j); printf(Total: %d,n); printf(The position:); for(i=0; iprintf(n); 2010年软考程序员考试(下午题)预测模拟试题及答案(2)下午试卷 (考试时间 14:0016:30 共150分钟) 本试卷共8道题,考生需解答5道题,其中试题1试题3是必答题,试题4和试题5两题任选1道题,试题6至试题8三题任选1道解答。对于任选题,如果解答的试题数超过1道,则题号小的1道题解答有效。每题15分,满分75分。 试题一(15分,每空3分) 阅读以下说明和流程图,将应填入_(n)_处的字句写在答题纸的对应栏内。 说明 已知头指针分别为La和Lb的有序单链表,其数据元素都是按值非递减排列。现要归并La和Lb得到单链表Lc,使得Lc中的元素按值非递减排列。程序流程图如下所示。 试题二(15分,每空3分) 阅读以下函数说明和C语言函数,将应填入_(n)_处的字句写在答题纸的对应栏内。 程序2.1说明 已知一个排好序的数组,现输入一个数,要求按原来的顺序规律,将它插入到数组中。 程序2.1 #include #define N 100 void main() float aN=1,x; int i,p; printf(输入已经排好序的数列:); for( i=0; i scanf(%f,&ai); printf(输入要插入的数:); scanf(%f,&x); for( i=0,p=N; i if(x _(1)_ break; for( i=N-1; i=p; i- ) _(2)_ _(3)_ for( i=0; i1 对于给定的n,另外有一个由n个元素组成的数列xn,该数列中各元素的值为: xi=ai/ai+1 i=0,1,n 现要求对xn中的元素按升序进行排序,然后以分数形式输出排序后的xn。例如n=5时, 排序前的xn=1/1,1/2,2/3,3/5,5/8,排序后的xn=1/2,3/5,5/8,2/3,1/1。程序中函数 make()首先生成排序前的xn,然后调用函数sort()进行排序,最后输出所求结果。 程序 #include #include #include struct fact long m,n; ; void sort(int n,struct fact *p) int a; long s,t,u,v; struct fact *q,*end; for(end=p+(n-1),a=1;a;end-) for(a=0,q=p;q s=q-m; t=q-n; u=(q+1)-m; v=(q+1)-n; if(_(1)_) q-m=u; _(2)_ _(3)_ (q+1)-n=t; a=1; void make(int n) int i; long a,b,c; struct fact *x,*y; x=(struct fact *)malloc(sizeof(struct fact)*n); x-m=1; x-n=1; for( a=1,b=1,i=2;im=a; (x+(i-1)-n=b; _(5)_ printf(x%d=/,n,x-m,x-n); for(y=x+1;yX+N;Y+) printf(,/,y-m,y-n); printf(n); free(x); void main() int n; printf(input n:); scanf(%d,&n); make(n); 试题四(15分,每空3分) 阅读以下说明和C语言程序,将应填入_(n)_处的字句写在答题纸的对应栏内。 说明 本程序对某电码文(原文)进行加密形成密码文,其加密算法如下: 假定原文为C1,C2,C3,Cn加密后形成的密文为S1,S2,S3,Sn,首先读入正整数 key(key1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如下图所示: 加密时从 S1 位置起顺时针计数,当数到第 key 个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置;接着从环中下一个字符位置起继续计数,当再次数到第 key 个字符位置时,将原文中字符 C2 放入其中,并从环中除去该字符位置;依次类推,直至 n 个原文字符全部放入密文环中。由此产生的 S1S2.Sn 即为原文的密文。 例如,当 Key=3 时,原文:this is a decoding system 的密文为: aotgnhedi ys d imietsnc ss 当Key=4时,该原文的密文为: ssdtyd htegiasiscnm e ion #include #include typedef struct node char ch; struct node *forward; /* Link to next node. */ struct node *backward;/* Link to previous node.*/ CODE; int strlen(char *s) int len = 0; while (*s+ != 0 ) len+; return( len ); char *decode(char *old,int key) char *New; int length,count,i; CODE *loop,*p; length=strlen(old); loop=(CODE *) malloc( length*sizeof(CODE) ); for ( i = 1;i loopi.forward = &loopi+1; _(1)_ loop0.backward = &looplength-1; loop0.forward = &loop1; looplength-1.forward = loop; _(2)_ for ( p = loop,i = 0;i for ( count = 1;count p= p-forward ; _(3)_ p-backward-forward = p-forward ; p-forward-backward = p-backward ; _(4)_ New = ( char *)malloc( ( length+1 ) *sizeof(char) ); for ( i=0;i _(5)_ Newlength=0; return (New); void main() char old256; int key , num=0; printf(nPlease input the telegraph: n); while ( num1 ): ); scanf(%d,&key); while ( key 0 _(3)_ j = j - 1 Loop Next End Sub Private Function search(str1 As String, str2 As String) As Integer Dim int1 As Integer, int2 As Integer int1 = 1 Do int1 = _(4)_ If int1 = 0 Then Exit Do int2 = int2 + 1 int1 = int1 + 1 Loop search = _(5)_ End Function (试题六(15分,每空3分) 阅读以下说明和C+程序,将应填入_(n)_处的字句写在答题纸的对应栏内。 说明 字符串在程序设计中扮演着重要角色。现需要设计字符串基类string,包含设置字符串、 返回字符串长度及内容等功能。另有一个具有编辑功能的串类edit_string,派生于string,在其 中设置一个光标,使其能支持在光标处的插入、删除操作。 程序 #include #include #include class string int length; char *data; public: int get_length() return length; char *get_data() return data; string() delete data; int set_data( int in_length, char *in_data); int set_data( char *data ); void print() coutget_length(); pt=new_data-get_data(); cp=this-get_data(); m=this-get_length(); char *news = new charn+m+1; for( int i=0; i newsi=cpi; k=i; for( int j=0; j newsi=ptj; cursor=i; for( j=k; j _(3)_ newsi=0; _(4)_ delete news; return cursor; void edit_string:delete_data( int num ) int m; char *cp; cp=this-get_data(); m=this-get_length(); for( int i=cursor; i _(5)_ cpi=0; 试题七(15分,每空3分) 阅读以下说明及Visual Basic 程序代码,将应填入_(n)_处的字句写在答题纸的对应栏内。 说明 设窗体上有两个文本框和一个按钮,在第一个文本框text1中输入一个全部由“0”和“1” 组成的字符串,单击按钮,在第二个文本框text2中显示出给定字符串中连续的0和连续的1中连续字符数目的最大值。如果输入的字符串中有不是“0”和“1”的字符,使用消息框显示错误信息。 运行界面如下: 程序 Private Sub Command1_Click() Dim strSource As String Dim str1 As String Dim result As Integer Dim int1 As Integer, num As Integer strSource = Text1.Text If Len(strSource) = 0 Then MsgBox 请在文本框中输入由0和1组成的字符串 Exit Sub End If F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论