C++ 程序设计 实验 3 - 参考答案 MASTER 2017 年 5 月 21 日 1

Similar documents
C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 实验 1 - 参考答案 MASTER 2017 年 5 月 21 日 1

Microsoft PowerPoint - string_kruse [兼容模式]

新版 明解C++入門編

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

C/C++语言 - C/C++数据

C 1

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

C/C++程序设计 - 字符串与格式化输入/输出

02

untitled

书名 : 作 者 : 出版社 : 出版 :

书名 : 作 者 : 出版社 : 出版 :

书名 : 作 者 : 出版社 : 出版 :

Microsoft PowerPoint - 10 模板 Template.pptx

IO

C++ 程序设计 OJ4 - 参考答案 MASTER 2017 年 5 月 21 日 1

幻灯片 1

C++ 程序设计 OJ10 - 参考答案 MASTER 2019 年 6 月 17 日 1

第3章.doc

C/C++ - 结构体、共用体、枚举体

C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 3 日 1

c_cpp

Strings

FY.DOC

C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 30 日 1

Microsoft Word - 第3章.doc

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

untitled

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

NethersoleJO89(8).indd

北京大学

上海交通大学

书名 : 作 者 : 出版社 : 出版 :

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

}; "P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ", " " string imagedata; if(0!= read_image("a.jpg",imagedata)) { return -1; } string rsp; ytopen_sdk m_sd

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

新・解きながら学ぶJava

Strings

Microsoft Word - 第7章 类与对象.docx

untitled

untitled

Microsoft PowerPoint - 第06讲_继承.ppt [兼容模式]

秘密

E11701


untitled

extend

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

公共圖書館利用教育方案規劃之研究


<4D F736F F D B0EABB79A4E5B8D5C344BBBCB065AAA9>


康體藝術

程序设计语言及基础

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

无类继承.key

C/C++ - 文件IO

2.3 链表

Microsoft Word cppFinalSolution.doc

1.5招募说明书(草案)

《计算概论》课程 第十九讲 C 程序设计语言应用

Microsoft Word - ch04三校.doc

CHAPTER VC#

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft Word - CPE考生使用手冊 docx

Chapter12 Derived Classes

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

Guava学习之Resources

3.1 num = 3 ch = 'C' 2

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac)

<4D F736F F F696E74202D20B5DA3032BDB25FC0E0BACDB6D4CFF3312E BBCE6C8DDC4A3CABD5D>

第七讲 继承与多态

C/C++ - 函数

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

運算子多載 Operator Overloading

untitled

《C语言程序设计》教材习题参考答案

幻灯片 1

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

北京大学

untitled

C/C++ 语言 - 循环

Eclipse C C++, or

C C

绘制OpenCascade中的曲线

《C语言程序设计》第2版教材习题参考答案

幻灯片 1

Transcription:

C++ 程序设计 实验 3 - 参考答案 MASTER 2017 年 5 月 21 日 1

1 圆 1 圆 设计圆类 包含 包含基本属性和基本属性访问接口 计算面积和周长接口 2

1 圆 1 #include <iostream> 2 using namespace std ; 3 c l a s s CCircle 4 { 5 p r i v a t e : 6 double r ; 7 const double PI = 3. 14159265359; 8 public : 9 CCircle ( ) { r = 0 ; } 10 CCircle ( const double r ) { this >r = r ; } 11 12 double GetR ( ) const { return r ; } 13 double Area ( ) const { return PI* r * r ; } 14 } ; 15 16 i n t main ( ) 17 { 18 CCircle c ( 5. 2 ) ; 19 cout << "Circle: " << c. GetR ( ) << ", " << c. Area ( ) << endl ; 20 return 0 ; 21 } 3

2 图书类 2 图书类 设计图书类 包含 基本属性 : 书名, 出版社, 出版日期, 作者 属性 : 是否借出, 该图书的数量 基本接口 构造函数 析构函数 属性访问 从指定文件读取图书信息 将图书信息存放到指定文件 ( 注 : 目的就是为了熟悉类的用法 ) 4

3 图书管理类 3 图书管理类 利图书类构建一个简单的图书管理类 基本属性 : 图书馆名字, 图书 基本接口 添加一本书 根据书名查询一本书 借一本书 还一本书 ( 注 : 和实验 1 的第 6 题类似 图书类可以使用 vector( 参考 ) 来管理图书 录入书是往 vector 添加一个元素, 使用 vector 模板的 push_back() 接口 查询书可以使用遍历 vector 数组的方法进行, 返回结果有两种情况, 没有书或者有书 这时候有两种做法 返回指针, 指针指向查找的书, 如果指针为空表示没有书 返回 bool 类型, 以及传入一个引用参数, 但返回值为 true 时, 传入引用参数将返回查找到的书 借书, 先查询, 如果没有该书, 返回, 如果有, 看看书库拥有该书的数量,>0 表示可以出借, 借出, 数量 -1 还书, 和借书类似 ) 5

