无忧首页企业系统我的无忧
无忧服务:
兼职活动培训
娱乐交友:
交友社区资讯
全职实习:
实习暑假寒假
微信号:school51
扫一下,立即关注
加关注
在线支付,立省10元
下载新版APP
===大学生成长生活平台===

2010年软考程序员考试(下午题)模拟试题及答案(1)

2013-12-22来源/作者:管理员点击次数:396

  编辑特别推荐:

  2010年全国计算机软考程序员全真模拟试卷八套答案及解析

  计算机软考程序员级冲刺试题

  程序员之程序设计知识点置

  试题一
  【说明】
  该程序的功能是从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后把结果xx输出到文件OUT6.DAT中。
  例如:原文:You He Me
  I am a student.
  结果:Me He You
  student a am I
  原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
  【函数】
  #include
  #include
  #include
  #include
  char xx[50][80];
  int maxline=0;/*文章的总行数*/
  int ReaaDat(void);
  void WriteDat(void);
  void StrOL(void)
  {
  char*pl,*p2,t[80];
  int i;
  for(i=0;i  {p1=xx[i];t[0]=0;
  while(*p1)p1++;
  while(p1>=xx[i])
  {while(!isalpha(*p1)&&p1!=xx[i])p1--;
  p2=p1;
  while( (1) )p1--;
  if(p1==xx[i])
  if(isalpha(*p1))p1--;
  else if(!isalpha(*(p1+1)))break;
  p2++;
  (2) ;
  strcat(t,p1+1);
  strcat(t," ");
  }
  strcpy(xx[i],t);
  }
  }
  void main()
  {
  if( (3) ){
  printf("数据文件in.dat不能打开!\n\007");
  return;
  }
  StrOL();
  writeDat();
  getch();
  }
  int ReadDat(void)
  {
  FILE*fp;
  int i=0;
  char*p;
  if((fp=fopen("e:\a\in.dat","r"))==NULL)return 1;
  while(fgets(xx[i],80,fp)!=NULL){
  p=strchr(xx[i],′\n′);
  if(p)*p=0;
  i++;
  }
  maxline= (4)
  fclose(fp);
  return 0;
  }
  void WriteDat(void)
  {
  FILE*fp;
  int i;
  fp=fopen("e:\\a\\out6.dat","w");
  for(i=0;i< (5) ;i++){
  printf("%s\n",xx[i]);
  fprintf(fp,"%s\n",xx[i]);
  }
  fclose(fp);
  }
  【答案】
  (1)isalpha(*p1)&&p1!=xx[i]
  (2)*p2=0
  (3)ReadDat()
  (4)i
  (5)maxline

  试题二
  阅读下列说明和流程图,将应填入(n)的语句写在答题纸的对应栏内。
  【流程图说明】
  下面的流程(如图1所示)用N-S盒图形式描述了在一棵二叉树排序中查找元素的过程,节点有3个成员:data,left和right。其查找的方法是:首先与树的根节点的元素值进行比较:若相等则找到,返回此结点的地址;若要查找的元素小于根节点的元素值,则指针指向此结点的左子树,继续查找;若要查找的元素大于根节点的元素值,则指针指向此结点的右子树,继续查找。直到指针为空,表示此树中不存在所要查找的元素。
  【算法说明】
  【流程图】
  将上题的排序二叉树中查找元素的过程用递归的方法实现。其中NODE是自定义类型:
  typedef struct node{
  int data;
  struct node*left;
  struct node*right;
  }NODE;
  【算法】
  NODE*SearchSortTree(NODE*tree,int e)
  {
  if(tree!=NULL)
  {
  if(tree->data  (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】
  已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。下面的程
  序的功能是:从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。
  【函数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=T[i];
  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:\n%s";n);
  int*A=(int*)malloc(n*sizeof(int));
  for(int i=0;i<n;i++)scanf("%d,A+i);/*从键盘输入结点值*/
  for(int i=0;i<n;i++)printf("%d",A[i]);
  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 = ‘’;
  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(i  if ( (3) )
  (4) = str[i];
  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; i  if( (2) ) max=a[i];
  for(i=0; i  if( (3) ) pos[k++]=i;
  *n=k;
  return max;
  }
  main()
  { int a[M], pos[M], i=0, j, n;
  printf("Enter 10 number :");
  for(i=0; i  j=fun( (5) );
  printf("The max: %dn", j);
  printf("Total: %d",n);
  printf("The position:");
  for(i=0; i  printf("n");
  }



相关阅读



关于我们 | 联系我们 | 用户指南 | 网站地图 | 意见建议 | 会员注册 | 用户协议 | 隐私政策