阅读以下函数说明和C代码,将应填入(n)处的字句写在答题纸对应栏内。 【说明】 在某些系统中,存在非常复杂的对象,可以采用循序渐进的方式,进行组合将小对象组合成复杂的对象。以下实例展示了Builder(生成器)模式。该实例用来建立“文件”,文件内容包括:一

admin2014-10-11  34

问题 阅读以下函数说明和C代码,将应填入(n)处的字句写在答题纸对应栏内。
【说明】
在某些系统中,存在非常复杂的对象,可以采用循序渐进的方式,进行组合将小对象组合成复杂的对象。以下实例展示了Builder(生成器)模式。该实例用来建立“文件”,文件内容包括:一个标题、一串字符以及一些有项目符号的项目。Builder类规定组成文件的方法,Director类利用这个方法产生一份具体的文件。图7一1显示了各个类间的关系。
【图7—1】
以下是C语言实现,能够正确编译通过。
【C代码】
typedef void(1)(char*title);
typedef void(*fun2)(char items[1[10],int N);
typedef char*(*fun3)();
char buffer[500];
struct Builder(//构造器
    funl makeTitle;
    (2)makeString;
    fun2 makeItems;
    fun3 getResult;
    };
    struct Director{
    struct Buiider buiider;
    };
    char。construct((3)director)//构造文件
    {
    char items[2][10]=(”早安”,”午安”);
    director一>buiider.makeTitle(“Greeting”);
    director一>builder.makeString(“从早上到白天结束”);
    directot一>buiider.makeItems(items,2);
    director一>builder.makeString(“到了晚上”);
    strcpy(items[0],“晚安”);
    strcpy(items[1],“好梦”);
    directot一>buiider.makeItems(items,2);
    return director一>buiider.getResult();
    }
    void TXTmakeTitle(char*title)
    {
    strcat(buffer,“『”);
    Strcat(buffer,title);
    strcat(buffer,“』\n\n”);
    }
    void TXTmakeString(char*  str)
    {
    strcat(buffer,“■”);
    Strcat(burfer,str);
    Strcat(butter,  “\n\n”);
    )
    void TXTmakeItems(char items[][10],int N)//将items加入文件中
    {
    for(int i=0;i    Strcat(buffer,”.”);
    strcat(buffer,  (4));
    Strcat(buffer,“\n”);
    }
    Strcat(buffer,“\n”);
    }
    char*  TXTgetResult()
    {
    return buffer;
  }
  void main()
  {
    Director director;
    (5)  =‘\0’;//清空缓冲区,使目前缓冲区中的内容不影响新生成的文件
    director.buiider.makeTitle=TXTmakeTitle;
    director.buiider.makeString=TXTmakeTitle;
    director.bui ider.makeItems=TXTmakeItems;
    director.buiider.getResult  =TXTgetResult;
    char*result=construct(&director);
    printf(“%S\n”,result);
  }

选项

答案(1)*funl (2)funl (3)structDirector* (4)items[i1 (5)buffer[0]

解析 先看空(3),首先函数construct的形参director应该与Director结构体相关,再根据函数体中的引用方式“director一>builder.makeTitle(“Greeting”);可知director是一个指针,因此空(3)应填structDirector*。由语句“char*result=construct(&director);”也可进一步确认。函数TXTmakeItems(charitems[][10],intN)是将items加入文件中,因此语句strcat(buffer,(4);是将第i个items加入缓冲区buffer中,strcat函数的原型为:char*strcat(char*strDestination,constchar*strSource);。因此空(4)应填items。由注释可知语句“buffer[0]=(5)”是用来清除缓冲区的,其目的是使目前缓冲区中的内容不影响新生成的文件,就一个语句,事实上不可能清除缓冲区中的所有内容,但纵观生成文件,关键语句就是strcat,这样只要将缓冲区第一个单元的值置为“\0”(字符串结束标志),就能保证正确生成文件。故空(5)应填buffer[0]。
转载请注明原文地址:https://jikaoti.com/ti/NRi7FFFM
0

相关试题推荐
最新回复(0)