3 图书管理类 Book.h 1 #pragma once 2 #include <iostream> 3 #include <s t r i n g > 4 using namespace std ; 5 6 c l a s s Library ; 7 c l a s s Book 8 { 9 f r i e n d Library ; 10 f r i e n d ostream& operator <<(ostream &os, const Book& book ) ; 11 f r i e n d istream& operator >>(istream &i s, Book& book ) ; 12 public : 13 Book ( ) ; 14 Book( const s t r i n g &name, const s t r i n g &author, const s t r i n g &press, const s t r i n g &date, i n t num) ; 15 ~Book ( ) ; 16 17 s t r i n g Name( ) const { return m_name; } 18 s t r i n g Author ( ) const { return m_author ; } 19 s t r i n g Date ( ) const { return m_date ; } 20 s t r i n g Press ( ) const { return m_press ; } 21 i n t Total ( ) const { return m_total ; } 22 i n t Aailable ( ) const { return m_available ; } 23 p r i v a t e : 24 s t r i n g m_name; 25 s t r i n g m_press ; 26 s t r i n g m_date ; 27 s t r i n g m_author ; 28 i n t m_total, m_available ; 29 } ; Book.cpp 1 #include "Book.h" 2 using namespace std ; 3 4 Book : : Book ( ) 5 { 6 m_total = 0 ; 7 m_available = m_total ; 8 } 9 10 Book : : ~ Book ( ) 11 { 12 } 13 14 Book : : Book( const s t r i n g &name, const s t r i n g &author, const s t r i n g &press, const s t r i n g &date, i n t num) 6

3 图书管理类 15 { 16 m_name = name ; 17 m_author = author ; 18 m_press = p r e s s ; 19 m_date = date ; 20 21 m_total = num; 22 m_available = m_total ; 23 } 24 25 ostream& operator <<(ostream &os, const Book& book ) 26 { 27 os << book.m_name << " " << book. m_author << " " << book. m_date << " " << book. m_press << endl ; 28 return os ; 29 } 30 31 istream& operator >> ( istream &i s, Book& book ) 32 { 33 return i s ; 34 } Library.h 1 #pragma once 2 #include <iostream> 3 #include <s t r i n g > 4 #include <vector> 5 #include "Book.h" 6 using namespace std ; 7 8 c l a s s Library 9 { 10 public : 11 Library ( const s t r i n g &name) ; 12 ~ Library ( ) ; 13 14 s t r i n g Name( ) const ; 15 void AddBook( const Book& book ) ; 16 bool SearchBook ( const s t r i n g& bookname, Book& found_book ) const ; 17 const Book* SearchBook ( const s t r i n g& bookname) const ; 18 Book* SearchBook ( const s t r i n g& bookname) ; 19 bool ReturnBook ( const s t r i n g& bookname) ; 20 bool LendBook ( const s t r i n g& bookname) ; 21 p r i v a t e : 22 vector<book> m_books ; 23 s t r i n g m_name; 24 } ; 7

3 图书管理类 Library.cpp 1 #include "Library.h" 2 using namespace std ; 3 4 Library : : Library ( const s t r i n g &name) : m_name(name) 5 { 6 } 7 8 Library : : ~ Library ( ) 9 { 10 } 11 12 s t r i n g Library : : Name( ) const 13 { 14 return m_name; 15 } 16 17 void Library : : AddBook( const Book& book ) 18 { 19 Book *pbook = SearchBook ( book. Name( ) ) ; 20 i f (pbook) { 21 pbook >m_total += book. m_total ; 22 return ; 23 } 24 e l s e 25 m_books. push_back ( book ) ; 26 } 27 28 const Book* Library : : SearchBook ( const s t r i n g& bookname) const 29 { 30 f o r ( unsigned i n t i =0; i<m_books. s i z e ( ) ; ++i ) 31 { 32 i f (m_books [ i ]. Name( ) == bookname) return &(m_books [ i ] ) ; 33 } 34 return NULL; 35 } 36 37 Book* Library : : SearchBook ( const s t r i n g& bookname) 38 { 39 f o r ( unsigned i n t i = 0 ; i < m_books. s i z e ( ) ; ++i ) 40 { 41 i f (m_books [ i ]. Name( ) == bookname) return &(m_books [ i ] ) ; 42 } 43 return NULL; 44 } 45 46 bool Library : : ReturnBook ( const s t r i n g& bookname) 47 { 8

3 图书管理类 48 Book *pbook = SearchBook ( bookname) ; 49 i f (! pbook) return f a l s e ; 50 51 pbook >m_available++; 52 return true ; 53 } 54 55 bool Library : : LendBook ( const s t r i n g& bookname) 56 { 57 Book *pbook = SearchBook ( bookname) ; 58 i f (! pbook pbook >m_available <=0) return f a l s e ; 59 60 pbook >m_available ; 61 return true ; 62 } main.cpp 1 #include <iostream> 2 #include "Library.h" 3 using namespace std ; 4 5 i n t main ( ) 6 { 7 Library l i b ( "BJFU" ) ; 8 Book cppbook ( "C++", "SRW", "20150101", "BJFU", 2) ; 9 Book cbook ( "C", "Master", "20160401", "BJFU", 3) ; 10 l i b. AddBook( cppbook ) ; 11 l i b. AddBook( cbook ) ; 12 13 s t r i n g name = "C" ; 14 const Book *book = l i b. SearchBook (name) ; 15 i f ( book ) 16 cout << " Book is found: " << * book << endl ; 17 e l s e 18 cout << " Book is not found!\n" ; 19 return 0 ; 20 } 9

