C++语言程序设计课后答案(郑莉第4版-).doc

上传人:一*** 文档编号:808789 上传时间:2019-07-16 格式:DOC 页数:138 大小:390KB
返回 下载 相关 举报
C++语言程序设计课后答案(郑莉第4版-).doc_第1页
第1页 / 共138页
C++语言程序设计课后答案(郑莉第4版-).doc_第2页
第2页 / 共138页
点击查看更多>>
资源描述

《C++语言程序设计课后答案(郑莉第4版-).doc》由会员分享,可在线阅读,更多相关《C++语言程序设计课后答案(郑莉第4版-).doc(138页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第 一 章 概述 1-1 简述计算机程序设计语言的发展历程。 解: 迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C+语 言是一种面向对象的编程语言,也属于高级语言。 1-2 面向对象的编程语言有哪些特点? 解: 面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直 接的描述客观世界中存在的事物以及它们之间的关系。面向对象的编程语言将客观事物看 作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动 态特征) ,形成类。通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发 周期,并使得软件风格统一。因此,面

2、向对象的编程语言使程序能够比较直接地反问题域 的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。 C+语言是目前应用最广的面向对象的编程语言。 1-3 什么是结构化程序设计方法?这种方法有哪些优点和缺点? 解: 结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本 模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选 择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。结构化程序设计由 于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的 程序系统设计任务分解成许多易于控制和处

3、理的子任务,便于开发和维护。 虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把 数据和处理数据的过程分离为相互独立的实体。当数据结构改变时,所有相关的处理过程 都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用 性差。 由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来 越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面 向过程的方法来开发和维护都将非常困难。 1-4 什么是对象?什么是面向对象方法?这种方法有哪些特点? 解: 从一般意义上讲,对象是现实世界中一个实际存在的事物,它

4、可以是有形的,也可以是无 形的。对象是构成世界的一个独立单位,它具有自己的静态特征和动态特征。面向对象方 法中的对象,是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位, 由一组属性和一组行为构成。 面向对象的方法将数据及对数据的操作方法放在一起,作为一个相互依存、不可分离的整 体-对象。对同类型对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法 进行处理。类通过一个简单的外部接口,与外界发生关系,对象与对象之间通过消息进行 通讯。这样,程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好 的保障。通过实现继承与多态性,还可以大大提高程序的可重用性,使得

5、软件的开发和维 护都更为方便。 面向对象方法所强调的基本原则,就是直接面对客观存在的事物来进行软件开发,将人们 在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的 方法、规则和技巧中回到客观世界,回到人们通常的思维。 1-5 什么叫做封装?解: 封装是面向对象方法的一个重要原则,就是把对象的属性和服务结合成一个独立的系统单 位,并尽可能隐蔽对象的内部细节。 1-6 面向对象的软件工程包括哪些主要内容? 解: 面向对象的软件工程是面向对象方法在软件工程领域的全面应用,它包括面向对象的分析 (OOA) 、面向对象的设计(OOD) 、面向对象的编程(OOP) 、面向对象的

6、测试(OOT)和 面向对象的软件维护(OOSM)等主要内容。 1-7 简述计算机内部的信息可分为几类? 解: 计算机内部的信息可以分成控制信息和数据信息二大类;控制信息可分为指令和控制字两 类;数据信息可分为数值信息和非数值信息两类。 1-8 什么叫二进制?使用二进制有何优点和缺点? 解: 二进制是基数为 2,每位的权是以 2 为底的幂的进制,遵循逢二进一原则,基本符号为 0 和 1。采用二进制码表示信息,有如下几个优点:1.易于物理实现;2.二进制数运算简单; 3.机器可靠性高;4.通用性强。其缺点是它表示数的容量较小,表示同一个数,二进制较其 他进制需要更多的位数。 1-9 请将以下十进制

