1、2004年专业基础课试题及参考答案1(10分)(1) 以n、ai(i=0,1, ,n)、x0作为输入,为了进行一元n次多项式Pn(x)=a0xn+a1xn-1+a2xn-2+an-1x+an在x0点的值Pn(x0)的计算,请给出你认为效率最好的算法。参考答案:sum = a0;for(int i=1;i= S.stacksize)S.base = (SElemType *)realloc(S.base,(S.stacksize + STACK_INCREMENT)*sizeof(SElemType);if(!S.base) return ERROR;S.top = S.base + S.sta
2、cksize;S.stacksize += STACK_INCREMENT;*S.top = e;S.top+;return OK;if(S.top = S.base) return ERROR;S.top -;e = *S.top;return OK;SqStack S;InitStack(S);PosType curpos = start;int curStep = 1;doif(Pass(maze,curpos)/如果curpos通道块可以通过(没有走过此通道块,也不是墙壁)/标记已经走过mazecurpos.x * MAZEWIDTH + curpos.y = PASSED;SElem
3、Type e; e.ord = curStep;e.seat.x = curpos.x;e.seat.y = curpos.y;e.di = 1;Push(S,e);if(curpos.x = end.x & curpos.y = end.y)/到达迷宫出口int i = 0;while(!StackEmpty(S)i+;SElemType e;Pop(S,e);printf(%d, %d %dn,i,e.seat.x,e.seat.y);return true;/搜索东面的通道块curpos = NextPos(maze,curpos,1);curStep+;/if passelse/如果c
4、urpos通道块不可以通过(已经走过此通道块,或者是墙壁)if(!StackEmpty(S)SElemType e;Pop(S,e);/从栈中推出不能通过的通道块while(e.di = 4 & !StackEmpty(S) /标记不通mazee.seat.x * MAZEWIDTH + e.seat.y = NOT_THROUGH;Pop(S,e);/换下一个方向搜索if(e.di 4)e.di+;Push(S,e);curStep = e.ord + 1;curpos = NextPos(maze,e.seat,e.di);while(!StackEmpty(S);return false
5、;8(13分)简答以下有关C+语言的问题:(1) 比较类的三种继承方式public(公有继承)、protected(保护继承)和private(私有继承)之间的差别。参考答案:公有继承:基类的public(公有)和protected(保护)成员的访问属性在派生类中不变,而基类的private(私有)成员不可访问;私有继承:基类的public(公有)和protected(保护)成员都以private(私有)成员身份出现在派生类中,而基类的private(私有)成员不可访问;私有继承:基类的public(公有)和protected(保护)成员都以protected(保护)成员的身份出现在派生类中,
6、而基类的private(私有)成员不可访问。(2) 如果类A是类B的友元,类B是类C的友元,类D是类A的派生类,那么类B是类A的友元吗?类C是类A的友元吗?类D是类B的友元吗?简述理由。参考答案:类B不是类A的友元,友元关系不具有交换性;类C不是类A的友元,友元关系不具有传递性;类D不是类B的友元,友元关系不能被继承。(3) 什么叫多态性?C+支持多态的主要方式是什么?参考答案:多态性是指同样的消息被不同类型的对象接收时导致完全不同的行为。C+支持多态的主要方式是重载和虚函数。9(17分)编写一个C+程序,满足以下要求:(1) 定义一个Shape基类,在此基础上派生出名为Rectangle的矩
7、形类和名为Circle的圆形类,二者都有GetArea()函数计算对象的面积。由Rectangle类派生名为Square的正方形类。(2) Rectangle类有宽度和长度属性(其初值分别为2和3),Circle类有半径属性。(3) 在程序输出中:(a) 直接输出矩形的面积。(b) 输出宽度、长度分别为4和5的矩形的面积。(c) 输出半径为6的圆形的面积。(d) 输出边长为7的正方形的面积。参考答案:#include #define PI 3.14159class Shapepublic:Shape()Shape()virtual float GetArea()return -1;class
8、Circle:public Shapepublic:Circle(float radius):itsRadius(radius)Circle()float GetArea()return (float)PI*itsRadius*itsRadius;private:float itsRadius;class Rectangle:public Shapepublic:Rectangle();Rectangle(float len,float width):itsLength(len),itsWidth(width)Rectangle()float GetArea()return itsLength
9、*itsWidth;private:float itsWidth;float itsLength;Rectangle:Rectangle()itsWidth=2;itsLength=3;class Square:public Rectanglepublic:Square(float len);Square();Square:Square(float len):Rectangle(len,len)void main()Shape *sp;sp=new Rectangle();coutThe area of the rectangle is GetArea()endl;delete sp;sp=new Rectangle(4,5);coutThe area of the rectangle is GetArea()endl;delete sp;sp=new Circle(6);coutThe area of the circle is GetArea()endl;delete sp;sp=new Square(7);coutThe area of the square is GetArea()endl;delete sp;