软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷31

0
收藏   分享
  • 卷面总分:75分
  • 试卷类型:模拟考试
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:18次
  • 作答时间:150分钟
试卷简介
试卷预览
1

阅读下列C程序和程序说明,将应填入(n)处的字句写在对应栏内。

 【说明】本程序从正文文件text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件word.out中。

 程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然后中序遍历该二叉树,将遍历经过的二叉树上的结点的内容输出。

 #include <stdio.h>

 #include <malloc.h>

 #include <ctype.h>

 #include <string.h>

 #define INF  "text.in"

 #define OUTF  "wotd.out"

 typedef struct treenode{

    char *word;

    int count;

    struct treenode *left,*right;

 }BNODE

 int getword (FILE *fpt,char *word)

 { char c;

   c=fgetc (fpt);

   if ( c=EOF)

      return 0;

   while(!(tolower(c)>='a' && tolower(c)<='z'))

   { c=fgetc (fpt);

    if ( c==EOF)

       return 0;

   } /*跳过单词间的所有非字母字符*/

   while (tolower (c)>='a' && tolower (c)<='z')

   { *word++=c;

    c=fgetc (fpt);

   }

   *word='\0';

   return 1;

 }

 void binary_tree(BNODE **t,char *word)

 {  BNODE *ptr,*p;int compres;

    P=NULL; (1);

    while (ptr) /*寻找插入位置*/

    { compres=strcmp (word, (2) );/*保存当前比较结果*/

     if (!compres)

     {  (3);return;}

     else

     {  (4);

       ptr=compres>0? ptr->right:ptr->left;

     }

   }

   ptr= (BNODE*) malloc (sizeof (BNODE)) ;

   ptr->left = ptr->right = NULL;

   ptr->word= (char*) malloc (strlen (word) +1) ;

   strcpy (ptr->word, word);

   ptr->count - 1;

   if (p==NULL)

      (5);

   else if (compres > 0)

     p->right = ptr;

   else

     p->left = ptr;

 }

 void midorder (FILE **fpt, BNODE *t)

 { if (t==NULL)

      return;

   midorder (fpt, t->left);

   fprintf (fpt, "%s %d\n", t->word, t->count)

   midorder (fpt, t->right);

 }

 void main()

 { FILE  *fpt; char word[40];

   BNODE *root=NULL;

   if ((fpt=fopen (INF,"r")) ==NULL)

   {  printf ("Can't open file %s\n", INF )

      return;

   }

   while (getword (fpt, word) ==1 )

      binary_tree (&root, word );

   fclose (fpt);

   fpt = fopen (OUTF, "w");

   if (fpt==NULL)

   {  printf ("Can't open file %s\n", OUTF)

      return;

   }

   midorder (fpt, root);

   fclose(fpt);

 }

1

阅读以下说明和流程图,回答问题1至问题3,将答案写在对应栏内。

  【说明】

 流程图描述了某高校图书订购与编目系统的处理流程。全校的图书典藏在校图书馆和各系的资料室中。学校每年分若干批向出版单位订购图书,同一批订购的图书将陆续邮寄到学校。出版单位在寄出图书的同时附上到书清单和发票,发票上仅给出一份到书清单中书的总册数和总金额。学校收到图书和发票后,先参照订购单验收,然后进行编目,并把有关信息存放在书种文件、书名文件、作者文件和复本文件中,以供读者检索。

 书种文件记录了每种书的有关信息。所谓一种书是指同一作者、同一书名、同一出版单位和同一出版年份出版的书。例如,2004年张明在科技出版社出版了《软件工程》(印数8000册)和《数据库基础》(印数5000册),则张明在2004年出版了两种书。在全校的藏书中,如果一种书只有一册,则该书的信息存放在书种文件中:如果一种书有多册,则其中一册书的信息存放在书种文件中,其余的书作为复本将信息存放在复本文件中。复本文件的结构与书种文件的结构相同,每种书都有一个书号,书号唯一地标识了一种书。在书库中,每册书有一个登录号,登录号唯一地标识了一册书。此外,为了图书检索的方便,将图书按学科分类,分类号用来标识不同的学科领域。

 各类单据和文件的结构如下所示。

 订购单:订购批号、书名、作者名、出版单位、出版年份、单价、订购册数、订购部门代码、订购日期。

 到书清单:订购批号、书名、作者名、出版单位、出版年份、单价、册数。

 发票:订购批号、发票号、总册数、总金额。

 书种文件:分类号、登录号、书名代码、作者代码、出版单位、出版年份、单价、复本标志、典藏部门代码、借出标志。

 其中,复本标志用来指示该种书在书库中有没有复本:对于书名相同的若干种书,书名代码是相同的。

 书名文件:书名代码、书名。

 作者文件:作者代码、作者名。

 【问题1】

 指出验收文件至少应由哪些数据项组成。

 【问题2】

 由于处理5和处理6的分类,可能导致分类后的文件中一张发票无法找到与它对应的那些书,从而当一组发票的金额之和与一组到书清单中的书价之和不等时,无法知道是哪一张发票和哪一份清单不一致。如果仍使用原流程图,那么当到书清单文件的结构做何改动后,能找出不一致的发票和相应的书目。

  

 【问题3】

 若在书种文件中增加数据项“书号”,则如何重新设计复本文件的结构,使数据冗余最小。