《面向对象程序设计》综合复习题集(杨永斌整理) 下载本文

{

int low=0, high=N-1; //定义并初始化区间下界和上界变量 int mid; //定义保存中点元素下标的变量 while(low<=high) { mid=___(1)___;

if(x==a[mid]) ___(2)___;

else if(x

return -1; }

(1) (2) (3)

16. 用插入排序方法对table指针数组中size个指针所指向的字符串进行按升序排序的算法。

void sort(char *table[], int size){ for(int i=1,___(1)___; i++){ char *p=table[i];

for(int j=i-1; j>=0 ; j--)

if(strcmp(p,table[j])<0) ___(2)___; else break;

table[j+1]=___(3)___; } }

(1) (2) (3)

17. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序相同。

void f5(NODE*& L, int table[], int n) {

if(n<=0) {L=NULL; return;}

L=new NODE; //生成附加的头结点 int i=0; NODE* p=L;

while(___(1)___) {

p=p->next=___(2)___; p->data=___(3)___; i++; }

p->next=NULL; //把最后一个结点的指针域置空 p=L;

L=L->next; //使L指向链表的第一个带值的结点 delete p; }

(1) (2) (3)

18. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序正好相反。

void f6(NODE*& L, int table[], int n) {

L=NULL;

if(n<=0) return; int i=0; NODE* p;

while(___(1)___) { p=new NODE;

p->data=___(2)___; p->next=L; ___(3)___; i++; } }

(1) (2) (3)

19. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法是依次显示输出以L为表头指针的链表中各结点的值。 void f7(NODE* L) {

for(___(1)___; p!=NULL; ___(2)___) cout<<___(3)___ <<' '; cout<

(1) (2) (3)

20. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法是把以L为表头指针的链表中各结点依次按相反次序链接并返回新链表的表头指针。 NODE* f8(NODE* L) {

if(L==NULL) return NULL; NODE *p=NULL, *q=L, *t; while(q!=NULL) { t=q;

q=___(1)___;

t->next=___(2)___; p=t; }

___(3)___; }

(1) (2) (3)

21. 已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符[ ]要对下标是否越界进行检查。 class ARRAY{

int *v; //指向存放数组数据的空间 int s; //数组大小 public:

ARRAY(int a[], int n); ~ ARRAY(){delete []v;} int size(){ return s;} int& operator[](int n); };

___(1)___ operator[](int n) //[ ]的运算符成员函数定义 {

if(n<0 || ___(2)___) {cerr<<\下标越界!\ return ___(3)___; }

(1) (2) (3)

22. 已知一维数组类ARRAY的定义如下,构造函数的作用是把参数n的值赋给s,给v动态分配长度为n的数组空间,接着利用数组参数a初始化v所指向的数组。 class ARRAY{

int *v; //指向存放数组数据的空间 int s; //数组大小 public:

ARRAY(int a[], int n); ~ ARRAY(){delete []v;} int size(){ return s;} int& operator[](int n); };

___(1)___ ARRAY(int a[], int n) {

if(n<=0) {v=NULL;s=0;return;} s=n;

v=___(2)___;

for(int i=0; i

(1) (2) (3)

23. 下面是一维数组类ARRAY的定义,ARRAY与普通一维数组区别是:(a)用()而不是[]进行下标访问,(2)下标从1而不是从0开始,(c)要对下标是否越界进行检查。 class ARRAY{

int *v; //指向存放数组数据的空间 int s; //数组大小 public:

ARRAY(int a[], int n); ~ ARRAY(){delete []v;} int size(){ return s;} int& operator()(int n); }; ___(1)___ operator()(int n) { // ()的运算符函数定义

if(___(2)___) {cerr<<\下标越界!\ return ___(3)___; }

(1) (2) (3)

24. 已知一个类的定义如下: #include class AA { int a[10]; int n; public:

void SetA(int aa[], int nn); //用数组aa初始化数据成员a, //用nn初始化数据成员n int MaxA(); //从数组a中前n个元素中查找最大值

void SortA(); //采用选择排序的方法对数组a中前n个元素 //进行从小到大排序

void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序 void PrintA(); //依次输出数组a中的前n个元素 };

该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。 int ____(1)_____ {

int x=a[0];

for(int i=1; ix) ___(2)___; ___(3)___; }

(1) (2) (3)

25. 已知一个类的定义如下: #include class AA { int a[10]; int n; public:

void SetA(int aa[], int nn); //用数组aa初始化数据成员a, //用nn初始化数据成员n int MaxA(); //从数组a中前n个元素中查找最大值

void SortA(); //采用选择排序的方法对数组a中前n个元素

//进行从小到大排序

void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序 void PrintA(); //依次输出数组a中的前n个元素 };

void AA::SortA() {

int i,j;

for(i=0; ___(1)___; i++) { int x=a[i], k=i; for(j=i+1; j

(1) (2) (3)

26. 已知一个类的定义如下: #include class AA { int a[10]; int n; public:

void SetA(int aa[], int nn); //用数组aa初始化数据成员a, //用nn初始化数据成员n int MaxA(); //从数组a中前n个元素中查找最大值

void SortA(); //采用选择排序的方法对数组a中前n个元素 //进行从小到大排序

void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序 void PrintA(); //依次输出数组a中的前n个元素 };

void ___(1)___ {

int i,j;

for(i=1; i

for(j=i-1; j>=0; j--) if(x

(1) (2) (3)