中兴软创C++笔试

中兴软创C++笔试

姓名 ____________ 学校 ____________ 电话 ___________

一、填空

1.在类中必须声明成员函数可以写在类外。

2.如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是 引用 类型或 指针 类型。 3. 4.进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形参 个数 或 类型 必须不同。

5.通过一个函数。

6.函数的递归调用是指函数直接或间接地调用 7.拷贝构造函数的形参必须是

二、阅读下列程序,写出其运行时的输出结果

如果程序运行时会出现错误,请简要描述错误原因。 1.请在以下两题中任选一题,该题得分即为本小题得分。如两题都答,则取两题得分之平均值为本小题得分。 (1)程序:

#include #include class Base { private:

char msg[30]; protected: int n; public:

Base(char s[],int m=0):n(m) { strcpy(msg,s); }

void output(void)

{ cout

class Derived1:public Base

{ private: int n; public:

Derived1(int m=1):

Base(

{ n=m; }

void output(void) { cout

class Derived2:public Derived1 { private: int n;

public:

Derived2(int m=2):

Derived1(m-1)

{ n=m; }

void output(void) { cout

void main(void) {

Base B(

(2)程序:

#include class Samp {public:

void Setij(int a,int b){i=a,j=b;} ~Samp() { }

int GetMuti(){return i*j;}

cout

};

int main() {

Samp *p; p=new Samp[5]; int i; int j;

protected:

if(!p) { }

for(int j=0;j

p[j].Setij(j,j);

cout

}

for(int k=0;k

cout

delete[]p; return 0;

2.请在以下两题中任选一题,该题得分即为本小题得分。如两题都答,则取两题得分之平均值为本小题得分。 (1)程序:

#include #include class Vector {

public:

Vector(int s=100); int& Elem(int ndx); void Display(void); void Set(void); ~Vector(void); protected: int size; int *buffer;

};

Vector::Vector(int s) {

buffer=new int[size=s]; }

int& Vector::Elem(int ndx) {

if(ndx=size) {

cout

return buffer[ndx]; }

void Vector::Display(void) {

for(int j=0; j

void Vector::Set(void) {

for(int j=0; j

Elem(j)=j+1;

cout

}

Vector::~Vector(void) {

delete[] buffer; }

void main() {

Vector a(10); Vector b(a); a.Set(); b.Display(); }

(2)程序:

#include

class CAT

{

public:

CAT();

CAT(const &CAT); ~CAT();

int GetAge(){ return *itsAge; } void SetAge( int age ) { *itsAge=age; } protected: };

CAT::CAT() { }

itsAge=new int; *itsAge=5; int * itsAge;

CAT::~CAT() { }

void main() { CAT a;

cout

cout

cout

delete itsAge; itsAge=NULL;

三、阅读下列程序及说明和注释信息,在方框中填写适当的程序段,使程序完成指定的功能

程序功能说明:从键盘读入两个分别按由小到大次序排列的整数序列,每个序列10个整数,整数间以空白符分隔。用这两个序列分别构造两个单链表,每个链表有10个结点,结点的数据分别按由小到大次序排列。然后将两个链表合成为一个新的链表,新链表的结点数据仍然按由小到大次序排列。最后按次序输出合

并后新链表各结点的数据。

程序运行结果如下,带下划线部分表示输入内容,其余是输出内容:

1 3 5 7 9 11 13 15 17 19 2 4 6 8 10 12 14 16 18 20

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

#include #include

//类定义部分

template class Node {

private:

Node *next; //指向后继节点的指针 public:

T data; //数据域

Node (const T& item, Node* ptrnext = NULL); // 构造函数 void InsertAfter(Node *p); //在本节点之后插入一个同类节点p Node *DeleteAfter(void); //删除本节点的后继节点,返回其地址 Node *NextNode(void) const; // 获取后继节点的地址 };

template class LinkedList {

private:

Node *front, *rear; // 表头和表尾指针

Node *prevPtr, *currPtr; //记录表当前遍历位置的指针,由插入和删除操作更新 int size; // 表中的元素个数

int position; // 当前元素在表中的位置序号。由函数Reset使用 Node *GetNode(const T& item,Node *ptrNext=NULL);

// 生成新节点,数据域为item,指针域为ptrNext void FreeNode(Node *p); //释放节点

void CopyList(const LinkedList& L); // 将链表L 拷贝到当前表

//(假设当前表为空)。被拷贝构造函数、operator=调用

public:

LinkedList(void); // 构造函数

LinkedList(const LinkedList& L); //拷贝构造函数 ~LinkedList(void); // 析构函数

LinkedList& operator= (const LinkedList& L);//重载赋值运算符 int ListSize(void) const; //返回链表中元素个数(size) int ListEmpty(void) const; //size为0时返回TRUE,否则返回FALSE void Reset(int pos = 0); //将指针currPtr移动到序号为pos的节点, //prevPtr相应移动,position记录当前节点的序号 void Next(void); //使prevPtr和currPtr移动到下一个节点

int EndOfList(void) const; // currPtr等于NULL时返回TRUE, 否则返回FALSE int CurrentPosition(void) const; //返回数据成员position

void InsertFront(const T& item); //在表头插入一个数据域为item的节点 void InsertRear(const T& item); //在表尾添加一个数据域为item的节点 void InsertAt(const T& item); //在当前节点之前插入一个数据域为item的节点 void InsertAfter(const T& item); //在当前节点之后插入一个数据域为item的节点 T DeleteFront(void); //删除头节点,释放节点空间,更新prevPtr、currPtr和size void DeleteAt(void); //删除当前节点,释放节点空间,更新prevPtr、currPtr和size T& Data(void); // 返回对当前节点成员data的引用

void ClearList(void); // 清空链表:释放所有节点的内存空间。 };

//类实现部分略......

template

void MergeList(LinkedList* la, LinkedList* lb,LinkedList* lc) {

//合并链表la和lb,构成新链表lc。

}

void main(void) {

LinkedList la, lb, lc; int item, i; la.Reset();

lb.Reset();

MergeList(&la, &lb, &lc);//合并链表 lc.Reset();

cout


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn