1、ly新标准C+程序设计教材1120章课后题答案新标准C+程序设计教材1120章课后题答案第11章:1简述结构化程序设计有什么不足,面向对象的程序如何改进这些不足. 答案: 结构化程序设计的缺点: (1)用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。 (2)用系统开发每个阶段的成果来进行控制,不适应事物变化的要求. (3)系统的开发周期长. 面向对象的程序设计如何改进这些不足: 面向对象程序设计技术汲取了结构忧程序设计中好的思想,并将这些思想与一些新的、强大的理念相结台,从而蛤程序设计工作提供了一种全新的方法。通常,在面向对象的程序设计风格中,会将一个问题分解为一些相互关
2、联的子集,每个子集内部都包含了相关的数据和函数.同时会以某种方式将这些子集分为不同等级,而一个对象就是已定义的某个类型的变量。 2以下说怯正确的是( )。 A.每个对象内部都有成员函数的实现代码 B.一个类的私有成员函数内部不能访问本类的私有成员变量 C。类的成员函数之间可以互相调用 D.编写一个类时,至少要编写一个成员函数 答案:C3以下对类A的定义正确的是( )。 Aclass A Bclass A private: int v; int v; A next; public: void Func() void Func() ; Cclass A D. class A int v; int
3、v; public: public: void Func(); A next; ; void Func() A::void Func() ; 答案:B4假设有以下类A: class A public: int func(int a) return a a; ; 以下程序段不正确的是( ). AA a; a。func(5); BA p = new A; pfunc(5); CA a; Ar =a ; r.func(5); DA a,b; if(a!=b) a.func(5); 答案:D5以下程序段不正确的是(A). Aint main() class A int v; A a; a.v= 3;
4、return 0; Bint main() class A public: int v; A p; ; A a; a。p=a; return 0; Cint main() class A public: int v; ; A * p = new A; p- v =4; delete p; return 0; D. im main() class A public: int v; A * p; ; A a: a. p = new A; delete a.p; return 0; 答案:A 6实现一个学生信息处理程序。输入:姓名,年龄,学号(整数).第一学年平均成绩 第二学年平均成绩,第三学年平均
5、成绩,第四学年平均成绩。输出:姓名,年龄,学号, 4年平均成绩。例如: 输入: Tom 18 7817 80 80 90 70 输出: Tom,18,7817,80 要求实现一个代表学生的类,并非所有成员变量都是私有的。 答案:include iostreamincludecstringincludecstdlib /#include age; / a = getchar(); cin。getline(num, 100, ); cin score1 score2 score3 score4; Student s(name, age, num, score1, score2, score3, s
6、core4); cout s.getName() ”, s.getAge() ,” s。getNum() ,” s。getAverage(); return 0;第12章1以下说法中正确的是( ).A 一个类一定会有无参构造函数B构造函数的返回值类型是voidC一个类只能定义一个析构函数,但可以定义多个构造函数D一个类只能定义一个构造函数,但可以定义多个析构函数答案:C2对于强过new运算符牛成的对象( )。A程程序结束时自动析构B执行delete操作时才能析构C在包含new语句的函数返回时自动析构D在执行delete操作时会析构,如果没有执行delete操作,则在程序结束时自动析构答案:D3
7、如果某函数的返回值是个对象,则该函数被调用时,返回的对象( )。A是通过复制构造函数初始化的B是通过无参构造函数初始化的C用哪个构造函数初始化取决于函数的return语句是怎么写的D不需要初始化答案:C4以下说法LE确的是( )。A在静态成员函数中可以调用同类的其他任何成员函数Bconst成员函数不能作用于非const对象C在静态成员函数中不能使用this指针D静态成员变量每个对象有各自的一份答案:C5以下关于this指针的说法中不正确的是( )。Aconst成员函数内部不可以使用this指针B成员函数内的this指针,指向成员函数所作用的对象C在构造函数内部可以使用this指针D在析构函数内
8、部可以使用this指针答案:A6请写出下面程序的输出结果.class CSample int x;public: CSample() coutC1endl; CSample(int n) x=n; coutC2,x=”nendl; ;int main() CSample array12; CSample array22=6,8; CSample array32=12; CSample *array4=new Csample3; Return 0;答案:C1C1C2,x=6C2,x=8;C2,x=12C1C1C1C17下面程序的输出结果是。include iostreamusing namesp
9、ace std;class Sample public: int v; Sample() Sample(int n) :v(n) ; Sample(const Sample x) v = 2 + x。v; ;Sample& PrintAndDouble(Sample o) cout o。v; o。v = 2 * o。v; return o;int main() Sample a(5); Sample b = a; Sample c = PrintAndDouble(b); cout endl; cout c。v endl; /cout hex c.v endl; Sample d; d = a
10、; cout d。v; return 0;答案:92058请写出下面程序的运行结果:4,6请填空:#includeiostreamusing namespace std;class A int val; public: A(int n) val=n; int GetVal() return val; ;class B:public A private: int val; public: B(int n):_ ; int GetVal() return val; ;int main() B b1(2); coutb1。GetVal(),b1.A::GetVal()n”; return 0; 答案
11、:Val(4),A(6)9下面程序的输出结果是05请填空:includeiostreamusing namespace std;class A public: int val; A(_) val=n; _ GetObj() return _; ;int main() A a; couta.valendl; a.GetObj()=5; couta.valendl;答案:int n=0A*this10下面程序的输出结果是:10请补充Sample类的成员函数,不能增加成员变量#includev = 2 obj。v; ;;int main() Sample a(5); Sample b=a; cout
12、v=2*obj。v;11.下面程序的输出结构是:5,55,5请填空:#includeiostreamusing namespace std;class Base public: int k; Base(int n):k(n) ; class Big public: int v; Base b; Big _ ; Big_ ; ;int main() Big a1(5); Big a2=a1; couta1。v”,”a1.b。kendl; couta2。v”,”a2.b.kendl; return 0;答案:(int n):v(n),b(n)(Big x):v(x.v),b(x.b。k)12完成附
13、录“魔静世界大作业”中提到的第一阶段作业(省略)第13章1如果将运算符“”重载为某个类的成员运算符(也即成员函数),则该成员函数的参数个数是( )。A0个 B 。 1个 C . 2个 D3个答案:B 2如果将运算符“*”重载为菜个类的成员运算符(也即成员函数),则该成员函数的参数个数是( )。A0个 B . 1个 C 。 2个 D . 0个或1个均可答案:D3下面程序的输出是 3+4i 5+6i请补充Complex类的成员函数,不能加成员变量。#includeiostreamincludecstringusing namespace std;class Complexprivate: doub
14、le r,i;public: void Print() coutr+iiendl; /在这里补充/在这里补充;int main() Complex a; a=”3+4i”; a。Print(); a=”5+6i; a。Print(); return 0;答案: Complex operator=(const char t) if(!t) r=0.0; i=0.0; else r = t0 0; i = t2 - 0; return this; 4下面的Mylnt类只有一个成员变量。Mylnt类内部的部分代码被隐藏了。假设下面的程序能编译通过,且输出结果是:4,1 请写出被隐藏的部分(要求编写的
15、内容必须是能全部救进Mylnt类内部的,Mylnt的成员函数不允许使用静态变量)。#includeusing namespace std;class MyInt int nVal; public: MyInt(int n) nVal=n; int ReturnVal() return nVal; / 在这里补充 /在这里补充;int main() MyInt objInt(10); objInt-21-3; coutobjInt。ReturnVal(); cout”,; objInt-21; coutobjInt。ReturnVal(); return 0; 答案: MyInt& operat
16、or - (int i) nVal -= i; return *this;5下面的程序输出结果是 (4,5) (7,8)请填空:includeiostreamusing namespace std;class Point private: int x; int y; public: Point(int x_,int y_):x(x_),y(y_) ; / _;_operator(_,const Point & p) _; Return_;int main() coutPoint(4,5)Point(7,8); return 0;答案:friend ostream& operator (ostr
17、eam &o,const Point &p); friend ostream &ostream oo”(”p。x”,p.y)”endlo6编写一个二维数组类Array2,使得程序的输出结果是0,1,2,3,4,5,6,7,8,9,10,11,next0,1,2,3,4,5,6,7,8,9,10,11,答案:include iostream#include using namespace std;class Array2private: int row;/数组行数 int column;/数组列数 int* ptr;/指向二维数组的指针public: Array2() ptr = NULL; A
18、rray2(int paraRow, int paraColumn):row(paraRow),column(paraColumn) ptr = new introw column; Array2(Array2 a):row(a.row),column(a.column) ptr = new introw * column; memcpy(ptr, a.ptr, sizeof(int)row*column); Array2& operator= (const Array2 &a) if (ptr) delete ptr; row = a.row; column = a。column; ptr
19、= new introw column; memcpy(ptr, a。ptr, sizeof(int)*row*column); return this; Array2() if (ptr) delete ptr; int operator (int i) return ptr + icolumn; int& operator() (int i, int j) return ptri*column + j; ;int main() Array2 a(3,4); int i,j; for( i = 0;i 3; +i ) for( j = 0; j 4; j + ) aij = i * 4 +
20、j; for( i = 0;i 3; +i ) for( j = 0; j 4; j + ) cout a(i,j) ,”; cout endl; cout ”next” endl; Array2 b; b = a; for( i = 0;i 3; +i ) for( j = 0; j 4; j + ) cout bij include iostream#include string#include using namespace std;class MyString : public string public: MyString():string() ; MyString( const c
21、har * s):string(s); MyString( const string & s ): string(s); MyString operator() ( int s, int l) return this-substr(s,l); ; int main() MyString s1(abcd-”),s2,s3(”efgh),s4(s1); MyString SArray4 = ”big”,me”,”about,take; cout 1。 s1 s2 s3 s4 endl; s4 = s3; s3 = s1 + s3; cout ”2. s1 endl; cout 3. s2 endl
22、; cout 4. s3 endl; cout ”5。 s4 endl; cout ”6。 s12 endl; s2 = s1; s1 = ”ijkl-”; s12 = A ; cout 7. s2 endl; cout 8. ” s1 endl; s1 += ”mnop; cout ”9. s1 endl; s4 = qrst- + s2; cout ”10. ” s4 endl; s1 = s2 + s4 + ” uvw ” + ”xyz; cout ”11。 ” s1 endl; sort(SArray,SArray+4); for( int i = 0;i 4;i + ) cout SArrayi endl; /s1的从下标0开始长度为4的子串 cout s1(0,4) endl; /s1的从下标5开始长度为10的子串 cout s1(5,10) endl; return 0;第14章1以下说法不正确的是(假设在公有派生情况下)( )。A可以将基类对象赋值给派生类对象B可以
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1