7、数值转换为二进制和十六进制补码: (1)2 (2)9 (3)93 (4)-32 (5)65535 (6)-1 解: (1) (2)10 = (10)2 = (2)16 (2) (9)10 = (1001)2 = (9)16 (3) (93)10 = (1011101)2 = (5D)16 (4) (-32)10 = (11100000)2 = (E0)16 (5) (65535)10 = (11111111 11111111)2 = (FFFF)16 (6) (-1)10 = (11111111 11111111)2 = (FFFF)16 1-10 请将以下数值转换为十进制: (1) (101

8、0)2 (2) (10001111)2 (3) (01011111 11000011)2 (4) (7F)16 (5) (2D3E)16 (6) (F10E)16 解: (1)(1010)2 = (10)10 (2)(10001111)2 = (143)10 (3)(01011111 11000011)2 = (24515)10 (4)(7F)16 = (127)10 (5)(2D3E)16 = (11582)10 (6)(F10E)16 = (61710)10 1-11 简要比较原码、反码、补码等几种编码方法。 解: 原码:将符号位数字化为 0 或 1,数的绝对值与符号一起编码,即所谓“符号

9、绝对值 表示“的编码。 正数的反码和补码与原码表示相同。 负数的反码与原码有如下关系:符号位相同(仍用 1 表示),其余各位取反(0 变 1,1 变 0)。 补码由该数反码的最末位加 1 求得。 第 二 章 C+简单程序设计 2-1 C+语言有那些主要特点和优点? 解: C+语言的主要特点表现在两个方面,一是全面兼容 C,二是支持面向对象的方法。C+是 一个更好的 C,它保持了 C 的简洁、高效、接近汇编语言、具有良好的可读性和可移植性 等特点,对 C 的类型系统进行了改革和扩充,因此 C+比 C 更安全,C+的编译系统能检查 出更多的类型错误。 C+语言最重要的特点是支持面向对象。 2-2

10、下列标识符哪些是合法的? Program, -page, _lock, test2, 3in1, mail, A_B_C_D 解: Program, _lock, test2, A_B_C_D 是合法的标识符,其它的不是。 2-3 例 2.1 中每条语句的作用是什么? #include void main(void) cout /指示编译器将文件 iostream.h 中的代码 /嵌入到该程序中该指令所在的地方 void main() /主函数名,void 表示函数没有返回值 /函数体标志 cout y) x = y; else / y x | y = x y = x;2-17 修改下面这个程

11、序中的错误,改正后它的运行结果是什么? #include void main() int i int j;i = 10; /* 给 i 赋值 j = 20; /* 给 j 赋值 */ cout int main() int i; int j;i = 10; / 给 i 赋值 j = 20; /* 给 j 赋值 */ cout int main() int i;cout i;cout int main() cout int main() for (int i = 32; i?ABCDEFGHIJKLMNOP_QRSTUVWXYZ abcdefghijklmnopqrstuvwxyzs2-21 运

12、行下面的程序,观察其输出,与你的设想是否相同? #include int main() unsigned int x; unsigned int y = 100; unsigned int z = 50; x= y - z; cout int main() int myAge = 39; / initialize two integers int yourAge = 39; cout 5) | (6 2解: 1 1 2 -1 3 0 4 0 2-28 编写一个完整的程序,实现功能:向用户提问“现在正在下雨吗?“,提示用户输入 Y 或 N。若输入为 Y,显示“现在正在下雨。“; 若输入为 N,显

13、示“现在没有下雨。“;否则 继续提问“现在正在下雨吗?“ 解: 源程序: #include #include void main() char flag; while(1) cout flag; if ( toupper(flag) = Y) cout void main() int i,score;cout score; if (score100 | score #include void main() char choice,c; while(1) cout c; choice = toupper(c); if (choice = A) cout #include void main()

