首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下函数说明和C代码,回答问题 [说明] 对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShe
阅读以下函数说明和C代码,回答问题 [说明] 对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShe
admin
2012-02-20
33
问题
阅读以下函数说明和C代码,回答问题
[说明]
对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器Iterator实现。图7-1显示了各个类间的关系。以下是JAVA语言实现,能够正确编译通过。
[图7-1]
[C代码]
typedef bool(*fun1)();
typedef (1) (*fun2)();
const int BOOK_MAX = 10;//最大书本数
struct Book{
char name30;
};
struct BookShelf{//书架
struct Book books[BOOK MAX];
int index;//书架上最后一本书的下标加1,即下一本书的下标,如0表示有0本书
};
Struct Book* getBookAt(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)
{
if(BS->index < BOOK_MAX){
BS->books[BS->index++] = book;
return true;
}
return false;
}
int getLength(struct BookShelf *bookShelf)
{
return bookShelf->index;
}
struct Iterator{//迭代器
fun1 hasNext;//判断是否还有下一个元素
fun2 next;//取得下一个元素
};
struct BookshelfIteratorf{//书架迭代器
int index;
struet BookShelf* bookShelf;
}bookShelfIterator = {0, NULL};
bool BShasNext()//判断是否还有下一本书
{
if(bookShelfIterator.index
return true;
}else{
return false;
}
}
struct Book* BSnext()//取得下一本书,并将index加1,以便下一次正确访问
{
return getBookAt(bookShelfIterator.bookShelf,
(3) );
}
void main()
{
struct BookShelf bookShelf;
bookShelf.index = 0;
//将书籍上架,省略代码
//将bookShelf与bookShelfIterator相关联
bookShelfIterator.bookShelf = (4) ;
struct Iterator iterator;
iterator.hasNext = BShasNext;
iterator.next = BSnext;
struct Book* b;
while( (5) ){//遍历书架,输出书名
b=iterator.next();
printf("%s\n", b->name);
}
}
选项
答案
(1)struct Book* indexindex bookShelfIterator.index++ &bookShelf iterator.hasNext()
解析
是某个函数类型定义,先看空(2),根据注释,此处应填下标index“不大于当前书架上的最后一本书对应的下标”,而结构体BookShelf中的字段index是表示“书架上最后一本书的下标加1,即下一本书的下标,如0表示有0本书”,故空(2)应填:indexindex。
继续看空(3),根据注释函数BSnext()的功能是“取得下一本书,并将index加1,以便下一次正确访问”,而函数getBookAt(BS,index)是“从书架BS上取得下标为index的书”,因此空(3)应填欲取书的下标,应为bookShelfIterator.index,故空(3)应填bookShelflterator.index++。
书架迭代器BookShelflterator中的字段bookShelf是struct BookShelf*类型的,因此空(4)应填&bookshelf,注意取地址符&。
while循环是遍历书架,输出书名,循环条件是“还有下一记录(书)”,故空(5)应填iterator.hasNext()。
现在再来看空(1),由迭代器Iterator中字段next的定义:fun2 next;以及赋值语句iterator.next=BSnext;可得,fun2应该定义了与BSnext函数同参数的函数指针,函数指针的定义原型为:函数返回类型函数指针变量名(参数列表),又知函数BSnext的定义为struct Book*BSnext(),故空(1)应填struct Book*。
转载请注明原文地址:https://kaotiyun.com/show/XlDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
计算机系统中,CPU对主存的访问方式属于________________。
对于初始为空的栈S,入栈序列为a、b、c、d,且每个元素进栈、出栈各1次。若出栈序列的第一个元素为d,则合法的出栈序列为______。
软件内部/外部质量模型中,以下(66)不是功能性包括的子特性。
以下关于软件测试分类定义的叙述,不正确的是(42)。
下面关于漏洞扫描系统的叙述,错误的是(7)。
函数t()、f()的定义如下所示。若调用函数t()时传递给x的值为3,并且调用函数f()时,第一个参数采用传值(call by value)方式,第二个参数采用传引用(call by reference)方式,则函数t0的返回值为(33).
下面为C语言程序,边界值问题可以定位在(45)。 int data(3), int i, for(i=1, i<=3, i++)data(i)=100
针对下列程序段,对于(A,B,C)的取值,以下(56)测试用例组合能够满足语句覆盖的要求。IF((A+10)=2OR(B-20)<3)THENC=0IF((A+30)=10AND(C-30)<0)THENB=30
下图是①设计模式的类图,该设计模式的目的是②,图中,Abstraction和RefinedAbstraction之间是③关系,Abstraction和Implementor之间是④关系。①处应填入?
随机试题
这个标志的含义是警告前方道路易滑,注意慢行。
简述责任成本与产品变动成本结合核算形式的做法。
以下有关计算机病毒的描述,不正确的是___________。
除专用合同条款另有约定外,因变更引起的价格调整约定有()。
甲公司的资质等级为二级,而某工程项目需要一级资质的承包商承建,于是甲公司就借用了乙公司的资质证书,承揽了该工程,后来因工程质量不合格而给发包人造成了重大损失。请问,赔偿责任应当由()承担。
注册会计师在确定审计工作底稿的格式、要素和范围时应考虑的因素中恰当的有()。
坚持对外开放的基本国策必须坚持“引进来”和“走出去”同时并举、相互促进的开放战略,不断提高对外开放水平,具体有()
Thewaysinwhichsocietiesaddressenvironmentalissuesareinthemidstofaprofoundtransformation.Boththeextentofthis
Comeandseemewhenever______.
BostonWeeklyOutlookMondayTuesdayWednesdaySunnyPartlyCloudyLightR
最新回复
(
0
)