一起答

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

  • 卷面总分:130分
  • 浏览次数:0
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:1052次
  • 作答时间:150分钟
试卷简介
部分试题预览
  1. 阅读以下函数说明和C代码,回答问题

    [说明]

     在某些系统中,存在非常复杂的对象,可以采用循序渐进的方式,进行组合将小对象组合成复杂的对象。

     以下实例展示了Builder(生成器)模式。该实例用来建立“文件”,文件内容包括:一个标题、一串字符以及一些有项目符号的项目。Builder类规定组成文件的方法,Director类利用这个方法产生一份具体的文件。图7-1显示了各个类间的关系。

     [图7-1]

    以下是C语言实现,能够正确编译通过。

     [C代码]

     typedef void( (1) )(char *title);

     typedef void(*fun2)(char items[] [10], int N);

     typedef char* (*fun3)();

     char buffer[500];

     struct Builder{//构造器

     fun1 makeTitle;

      (2) makeString;

     fun2 makeItems;

     fun3 getResult;

     };

     struct Director{

     struct Builder builder;

     };

     char* construct( (3) director)//构造文件

     {

     char items[2][10] = {"早安", "午安"};

     director->builder.makeTitle("Greeting");

     director->builder.makeString("从早上到白天结束");

     director->builder.makeItems(items, 2);

     director->builder.makeString("到了晚上");

     strcpy(items[0], "晚安");

     strcpy(items[1], "好梦");

     director->builder.makeItems(items, 2);

     return director->builder.getResult();

     }

     void TXTmakeTitle(char* title)

     {

     strcat(buffer, "『");

     Strcat(buffer, title);

     strcat(buffer, "』\n\n");

     }

     void TXTmakeString(char* str)

     {

     strcat(buffer, "■");

     Strcat(buffer, str);

     strcat(buffer, "\n\n");

     }

     void TXTmakeItems(char items[] [10], int N)//将items加入文件中

     {

     for(int i = 0, i< N; i++){

     strcat(buffer, "·");

     strcat(buffer, (4) );

     strcat(buffer, "\n");

     }

     strcat(buffer, "\n");

     }

     char* TXTgetResult()

     {

     return buffer;

     }

     void main()

     {

     Director director;

      (5) = '\0';//清空缓冲区,使目前缓冲区中的内容不影响新生成的文件

     director.builder.makeTitle = TXTmakeTitle;

     director.builder.makeString = TXTmakeTitle;

     director.builder.makeItems = TXTmakeItems;

     director.builder.getResult = TXTgetResult;

     char* result = construct(&director);

     printf("%s\n", result);

     }

  2. 阅读下列函数说明和C++代码,回答问题

    [说明]

     在某些系统中,存在非常复杂的对象,可以采用循序渐进的方式进行组合,将小对象组合成复杂的大对象。

     以下实例展示了Builder(生成器)模式。该实例用来建立“文件”,文件内容包括:一个标题、一串字符以及一些有项目符号的项目。Builder类规定组成文件的方法,Director类利用这个方法产生一份具体的文件。图5-1显示了各个类间的关系。

     [图5-1]

    以下是C++语言实现,能够正确编译通过。

     [C++代码]

     class Builder{

     public:

     virtual void makeTitle(string title) = 0;

     virtual void makestring(string str) = 0;

     virtual void makeItems( (1) items) = 0;

     virtual string getResult() = 0;

     };

     class Director{

     private:

      (2) builder;

     public:

     Director(Builder *builder){

     this->builder = builder;

     }

     string construct(){

     vectoritems;

     items.push_back("早安"); items.push_back("午安");

     builder->makeTitle("Greeting");

     builder->makeString("从早上到白天结束");

     builder->makeItems(items);

     builder->makeString("到了晚上");

      (3) ;//清空items向量

     items.push_back("晚安"); items.push_back("好梦");

     builder->makeItems(items);

     return builder->getResult();

     }

     };

     class TextBuilder : public (4) {

     private:

     string buffer;

     public:

     TextBuilder(){

     buffer = " ";

     }

     void makeTitle(string title){

     buffer += "=======================================\n";

     buffer += "『" + title + "』\n";

     buffer += "\n";

     }

     void makeString(string str){

     buffer += "■" + str + "\n";

     buffer += "\n";

     }

     void makeItems(vectoritems){

     vector::iterator it;

     for(it = items.begin(); it != items.end(); it++){

     buffer += "." + *it + "\n";

     }

     buffer += "\n";

     }

     string getResult(){

     buffer += "========================\n";

     return buffer;

     }

     };

     int main()

     {

     Director *director = new Director(new TextBuilder());

     string result = (string)director-) (5) ;

     cout<  return 0;

     }

  3. 阅读以下说明和Java代码,回答问题

    [说明]

     在某些系统中,存在非常复杂的对象,可以采用循序渐进的方式进行组合将小对象组合,成复杂的对象。

     以下实例展示了Builder(生成器)模式。该实例用来建立“文件”,文件内容包括:一个标题、一串字符以及一些有项目符号的项目。Builder类规定组成文件的方法,Director类利用这个方法产生一份具体的文件。图6-1显示了各个类间的关系。

    以下是Java语言实现,能够正确编译通过。

     [Java代码]

     //Builder. java文件

     public (1) class Builder {

     public abstract void makeTitle(String title);

     public abstract void makeString(String str);

     public abstract void makeItems(String[] items);

     public abstract Object getResult();

     }

     //Director. java文件

     public class Director{

     private (2) builder;

     public Director(Builder builder){

     this. builder = builder;

     }

     public Object construct(){

     builder.makeTitle("Greeting");

     builder.makeString("从早上到白天结束");

     builder.makeItems(new String[]{"早安", "午安",});

     builder.makeString("到了晚上");

     builder.makeItems(new String[]("晚安", "好梦",});

     return builder.getResult();

     }

     }

     //TextBuilder.java文件

     public class TextBuilder (3) Builder{

     private StringBuffer buffer = new StringBuffer();

     public void makeTitle(String title){

     buffer.append("『" + title + "』"\n\n");

     }

     public void makeString(String str){

     buffer.append('■' + str + "\n\n ");

     }

     public void makeItems(String[] items){

     for(int i = 0; i< (4) ; i++){

     buffer.append('·' + items[i] + "\n");

     }

     buffer.append("\n");

     }

     public Object getResult(){

     return buffer.toString();

     }

     }

     //Main.java文件

     public class Main {

     public static void main(String[] args) {

     Director director = new Director(new TextBuilder());

     String result = (String)director. (5) ;

     System.out.println(result);

  4. 处理4对收款员月销售文件作何种操作。

  5. 阅读下列函数说明、图和C代码,回答问题

    [说明]

     假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:

     m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2]

     其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数、1表示负数。

     运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减情况。注意,不考虑溢出情况,即数组足够大。

     [函数]

     int cmp(int *LA, int *LB);

     /*比较长整数LA与LB的绝对值大小*/

     /*若LA绝对值较大返回正值,LA较小返回负值,相等则返回0*/

     int ADD (int *LA, int *LB, int *LC)

     /*计算长整数LA与LB的和,结果存储于LC中*/

     /*注意:正数与负数的和相当于正数与负数绝对值的差*/

     /*数据有误返回0,正常返回1*/

     {

     if(LA == NULL || LB == NULL || LC == NULL)return 0;

     int *pA, *pB, i, N, carry, flag;

     flag = LA[0] + LB[0];

     switch(flag){ /*根据参与运算的两个数的符号进行不同的操作*/

     case 0:

     case 2:

     Lc[0] = LA[0];/*LA与LB同号,结果符号与LA(LB)相同*/

     pA = LA;

     pB = LB;

      (1) ;

     break;

     case 1: /*LA与LB异号*/

     /*比较两者的绝对值大小,结果符号与较大者相同*/

     flag =  (2) ;

     if(flag >0){ /*LA较大*/

     LC[0] = LA[0];

     pA = LA;

     pB = LB;

     }

     else if(flag< 0)(/*LB较大*/

     LC[0] = LB[0];

     pA = LB;

     pB = LA;

     }

     else{/*LA与LB相等*/

     LC[0] = 0;

     LC[1] = 0;

     return 1;

     }

     flag = -1;

     break;

     default:

     return 0;

     break;

     }/*switch*/

     /*绝对值相加减*/

     /*注意对于减法pA指向较大数,pB指向较小数,不可能出现不够减情况*/

      (3) ;

     N = LA[1] >LB[1] ? LA[1] : LB[1];

     for(i = 0; i< N; i++){

     if(i >= pA[1]){/*LA计算完毕*/

     carry += flag * pB[i+2];

     }

     else if(i >= pB[1]){/*LB计算完毕*/

     carry += pA[i+2];

     }

     else{

     carry += pA[i+2] + flag * pB[i+2];

     }

     LC[i+2] = carry % 10;

     carry /= 10;

     if( (4) ){/*需要借位,针对减法*/

     LC[i+2] += 10;

     carry--;

     }

     }/*for*/

     if( (5) ){/*最高进位,针对加法*/

     LC[i+2] = carry;

     i++;

     }

     if(LC[i+1] == 0) i--; /*若最高位为零,针对减法*/

     LC[1] = i;

     return 1;

     };/*ADD*/

  6. 分别写出收款员日销售文件、商品文件、部门日销售汇总文件至少应包含哪些数据项。

  7. 若用Student表存储学生信息,Teacher表存储教师信息,Course表存储课程信息,Study表存储学生选修课程情况。教务处想要“查询2006年入学的计算机专业(CS)的学生中平均成绩在85分以上的学生信息”。请将以下SQL语句补充完整。注:用对应英文表示。

     SELECT * FROM student WHERE Smajor = "CS" AND Syear = "2006"

     AND (1) 

     (SELECT Sno FROM Study GROUP BY Sno

     HAVING (2) )

  8. “处理1”能检查出日销售数据中的哪些错误。

  9. 按照“有关模式名(属性,属性,…)”的格式,将此E-R图转换为5个关系模式,指出每个关系模式中的主码和外码,其中模式名根据需要取实体名或联系名。

  10. 根据题意,给出联系的属性。实体间的联系有“一对一”、“一对多”和“多对多”,指出各联系分别属于哪一种。