4 向量类 CVECTOR 4 向量类 CVector 设计向量类 CVector 包含 基本属性 向量长度 向量数据指针 接口 向量的模 ( 分量平方和再开根号 ) 向量归一化 ( 如果向量模不为 0, 向量的每个分量都除以该模 ) 因为使用了动态内存 析构函数里需要删除内存 拷贝 ( 复制 ) 构造函数 赋值运算符编写一个非成员函数来测试拷贝构造函数的调用 不使用引用, 传入两个 CVector, 返回具有较大模的那个 CVector ( 注 : 参照课本 string 的写法 CVector v0 ; CVector v1 = v0 ; // 初始化会调用复制构造函数 v1 = v0 ; // 此处是赋值运算 CVector (FunCVector,v1 CVector )v2// 不是引用, 复制构造函数传入, 的值 v1v2 { CVector r e t ; return r e t ; // 不是引用, 调用复制构造函数返回的值, 即返回 retcvector ( r e t ) } ) 10

4 向量类 CVECTOR Vector.h 1 #i f n d e f VECTOR_H 2 #d e f i n e VECTOR_H 3 4 c l a s s Vector 5 { 6 p r i v a t e : 7 double *m_data ; 8 i n t m_len ; 9 public : 10 Vector ( ) { 11 m_len = 0 ; 12 m_data = 0 ; 13 } 14 Vector ( double *data, i n t len ) ; 15 Vector ( const Vector &v ) ; 16 ~Vector ( ) ; 17 18 Vector operator=(const Vector &v ) ; 19 20 double Magnitude ( ) const ; 21 void Normalize ( ) ; 22 } ; 23 24 #e n d i f Vector.cpp 1 #inc lude <iostream> 2 #inc lude <cmath> 3 #include "Vector.h" 4 5 using namespace std ; 6 7 Vector : : Vector ( double *data, i n t len ) 8 { 9 m_len = len ; 10 m_data = new double [ m_len ] ; 11 12 f o r ( i n t i = 0 ; i < m_len ; i++) 13 m_data [ i ] = data [ i ] ; 14 } 15 16 Vector : : Vector ( const Vector &v ) 17 { 18 m_len = v. m_len ; 19 m_data = new double [ m_len ] ; 20 21 f o r ( i n t i = 0 ; i < m_len ; i++) 11

4 向量类 CVECTOR 22 m_data [ i ] = v. m_data [ i ] ; 23 } 24 25 Vector : : ~ Vector ( ) 26 { 27 i f (m_data) d e l e t e [ ] m_data ; 28 } 29 30 Vector Vector : : operator=(const Vector &v ) 31 { 32 i f (m_data) d e l e t e [ ] m_data ; 33 34 m_len = v. m_len ; 35 m_data = new double [ m_len ] ; 36 37 f o r ( i n t i = 0 ; i < m_len ; i++) 38 m_data [ i ] = v. m_data [ i ] ; 39 40 return * t h i s ; 41 } 42 43 double Vector : : Magnitude ( ) const 44 { 45 double mag2 = 0 ; 46 f o r ( i n t i = 0 ; i < m_len ; i++) 47 { 48 mag2 += m_data [ i ] * m_data [ i ] ; 49 } 50 return s q r t (mag2) ; 51 } 52 53 void Vector : : Normalize ( ) 54 { 55 double mag = Magnitude ( ) ; 56 i f (mag <= 0.00001) return ; 57 58 f o r ( i n t i = 0 ; i < m_len ; i++) 59 { 60 m_data [ i ] /= mag ; 61 } 62 } main.cpp 1 #inc lude <iostream> 2 #include "Vector.h" 3 using namespace std ; 4 5 Vector func ( Vector a, Vector b) 6 { 12

4 向量类 CVECTOR 7 Vector c ; 8 i f ( a. Magnitude ( ) < b. Magnitude ( ) ) 9 c = a ; 10 e l s e 11 c = b ; 12 return c ; 13 } 14 15 i n t main ( ) 16 { 17 double arr1 [ ] = { 3, 6 } ; 18 double arr2 [ ] = { 1, 5, 4 } ; 19 Vector vec1 ( arr1, s i z e o f ( arr1 ) / s i z e o f ( arr1 [ 0 ] ) ) ; 20 Vector vec2 ( arr2, s i z e o f ( arr2 ) / s i z e o f ( arr2 [ 0 ] ) ) ; 21 22 Vector v = func ( vec1, vec2 ) ; 23 24 return 0 ; 25 } 13

5 C++ 简单动画 - 选作 5 C++ 简单动画 - 选作 示例程序是一个简单动画演示 CShape 是简单动画类 请你补上移动豌豆荚, 以及子弹 和僵尸碰撞检测的代码, 使得子弹能击中僵尸 ( 此题很难 ) 14