1、ly新标准C+程序的设计教材1120章课后题答案新标准C+程序设计教材11-20章课后题答案第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; p-func(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.
4、v= 3; 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 #include#include /#includeusing namespace std;class Student private: int age, score1, score2, score3, score4; char name100, num100; double average;public: Student(char aname,
6、 int aage, char anum,int ascore1, int ascore2, int ascore3, int ascore4) strcpy(name, aname); age = aage; strcpy(num, anum); score1 = ascore1; score2 = ascore2; score3 = ascore3; score4 = ascore4; double getAverage() return (score1 + score2 + score3 + score4) / 4; char * getName() return name; int g
7、etAge() return age; char * getNum() return num; ;int main() char name100, a, num100; int age, score1, score2, score3, score4; cin.getline(name, 100, ); cin age; / a = getchar(); cin.getline(num, 100, ); cin score1 score2 score3 score4; Student s(name, age, num, score1, score2, score3, score4); cout
8、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如果某函数的返回值是个对象,则该
9、函数被调用时,返回的对象( )。A是通过复制构造函数初始化的B是通过无参构造函数初始化的C用哪个构造函数初始化取决于函数的return语句是怎么写的D不需要初始化答案:C4以下说法LE确的是( )。A在静态成员函数中可以调用同类的其他任何成员函数Bconst成员函数不能作用于非const对象C在静态成员函数中不能使用this指针D静态成员变量每个对象有各自的一份答案:C5以下关于this指针的说法中不正确的是( )。Aconst成员函数部不可以使用this指针B成员函数的this指针,指向成员函数所作用的对象C在构造函数部可以使用this指针D在析构函数部可以使用this指针答案:A6请写出下
10、面程序的输出结果。class CSample int x;public: CSample() cout”C1”endl; CSample(int n) x=n; cout”C2,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 using namespace std;class Sample pub
11、lic: 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; cout d.v; return 0;答
12、案:92058请写出下面程序的运行结果:4,6请填空:#includeusing 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; 答案:Val(4),A(6)9下面程序的输出结果是05请填空:#in
13、cludeusing 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类的成员函数,不能增加成员变量#includeusing namespace std;class Sample public: int v; Sample(int n):v(n) ; _ Sample(Sample &obj) th
14、is-v = 2 * obj.v; ;int main() Sample a(5); Sample b=a; coutv=2*obj.v;11.下面程序的输出结构是:5,55,5请填空:#includeusing 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;答
15、案:(int n):v(n),b(n)(Big &x):v(x.v),b(x.b.k)12完成附录“魔静世界大作业”中提到的第一阶段作业(省略)第13章1如果将运算符“”重载为某个类的成员运算符(也即成员函数),则该成员函数的参数个数是( )。A0个 B . 1个 C . 2个 D3个答案:B 2如果将运算符“*”重载为菜个类的成员运算符(也即成员函数),则该成员函数的参数个数是( )。A0个 B . 1个 C . 2个 D . 0个或1个均可答案:D3下面程序的输出是 3+4i 5+6i请补充Complex类的成员函数,不能加成员变量。#include#includeusing namesp
16、ace std;class Complexprivate: double 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类部的部分代码被隐藏了。假设下面的
17、程序能编译通过,且输出结果是:4,1 请写出被隐藏的部分(要求编写的容必须是能全部救进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-2-1-3; coutobjInt.ReturnVal(); cout,; objInt-2-1; coutobjInt.ReturnV
18、al(); return 0; 答案: MyInt& operator - (int i) nVal -= i; return *this;5下面的程序输出结果是 (4,5) (7,8)请填空:#includeusing 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;答案:frie
19、nd ostream& operator (ostream &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 #include using namespace std;class Array2private: int row;/数组行数 int column;/数组列数 int* ptr;/指向二维数组的指针public: Array2
20、() ptr = NULL; Array2(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; col
21、umn = a.column; ptr = new introw * column; memcpy(ptr, a.ptr, sizeof(int)*row*column); return *this; Array2() if (ptr) delete ptr; int* operator (int i) return ptr + i*column; 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;
22、j 4; j + ) aij = i * 4 + 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 ,; cout endl; return 0;7编写一个Mystring类,使得程序的输出结果是1. abcd-efgh-abcd-2. abcd-3.4. abcd-efgh-5. efgh-6. c7. abcd-8. ijAl
23、-9. ijAl-mnop10. qrst-abcd-11. abcd-qrst-abcd- uvw xyzaboutbigmetakeabcdqrst-abcd-答案: #include #include #include #include using namespace std;class MyString : public string public: MyString():string() ; MyString( const char * s):string(s); MyString( const string & s ): string(s); MyString operator()
24、 ( 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; cout 4. s3 endl; cout 5. s4 endl; cout 6. s12 endl; s2 = s1; s1 = ijkl-; s12 = A ; c
25、out 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