阅读以下函数说明和c代码,将应填入(n)处的字句写在答题纸对应栏内。 【说明】 对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Boo

admin2014-10-11  32

问题 阅读以下函数说明和c代码,将应填入(n)处的字句写在答题纸对应栏内。
【说明】
对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器Iterator实现。图7—1显示了各个类间的关系。以下是JAVA语言实现,能够正确编译通过。
【图7一1】
【C代码】
typedef bool  (*fun1)();
typedef  (1)    (*fun2)();
constint Book_MAX=10;//最大书本数
struct  Book{
char name[3 0];
};
struct Bookshelf(//书架
    struct Book books[BooK—MAX];
    intindex;//书架上最后一本书的下标加1,即下一本书的下标,如0表示有0本书
};
struct Book*getB00kAt(struct BookShelf  *BS,  int  index)
//从书架BS上取得下标为index的书
//只有当下标大于等于0且不大于当前书架上的最后一本书对应的下标,才取书成功;
//否则失败,返同NuLL
{
    if(index>:  0&&  (2)  ){
    return&BS一>books[index];
    }
    return NULL:
}
bool  appendBook(struct BookShelf *BS,  struct  Book book)
{
    i f(BS一>index    BS一>books[BS一>index++]  =book;
    return true:
    }
    return  false:
  }
  int getLength(struct BookShelf*bookShelf)
  {
    return bookShelf一>index:
  }
  structIterator{//迭代器
    fun1 hasNext;//判断是否还有下一个元素
    fun2 next;//取得下一个元素
  };
  struct BookshelfIterator(//书架迭代器
    intindex:
    struct  BookShelf*bookShelf:
)bookShelfIterator={0,NULL);
bool BshasNext()//判断是否还有下一本书
{
    i f(bookShel fIterator.index
        return true:
    }else{
    return false;
    }
}
struct Book*Bsnext()//取得下一本书,并将index加1,以便下一次正确访问
{
    return getBookAt(bookShel fIterdtor.bookShel f,
    (3)  };
}
void main()
{
    structBookShel f bookShel f;
    bookShelf.index=0:
    //将书籍上架,省略代码
    //将bookshelf与booksheInterat。r相关联
    bookShelfIterator.bookShelf=  (4)  ;
    struct  Iterator iterator;
    iterator.hasNext=  BShasNext;
    iterator.next  =BSnext:
    struct Book*b;
    while((5))(//遍历书架,输出书名
    b=  iterat0r.next();
    prin七f(“%s\n”,  b一>name);
}

选项

答案(1)structBook* (2)indexindex (3)bookShelflterator.index++ (4)&bookShelf (5)iterator.hasNext()

解析 空(1)是某个函数类型定义,先看空(2),根据注释,此处应填下标index“不大于当前书架上的最后一本书对应的下标”,而结构体BookShelf~的字段index是表示“书架上最后一本书的下标加1,即下一本书的下标,如0表示有0本书”,故空(2)应填:indexindex。继续看空(3),根据注释函数BSnext0的功能是“取得下一本书,并将index加1,以便下一次正确访问”,而函数getBookAt(BS,index)是“从书架BS上取得下标为index的书”,因此空(3)应填欲取书的下标,应为bookShelfIterator.index,故空(3)应填bookShelflterator.index++。书架迭代器BookShelflteratorqh的字段bookShelf是structBookShelf*类型的,因此空(4)应填&bookshelf,注意取地址符&。while循环是遍历书架,输出书名,循环条件是“还有下一记录(书)”,故空(5)应填iterator.hasNext()。现在再来看空(1),由迭代器Iterator中字段next的定义:fun2next;以及赋值语句iterator.next=BSnext;可得,fun2应该定义了与BSnext函数同参数的函数指针,函数指针的定义原型为:函数返回类型函数指针变量名(参数列表),又知函数BSnext的定义为structBook*BSnext(),故空(1)应填structBook*。
转载请注明原文地址:https://kaotiyun.com/show/ZiDZ777K
0

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