14、char choice;while(1) cout choice; switch(toupper(choice) case A:cout #include void main() int i,j,k,flag; i = 2; while(i #include void main() int i,j,k,flag; i = 2; do flag = 1; k = sqrt(i); j = 2; do if(i%j = 0) flag = 0; break; j+; while (j #include void main() int i,j,k,flag; for(i = 2; i void ma

15、in() int n = 18; int m = 0; while(m != n) cout m; if (n m)cout void main() int n = 18; int m = 0; docout m; if (n m)cout enum weekday Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ; void main() int i; weekday d = Thursday; cout int main() int intOne; int intOne = 5; cout short int D

16、ivider(unsigned short int a, unsigned short int b) if (b = 0) return -1; else return a/b; typedef unsigned short int USHORT; typedef unsigned long int ULONG; int main() USHORT one, two; short int answer; cout one; cout two; answer = Divider(one, two); if (answer -1) cout #include int prime(int i); /

17、判一个数是否是质数的函数 void main() int i;cout i; if (prime(i)cout #include int fn1(int i,int j); /求最大公约数的函数 void main() int i,j,x,y;cout i ;cout j ; x = fn1(i,j); y = i * j / x;cout #include int fn1(int i); void main() int i;cout i ;cout long GetPower(int x, int y); int main() int number, power; long answer;

18、cout number; cout power;answer = GetPower(number,power); cout 2; fib(1) = fib(2) = 1;观察递归调用的过程。 解: 源程序见“实验指导“部分实验三 3-15 用递归的方法编写函数求 n 阶勒让德多项式的值,在主程序中实现输入、输出; 解: #include float p(int n, int x); void main() int n,x;cout n;cout x; cout template void swap(T z = x; x = y; y = z; void main() int j = 1, k

19、= 2; double v = 3.0, w = 4.0; cout class Dog public:Dog (int initialAge = 0, int initialWeight = 5); Dog(); int GetAge() return itsAge; / inline! void SetAge (int age) itsAge = age; / inline! int GetWeight() return itsWeight; / inline! void SetWeight (int weight) itsAge = weight; / inline! private:i

20、nt itsAge, itsWeight; ;Dog:Dog(int initialAge, int initialWeight) itsAge = initialAge; itsWeight = initialWeight; Dog:Dog() /destructor, takes no action int main() Dog Jack(2,10); cout class Rectangle public: Rectangle (int top, int left, int bottom, int right); Rectangle () int GetTop() const retur

21、n itsTop; int GetLeft() const return itsLeft; int GetBottom() const return itsBottom; int GetRight() const return itsRight; void SetTop(int top) itsTop = top; void SetLeft (int left) itsLeft = left; void SetBottom (int bottom) itsBottom = bottom; void SetRight (int right) itsRight = right; int GetAr

22、ea() const; private:int itsTop; int itsLeft; int itsBottom; int itsRight; ; Rectangle:Rectangle(int top, int left, int bottom, int right) itsTop = top; itsLeft = left; itsBottom = bottom; itsRight = right; int Rectangle:GetArea() const int Width = itsRight-itsLeft; int Height = itsTop - itsBottom; r

23、eturn (Width * Height); int main() Rectangle MyRectangle (100, 20, 50, 80 ); int Area = MyRectangle.GetArea(); cout class Rectangle public: Rectangle(float len, float width) Length = len;Width = width; Rectangle(); float GetArea() return Length * Width; float GetLength() return Length; float GetWidt

24、h() return Width; private: float Length; float Width; ; void main() float length, width;cout length;cout width; Rectangle r(length, width);cout class datatype enum character, integer, floating_point vartype; union char c; int i; float f; ; public: datatype(char ch) vartype = character;c = ch; dataty

25、pe(int ii) vartype = integer; i = ii; datatype(float ff) vartype = floating_point; f = ff; void print(); ; void datatype:print() switch (vartype) case character:cout class Circle public: Circle(float radius) Radius = radius; Circle()float GetArea() return 3.14 * Radius * Radius; private: float Radiu

26、s; ; void main() float radius;cout radius; Circle p(radius);cout class Tree int ages; public: Tree(int n=0); Tree(); void grow(int years); void age(); ; Tree:Tree(int n) ages = n; Tree:Tree() age(); void Tree:grow(int years) ages += years; void Tree:age() cout void myFunction(); int x = 5, y = 7; in

27、t main() cout class Cat public: Cat(int age):itsAge(age)HowManyCats+; virtual Cat() HowManyCats-; virtual int GetAge() return itsAge; virtual void SetAge(int age) itsAge = age; static int GetHowMany() return HowManyCats; private: int itsAge; static int HowManyCats; ; int Cat:HowManyCats = 0; void Te

28、lepathicFunction(); int main() const int MaxCats = 5; Cat *CatHouseMaxCats; int i; for (i = 0; i #include “fn1.h“ int n; void main() n = 20; fn1();cout void fn1() static int n = 0; n+;cout i =+10; void Y:g(X* x) x-i +; class Z public: void f(X* x) x-i += 5; ; #endif / MY_X_Y_Z_H程序运行输出:无 5-14 定义 Boat

29、 与 Car 两个类,二者都有 weight 属性,定义二者的一个友元函数 totalWeight(),计算二者的重量和。 解: 源程序: #include class Boat; class Car private: int weight; public: Car(int j)weight = j;friend int totalWeight(Car ; class Boat private: int weight; public: Boat(int j)weight = j;friend int totalWeight(Car ;int totalWeight(Car void main(

30、) Car c1(4); Boat b1(5);cout int main() int myArray5; int i; for ( i=0; i myArrayi; for (i = 0; i int main() int *p; *pInt = 9; cout int Fn1(); int main() int a = Fn1(); cout int* Fn1(); int main() int *a = Fn1(); cout class SimpleCircle public: SimpleCircle(); SimpleCircle(int); SimpleCircle(const

31、SimpleCircle SimpleCircle() void SetRadius(int); int GetRadius()const; private: int *itsRadius; ; SimpleCircle:SimpleCircle() itsRadius = new int(5); SimpleCircle:SimpleCircle(int radius) itsRadius = new int(radius); SimpleCircle:SimpleCircle(const SimpleCircle itsRadius = new int(val); int SimpleCi

32、rcle:GetRadius() const return *itsRadius; int main() SimpleCircle CircleOne, CircleTwo(9); cout #include int count(char *str) int i,num=0; for (i=0; stri; i+) if ( (stri=a for(i = 0; si != 0; i+) for(j = i, k = 0; tk != 0 j+, k+) ; if (tk =0) return i; return -1; void main() int n; char str120,str22

33、0;cout str1;cout str2; n = index(str1,str2); if (n 0)cout #include void reverse(char *s, char *t) char c; if (s str1;cout #include #define N 8float gradesN; /存放成绩的数组 void main() int i; float total,average;/提示输入成绩for(i = 0; i gradesi; total = 0; for (i = 0; i #include class MyString public: MyString(

34、); MyString(const char *const); MyString(const MyString MyString(); char char operator(unsigned short offset) const; MyString operator+(const MyString void operator+=(const MyString MyString unsigned short GetLen()const return itsLen; const char * GetMyString() const return itsMyString; private: MyS

35、tring (unsigned short); / private constructor char * itsMyString;unsigned short itsLen; ; MyString:MyString() itsMyString = new char1; itsMyString0 = 0; itsLen=0; MyString:MyString(unsigned short len) itsMyString = new charlen+1; for (unsigned short i = 0; i itsLen) return itsMyStringitsLen-1; else

36、return itsMyStringoffset; char MyString:operator(unsigned short offset) const if (offset itsLen) return itsMyStringitsLen-1; else return itsMyStringoffset; MyString MyString:operator+(const MyString MyString temp(totalLen); for (unsigned short i = 0; i void move (int matrix33) int i, j, k; for(i=0;

37、i dataij; cout void move (int *matrix ,int n) int i, j, k; for(i=0; i n; p = new intn*n;cout pi*n + j; cout #include class Employee private: char name30; char street30; char city18; char zip6; public: Employee(char *n, char *str, char *ct, char *z); void change_name(char *n);void display(); ; Employ

38、ee:Employee (char *n,char *str,char *ct, char *z) strcpy(name, n); strcpy(street, str); strcpy(city, ct); strcpy(zip, z); void Employee:change_name (char *n) strcpy(name, n); void Employee:display () cout class Shape public: Shape() Shape() virtual float GetArea() return -1; ; class Circle : public

39、Shape public: Circle(float radius):itsRadius(radius) Circle() float GetArea() return 3.14 * itsRadius * itsRadius; private: float itsRadius; ; class Rectangle : public Shape public:Rectangle(float len, float width): itsLength(len), itsWidth(width);Rectangle(); virtual float GetArea() return itsLengt

40、h * itsWidth; virtual float GetLength() return itsLength; virtual float GetWidth() return itsWidth; private: float itsWidth; float itsLength; ; class Square : public Rectangle public: Square(float len); Square() ; Square:Square(float len):Rectangle(len,len) void main() Shape * sp; sp = new Circle(5)

41、; cout GetArea () GetArea() GetArea() enum myColor BLACK, WHITE ; class Mammal public:/ constructors Mammal(); Mammal(); /accessors int GetAge() const return itsAge; void SetAge(int age) itsAge = age; int GetWeight() const return itsWeight; void SetWeight(int weight) itsWeight = weight; /Other metho

42、ds void Speak() const cout class BaseClass public: BaseClass(); ; BaseClass:BaseClass() cout #include class Document public: Document(); Document( char *name ); char *Name; / Document name. void PrintNameOf(); / Print name. ; Document:Document( char *name ) Name = new char strlen( name ) + 1 ; strcp

43、y( Name, name ); ; void Document:PrintNameOf() cout class object private: int Weight; public: object() cout class BaseClass public: void fn1(); void fn2(); ; void BaseClass:fn1() cout fn1(); pBaseClass-fn2(); pDerivedClass-fn1(); pDerivedClass-fn2(); 程序运行输出: 调用派生类的函数 fn1() 调用派生类的函数 fn2() 调用基类的函数 fn1

44、() 调用基类的函数 fn2() 调用派生类的函数 fn1() 调用派生类的函数 fn2() 7-12 为例 9-1 的吹泡泡程序加一版权(About)对话框。 然后修改例 9-1 的程序,加入以下内容: 程 序: 1在程序首部加上文件包含命令 #include “resource.h”2在框架窗口类之前加入从 CDialog 类派生的对话框类: / 对话框类 class CAboutDlg: public CDialog public:CAboutDlg(); enum IDD = IDD_DIALOG1; ; inline CAboutDlg:CAboutDlg():CDialog(CAb

45、outDlg:IDD)3在框架窗口类中添加响应鼠标右键消息的代码,包括消息响应函数说明、消息响应宏和 消息响应函数定义。鼠标右键消息响应函数为: void CMyWnd:OnRButtonDown(UINT nFlags, CPoint point) CAboutDlg dlg; dlg.DoModal(); 7-13 签名留念簿程序。该程序模仿签名簿,用户使用鼠标左键点击窗口客户区后会弹出一 个对话框,输入姓名后可在鼠标点击位置显示出该签名。签名的颜色、字体大小和方向随 机确定。 说 明:项目建立及添加对话框模板资源的方法同例 14-1。修改对话框模板的 ID 为 IDD_NAMEDLG,C

46、aption 为“签名对话框” ,并添加一个静态文本控件(Caption 改为“签名” )和一个编辑控件(ID 改为 IDC_EDITNAME) 。 程 序: / Example 14-2:签名留念簿程序 #include #include “resource.h“/ 对话框类 class CNameDlg: public CDialog public: CPoint m_pointTopLeft; CString m_strNameEdit; public: CNameDlg(); enum IDD = IDD_NAMEDLG; protected: virtual void DoDataExchange(CDataExchange* pDX); virtual BOOL OnInitDialog(); ;/ 对话框类的构造函数 CNameDlg:CNameDlg():CDialog(CNameDlg:IDD) m_strNameEdit = _T(“); / 数据交换和数据检验 void CNameDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); DDX_Text(pDX, IDC_EDITNAME, m_strNameEd

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com