版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上新标准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 v; publ
3、ic: public: void Func(); A next; ; void Func() A::void Func() ; 答案:B4假设有以下类A: class A public: int func(int a) return a * a; ;以下程序段不正确的是( )。AA a; (5);BA * p = new A;p->func(5);CA a;Ar =a ;(5);DA a,b;if(a!=b)(5);答案:D5以下程序段不正确的是(A)。 Aint main() class A int v; A a;= 3; return 0; Bint main() class A p
4、ublic: int v; A * p; ; A a; =&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 ; return 0; 答案:A 6实现一个学生信息处理程序。输入:姓名,年龄,学号(整数)。第一学年平均成绩· 第二学年平均成绩,第三学年平均成绩,第四学年平均成绩。输出:姓名,年龄
5、,学号, 4年平均成绩。例如: 输入: Tom 18 7817 80 80 90 70 输出: Tom,18,7817,80 要求实现一个代表学生的类,并非所有成员变量都是私有的。 答案:#include <iostream>#include<cstring>#include<cstdlib> 面程序的输出结构是:5,55,5请填空:#include<iostream>using namespace std;class Basepublic:int k;Base(int n):k(n); class Big public:int v;Base b
6、;Big _ ;Big_ ; ;int main()Big a1(5);Big a2=a1;cout<<<<","<<cout<<<<","<<return 0;答案:(int n):v(n),b(n)(Big &x):v,b完成附录“魔静世界大作业”中提到的第一阶段作业(省略)第13章1如果将运算符“”重载为某个类的成员运算符(也即成员函数),则该成员函数的参数个数是( )。A0个 B . 1个 C . 2个 D3个答案:B 2如果将运算符“*”重载为菜个类的成员运算符(也
7、即成员函数),则该成员函数的参数个数是( )。A0个 B . 1个 C . 2个 D . 0个或1个均可答案:D3下面程序的输出是 3+4i 5+6i请补充Complex类的成员函数,不能加成员变量。#include<iostream>#include<cstring>using namespace std;class Complexprivate:double r,i;public:void Print()cout<<r<<"+"<<i<<"i"<<endl; abcd
8、-efgh-abcd-2. abcd-3.4. abcd-efgh-5. efgh-6. c7. abcd-8. ijAl-9. ijAl-mnop10. qrst-abcd-11. abcd-qrst-abcd- uvw xyzaboutbigmetakeabcdqrst-abcd-答案: #include <cstdlib>#include <iostream>#include <string>#include <algorithm>using namespace std;class MyString : public string publ
9、ic: MyString():string() ; MyString( const char * 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",&q
10、uot;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 <
11、;< endl;cout << "5. " << s4 << endl;cout << "6. " << s12 << endl;s2 = s1;s1 = "ijkl-"s12 = 'A' ;cout << "7. " << s2 << endl;cout << "8. " << s1 << endl;s1 += "mno
12、p"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 <
13、4;i + )cout << SArrayi << endl;成附魔兽世界作业中的的二阶段。(省略)第15章1以下说法正确的是( )A.在虚函数中不能使用this指针B.在构造甬数中调用虚函数,不是动态联编C.抽象类的成员函数都是纯虚函数D.构造函数和析构函数都不是虚构函数答案:B2写出下面程序的输出结果#include<iostream>using namespace std;class Apublic:A()virtual void func()cout<<"A:func"<<endl;A()virtual v
14、oid fund()cout<<"A:fund"<<endl;class B:public Apublic:B()func(); void fun()func();B()fund();class C:public Bpublic:C()void func()cout<<"C:func"<<endl;C()fund();void fund()cout<<"C:fund"<<endl;int main()C c;return 0;答案:A:funcC:fundA:fu
15、nd3写出下面程序的输出结果。#include<iostream>using namespace std;class Apublic:virtual A()cout<<"DestructA"<<endl;class B:public Apublic:virtual B()cout<<"DestructB"<<endl;class C:public Bpublic:virtual C()cout<<"DestructC"<<endl;int main()
16、A * pa = new C;delete pa;A a;return 0;答案:DestructCDestructBDestructADestructA4写出下面程序的输出结果:#include<iostream>using namespace std;class Apublic:virtual void func()cout<<"A:func"<<endl; virtual void fund()cout<<"A:fund"<<endl;void fun()cout<<"
17、;A:fun"<<endl;class B:public Apublic:B()func();void fun()func();class C:public Bpublic:C()void func()cout<<"C:func"<<endl;void fund()cout<<"C:fund"<<endl; int main()A * pa = new B();pa->fun();B * pb = new C();pb->fun();return 0; 答案:A:funcA
18、:funA:funcC:func5下面程序的输出结果是#include<iostream>using namespace std;class Aprivate:int nVal;public:void Fun()cout<<"A:Fun"<<endl;void Do()cout<<"A:Do"<<endl;class B:public Apublic:virtual void Do()cout<<"B:Do"<<endl; ;class C:publi
19、c Bpublic:void Do()cout<<"C:Do"<<endl;void Fun()cout<<"C:Fun"<<endl;void Call(B& p)();();int main()C c;Call(c);system("PAUSE");return 0;答案:A:FunC:Do6下面程序的输出结果是destructor Bdestructor A请完整写出class A。限制条件:不能为class A编写构造函数。#include<iostream>
20、using namespace std;class A_;class B:public AB()cout<<"destructor B"<<endl;int main()A * pa;pa = new B; delete pa;return 0;答案:public:virtual A()cout<<"destructor A"<<endl;7下面的程序输出结果是A:FunA:DoA:FunC:Do请填空:#include<iostream>using namespace std;class Ap
21、rivate:int nVal;public:void Fun()cout<<"A:Fun"<<endl;virtual void Do()cout<<"A:Do"<<endl; ;class B:public Apublic:virtual void Do()cout<<"B:Do"<<endl;class C:public Bpublic:void Do()cout<<"C:Do"<<endl;void Fun()c
22、out<<"C:Fun"<<endl;void Call(_)p->Fun();p->Do();int main() Call(new A();Call(new C();答案:A *p8.完成附录魔兽世界大作业中提到的终极版本作业。(省略)第16章1 C+标准类库中有哪几个流类,用途分别如何它们之问的关系如何 答案: c+标准库中有istream,ostream,ifstream,ofstream,iostream,fstream等流类。 istream是用于输入的流类: ostream是用于输出的流类: ifstream是用于从文件读取
23、数据的类: ofstream是用于向文件写入数据的类: iostream是既能用千输入,又能输出的类: fstream是既能从文件读取数据,又能向文件写入数据的类。 ios是个抽象基类,它派生出istream和ostream; istream派生出ifstream,ostream派生出ofstream,istream和ostream共同派生了 iostream; iostream派生出fstream。2 cin是哪个类的对象cout是哪个类的对象答案:cln是istream类的对象:cout是ostream类的对象。3编写程序,读取一行文字,然后将此行文字颠倒后输出输人样倒:These are
24、 100 dogs输出样例:.sgod 001 eseht答案:#include<iostream>#include <>using namespace std;void swap(char *s)int len, i;char tmp;len = strlen(s)-1;for (i = 0; i <= len/2; +i)tmp = si;si = slen-i;slen-i = tmp;int main(void)char s = "There are 100 dods."cout<<s<<"n"
25、;swap(s);cout<<s<<endl;return 0; 4编写程序,输入若干个实数,对于每个实数,先以非科学计数法输出,小数点后面保留5位有效数字;再以科学计数法输出,小数点后面保留7位有效数字。输入以Ctrl+Z结束。输入样例:输出样例:+001+005+005答案:#include <iostream>using namespace std;int main() double num;while(cin >> num)cpp处理后的结果生成为result2. cpp文件。输入样例: #include<iostream>#
26、include< iomanip >using namepsace std;/* test sample */void func( int n)if(n)cout<<”in func”<<endl;int main() Please double it, This is a file.Please double id.答案:#include <fstream> #include <string> #include <iostream> using namespace std; int main() ifstream in(
27、""); ofstream out(""); string line; string content; if(in) dat要求是二进制文件,文件中的每个记录和上述类的对象相对应。students. dat最初不存在。程序可以多次运行,如果第一敬运行程序后studentsdat生成了,则以后再运行时,程序应基干已经存在的students. dat进行操作。程序运行时能接受以下几种命令: 1) Add姓名学号成绩 例如I Add Tom 添加学生信息姓名和学号都不会包含空格。姓名由最多9个字母组成-学号是整数。可能重名,但学号不会重复。如果发现相同学号的学
28、生已经存在,则不添加学生信息,而是输出:“Aiready entered”。 2) Search姓名 根据姓名查找学生信息,并输出。如果有重名的,把重名的学生信息全部输出。辅出格式为; 每个学生信息输出为一行,查不到则输出“Not FoundH。 3) Search学号 根据学号查找学生信息,并输出。输出格式为: 姓名学号成绩每个学生信息输出为一行。查不到则输出“Not Found'。 4) Modify学号成绩 根据学号修改学生的成绩并输出“Done”。如果找不到该学号的学生,则输出“NotFound”。 假定学生记录非常多,所以不能采取用一个大数组把全部学生记录都读取到内存的做法。
29、答案:#include<iostream>#include<fstream>#include<cstdio>using namespace std;class Student char name50; int stuID; double grades;public: void Add() (name,50); cin >> stuID >> grades; void showData() cout << name << stuID << grades; int retname() return 1;
30、 void setdata() cout <<"Done"/* function to write in a binary file.*/void write_record() ofstream outFile; ("", ios:binary | ios:app); Student obj; (); (char*)&obj, sizeof(obj); ();/* function to display records of file*/void display() ifstream inFile; ("", io
31、s:binary); Student obj; while(char*)&obj, sizeof(obj) (); ();/* function to search and display from binary file*/void search(int n) ifstream inFile; ("", ios:binary); Student obj; while(char*)&obj, sizeof(obj) if () (); ();/* function to modify a record*/void modify_record(int n) f
32、stream file; ("",ios:in | ios:out); Student obj; while(char*)&obj, sizeof(obj) if () cout << "nEnter the new details of student" (); int pos = -1 * sizeof(obj); (pos, ios:cur); (char*)&obj, sizeof(obj); ();int main() 下列函数模板中定义正确的是 ( ).A. template < class T1, clas
33、s T2 > T1 fun (T1,T2) return Tl + T2;B. template< class T> T fun(T a) return T + a;C. template < class T1,class T2 > Tl fun(T1,T2) return T1 + T2;D. template <class T>T fun(T a,T b) return a + b r;答案:D2. 下列类模板中定义正确的是( ). A. template < class T1,ciaas T2> class A : T1 b; int
34、 fun( int a ) return T1+T2; B. template < class T1,class T2 > class A int T2; T1 fun( T2 a ) return a + T2; C. template < class T1,class T2 > claas A public: T2 b, T1 a; A<T1>() T1 fun() return a; D. template < class T1,class T2> class A T2 b; T1 fun( double a ) b = (T2) a; r
35、eturn (T1) a;答案:D3写出下面程序的输出结果。#include<iostream>using namespace std;template <class T>T Max( T a, T b)cout<<"TemplateMax"<<endl;return 0; double Max(double a,double b)cout<<"MyMax"<<endl;return 0;int main()int i=4,j=5;Max,;Max(i,j);return 0;答案:
36、MyMaxTemplateMax4填空使得下面程序能编译通过,并写出输出结果。#include<iostream>using namespace std;template <_ >class myclassT i;public:myclass(T a)i=a; void show()cout<<i<<endl;int main()myclass<_ > obj("This");();return 0;答案:class Tstring结果:This5下面的程序输出是TonHanks请填空。注意,不允许使用任何常量。#
37、include<iostream>#include<string>using namespace std;template<class T>class myclass_;int nSize;public:myclass(_, int n)p = new Tn;for(int i=0; i< n; +i)pi=ai; nSize=n; myclass()delete p;void Show()for(int i = 0;i<nSize;+i)cout<<pi; int main()char * szName = "TomHan
38、ks"myclass<char> obj(_);();return 0; 答案:T *pT *aszName,sizeof(szName)+1第19章1.假设pl、p2是STL中的Iist缚器上的迭代器,那么以下语句不符合语法的是( )。+; Bp1-; Cp1+=1; Dint n=(pl=p2);答案:C2.将一个对象放入STL中的容器中时以下说法正确的是( )。A.实际上被放人的是该对象的一个复制(副本)B.实际上被放人的是该对象的指针C.实际上被放人的是该对象的引用D.实际上被放人的就是该对象自身答案:A3.以下关于函数对象的说法正确的是( )。A.函数对象所属的
39、类将()重载为成员函数B.函数对象所属的类将重载为成员函数C.函数对象生成时不需用构造函数进行初始化中元素的位置和其值是相关的答案:C4.以下关于STL中SC1类模板的正确说法是( )。是顺序容器B.在set中查找元素的时间复杂度是O(n)的(n代表set中的元素个数)C.往set中添加一个元素的时间是O(1)的中元素的位置和其值是相关的答案:C5.写出下面程序的输出结果#include<vector>#include<iostream>using namespace std;class Aprivate:int nId;public:A(int n)nId=n;cou
40、t<<nId<<"constructor"<<endl; A()cout<<nId<<"destructor"<<endl; int main()vector<A *> vp;(new A(1);(new A(2);();A a(4);return 0; 答案:1constructor2constructor4constructor4destructor6写出下面程序的输出结果。#include <iostream> #include <map>
41、using namespace std; class Gt public: bool operator() (const int & n1,const int & n2) const return ( n1 % 10 ) > ( n2 % 10); ;int main() typedef map<int,double,Gt> mmid;mmid MyMap; cout << (15) << endl;(mmid:value_type(15,);(mmid:value_type(15,);cout << (15) <&l
42、t; endl; (mmid:value_type(30,);(mmid:value_type(11,); cout << MyMap16 << endl;for( mmid:const_iterator i = (); i != () ;i + )cout << "(" << i->first << "," << i->second<< ")" << ","system("pause")
43、; 答案:010(16,0),(15,(11,(30,7.下面程序的输出结果是:Tom,Jack,Mary,John,请填空:#include <iostream> #include <vector> #include <string> using namespace std; template <class T> class MyClass vector<T> array; public:MyClass ( T * begin,int n ):array(n) copy( begin, begin + n, ();void List
44、() _;for( i = (); i != ();i +) cout << * i << "," ; main() string array4 = "Tom","Jack","Mary","John"_;(); 答案:typename std:vector<T>:const_iterator iMyClass<string> obj(array,4)8下面程序的输出结果是A:Print:1B:Print:2B:Print:3请填空#include
45、<iostream>#include<vector>using namespace std;template <class T>void PrintAll(const T &c)typename T:const_iterator i;for(i=();i!=();+i)_;class Aprotected:int nVal;public:A(int i):nVal(i)virtual void Print()cout<<"A:Print:"<<nVal<<endl;class B:public
46、Apublic:B(int i):A(i)void Print()cout<<"B:Print:"<<nVal<<endl;int main()_;(new A(1);(new B(2);(new B(3);PrintAll(v);system("pause");return 0; 答案:(*i)->Print()vector<A *> v9下面的程序输出结果是 1 2 6 7 8 9 请填空#include<iostream>#include<set>#include<
47、iterator>using namespace std;int main()int a=8,7,8,9,6,2,1;_;for(int i=0;i<7;i+)_;ostream_iterator<int> o(cout,"");copy(),(),o);system("pause");return 0;答案:set<int> v(ai)第20章1. static_cast、reinterpret_cast、dynamic_cast、const_cast分别用于那些场合答案:static_cast用于进行无风险的强制类
48、型转换,如整型和实数型、字符型之间相互转换;reinterpret_cast用于指针或是引用的不保证安全性的装换;const_cast用于除去const属性的转换,是这四种强制类型转换运算符中唯一一个能够去除const属性的运算符;dynamic_cast用于基类指针或是基类引用到派生类指针或派生类引用的安全转换。2. dynamic_cast在什么情况下会抛出异常抛出的异常是什么类型的用dynamic_cast进行基类指针到派生类指针的转换。如何判断安全性答案:使用dynamic_cast进行从多态基类对象(或引用)到派生类的引用的强制类型转换是,若转换是不安全的,则会抛出异常,抛出的异常是
49、Bad dynamic_cast的异常类;dynamic_cast在进行转换的时候,如果发现时转换不安全,就会抛出一个异常,通过处理异常来发现不安全的转换,判断转换的安全性。3. 下面程序的输出结果是:2 constructedstep12 destructed3 constructedstep23 destructedbefore return请填空:#include<iostream>#include<memory>using namespace std;class Aint v;public:A(int n):v(n)cout<<v<<”
50、constructed”<<endl;A()cout<<v<<” destructed”<<endl;int main()A *p =new A(2);_;p =NULL;cout<<”step1”<<endl;(NULL);p =new A(3):_;p = NULL;cout <<”step2”<<endl;p= ;delete p;cout<< “before return” <<endl;return 0;答案:1.auto_ptr <A> ptr(p)2.(p)3.release()4写出下列程序的输出结果。#include<iostream>#include<memory>using namespace std;class Aint v;public:A(int n):v(n)cout<<v<<"constructed"<<endl;A() cout<<v<<"destructed"<<endl; int main()auto_ptr<A>ptr1(new A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025个人土地转让合同样本
- 危险化学品生产单位安全生产管理人员上岗证考试题及答案(完整版)-
- 2025年医疗设备供应商采购合同
- 输血的方法及注意事项
- 管理人员上岗制度及上岗证
- 2025中国石油石化校园招聘笔试参考题库附带答案详解
- 2015年室内设计师应该具备的素质试题及答案
- 房产买卖合同示范
- 2025江苏南通海门科技人才发展集团有限公司招聘工作人员笔试历年典型考点题库附带答案详解试卷2套
- 2025广西河池市罗城县“智汇罗城”公开招聘国有企业高层管理人员2人笔试历年难易错考点试卷带答案解析试卷2套
- 2025中国K12课外辅导市场消费特征与行业趋势研究报告
- 2026年北京市高考语文总复习:专题11 文学类文本阅读(选修上册课内阅读)(解析版)
- 2025江苏南京市产业招商中心有限责任公司招聘18人笔试考试参考试题及答案解析
- 2025年安庆宿松县卫生健康系统部分事业单位公开招聘工作人员14人笔试考试备考题库及答案解析
- 2025-2030老年康复辅具居家适老化改造需求调研报告
- 物业小区电梯故障应急预案
- 2025年广州公务员行测真题【完整+答案+解析】
- 2025年港澳台联考语文试题及答案解析
- 关于蜥蜴的科普
- 2025年食品安全考试试题(答案+解析)
- 2025年单位开展违规吃喝问题专项整治的工作方案(详细版)
评论
0/150
提交评论