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

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

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

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

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++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

Microsoft PowerPoint - string_kruse [兼容模式]

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++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 30 日 1

Strings

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

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

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

untitled

第3章.doc

C 1

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

c_cpp

CHAPTER VC#

FY.DOC

02

新・解きながら学ぶJava

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

Microsoft Word - 第3章.doc

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

Strings

IO

untitled

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

untitled

北京大学

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

Microsoft Word - 新1-12.doc

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

untitled

untitled

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

untitled

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

extend

Microsoft PowerPoint - L17_Inheritance_v4.pptx

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

内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2

Microsoft Word 軟體設計第二部份範例試題_C++_ _1_.doc

Microsoft Word - ch04三校.doc

Microsoft PowerPoint - 10 模板 Template.pptx

untitled

CC213

软件工程文档编制

untitled

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

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

Chapter12 Derived Classes

untitled

第七讲 继承与多态


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

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

3.1 num = 3 ch = 'C' 2

EJB-Programming-4-cn.doc

EJB-Programming-3.PDF

NethersoleJO89(8).indd

Microsoft Word - CPE考生使用手冊 docx

Microsoft Word - 01.DOC

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检

ebook39-6

Microsoft Word cppFinalSolution.doc

ebook39-5

概述

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

CHAPTER 1

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

全国计算机技术与软件专业技术资格(水平)考试

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

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

1.5招募说明书(草案)

untitled

untitled

Chapter 9: Objects and Classes

上海交通大学

团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生

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


<4D F736F F D B0EABB79A4E5B8D5C344BBBCB065AAA9>


康體藝術

C/C++ - 函数

untitled

Microsoft Word docx

運算子多載 Operator Overloading

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

Eclipse C C++, or

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

Microsoft Word - 物件導向編程精要.doc

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法

CC213

!!! #!!! $##%!!! $!!!! &!!!! (!! %!! )!!! *!!!!!!! #!!!!! $

<4D F736F F D20D5D0B1EACEC4BCFEBCB0C7E5BDE0B7FECEF1BACFCDAC28C2C9CAA6B0E631A3A92E646F6378>

<4D F736F F D20B160A5CEA4A4B0EABCF4BB79A5DCA8D22E646F63>

Transcription:

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

1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include<iomanip> cout << setiosflags(ios::fixed) << setprecision(n); 2

1 CIRCLE 1 #inclu de <iostream> 2 #inclu de <cmath> 3 #inclu de <iomanip> 4 using namespace std ; 5 const double p i = acos ( 1) ; 6 7 c l a s s C i r c l e 8 { 9 p r i v a t e : 10 double r ; 11 public : 12 C i r c l e ( ) { r = 0 ; } 13 C i r c l e ( double r ) { this >r = r ; } 14 double Area ( ) { return pi * r * r ; } 15 } ; 16 17 i n t main ( ) 18 { 19 double r ; 20 cin >> r ; 21 C i r c l e c i r c l e ( r ) ; 22 23 cout << s e t i o s f l a g s ( i o s : : f i x e d ) << s e t p r e c i s i o n (2) ; 24 cout << c i r c l e. Area ( ) << endl ; 25 26 return 0 ; 27 } 3

2 DATE 2 Date 描述 定义日期类 Date 包含年 月 日三个数据成员, 编写一个友元函数, 求两个日期之间相差的天数 ( 日期不分前后顺序 ) 输入 输入两行, 为两个日期 data1 和 data2, 格式见样例 输出 输出一行, 两个日期间相差的天数 样例输入 2008-9-1 2015-4-1 样例输出 2403 提示 公历的平年是 365 天, 闰年是 366 天, 在 2 月加一天 闰年的准则 : 能被 4 整除但不能被 100 整除, 或者能被 400 整除 因此,1600 2000 2400 年都是闰年, 而 1700 1800 1900 2100 年都是平年 公元纪年没有公元 0 年 公元前之闰年出现在 1, 5, 9, 13,... BC, 须将年分数值减 1 再以 除以 4 计算 ( 因为没有公元 0 年这一年, 所以公元前 1, 2, 3, 4,... 年应该是公元 0, -1, -2, -3,... 年, 而公元前 1, 5, 9, 13,... 年为公元 0, -4, -8, -12,... 年, 为 4 的倍数 ) 另外, 本题为选做题 请注意, 必须要用类 (class) 来实现代码, 否则不得分 4

2 DATE 1 #i n c l u d e <iostream> 2 using namespace std ; 3 4 bool IsLeap ( i n t year ) 5 { 6 i f ( year < 0) year = year 1 ; // 公元前年份需要 1 7 return ( year % 400 == 0) ( ( year % 4 == 0) && ( year % 100!= 0) ) ; 8 } 9 10 c l a s s Date 11 { 12 f r i e n d i n t Delta ( const Date &d1, const Date &d2 ) 13 { 14 return abs ( d1. Abs ( ) d2. Abs ( ) ) ; 15 } 16 17 f r i e n d istream &operator>> ( istream &i s, Date &d) 18 { 19 char c ; 20 i s >> d. year >> c >> d. month >> c >> d. day ; 21 return i s ; 22 } 23 24 p r i v a t e : 25 i n t year, month, day ; 26 public : 27 Date ( i n t y=1, i n t m=1, i n t d=1) : year ( y ), month(m), day (d) { } 28 i n t Abs ( ) const { i f ( year >= 1) return Abs_( ) ; return Abs_BC( ) ; } 29 p r i v a t e : 30 i n t DayInYear ( ) const 31 { 32 i n t DAYs[ 1 2 ] = {31, 28+IsLeap ( year ), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 33 i n t _day = day ; 34 f o r ( i n t m=0; m<(month 1) ; ++m) _day += DAYs[m] ; 35 return _day ; 36 } 37 38 i n t DayLeftInYear ( ) const { return 365 + IsLeap ( year ) DayInYear ( ) ; } 39 40 i n t Abs_( ) const 41 { 42 i n t _day = DayInYear ( ) ; 43 f o r ( i n t _year = 1 ; _year<= ( year 1) ; _year++) _day += 365 + IsLeap ( _year ) ; 44 return _day ; 45 } 46 47 i n t Abs_BC( ) const 5

2 DATE 48 { 49 long i n t _day = DayLeftInYear ( ) ; 50 f o r ( i n t _year = year +1; _year<= 1; _year++) _day += 365 + IsLeap ( _year ) ; 51 return _day ; 52 } 53 } ; 54 55 i n t main ( ) 56 { 57 Date date1, date2 ; 58 c i n >> date1 >> date2 ; 59 60 i n t d e l t = Delta ( date2, date1 ) ; 61 cout << d e l t << endl ; 62 63 i f (0) 64 { 65 Date date1 ( 1, 1, 1), date2 (1, 1, 1) ; 66 cout << Delta ( date2, date1 ) << endl ; 67 } 68 return 0 ; 69 } 6

3 HOTEL 3 Hotel 描述 编写程序, 统计某旅馆住宿客人的总数 要求输入客人的姓名, 输出客人的编号 ( 按先后顺序自动生成 ) 姓名以及总人数使用如下 main 函数对程序进行测试 int main(){ Hotel h[100]; h[0].add("susan"); h[1].add("peter"); h[2].add("john"); h[3].add("mary"); h[4].add("alice"); } string name; cin>>name; for(int i=0; i<hotel::gettotal(); i++) { if(h[i].getname()==name) { h[i].print(); break; } } return 0; 输入 输入客人的姓名 ( 不超过 100 个字符的由英文大小写字母组成的字符串 ) 输出 输出一行, 输出客人的编号, 姓名及总人数, 空格分隔 样例输入 Peter 样例输出 2 Peter 5 提示 使用 static 成员变量和 static 函数 7

3 HOTEL 1 #inclu de <iostream> 2 #include<s t r i n g > 3 4 using namespace std ; 5 c l a s s Hotel 6 { 7 p r i v a t e : 8 s t a t i c i n t t o t a l ; 9 s t r i n g name ; 10 i n t id ; 11 public : 12 void Add( const s t r i n g &name) ; 13 void Print ( ) ; 14 s t a t i c i n t GetTotal ( ) { return t o t a l ; } 15 s t r i n g GetName ( ) ; 16 } ; 17 18 void Hotel : : Add( const s t r i n g &name) 19 { 20 this >name = name ; 21 t o t a l ++; 22 this >id = t o t a l ; 23 } 24 25 s t r i n g Hotel : : GetName ( ) 26 { 27 return name ; 28 } 29 30 void Hotel : : Print ( ) 31 { 32 cout << i d << " " << name << " " << GetTotal ( ) << endl ; 33 } 34 35 i n t Hotel : : t o t a l =0; 36 37 i n t main ( ) 38 { 39 Hotel h [ 1 0 0 ] ; 40 h [ 0 ]. Add( "Susan" ) ; 41 h [ 1 ]. Add( "Peter" ) ; 42 h [ 2 ]. Add( "John" ) ; 43 h [ 3 ]. Add( "Mary" ) ; 44 h [ 4 ]. Add( "Alice" ) ; 45 46 s t r i n g name ; 47 cin >> name ; 48 f o r ( i n t i = 0 ; i < Hotel : : GetTotal ( ) ; i++) 49 { 8

3 HOTEL 50 i f (h [ i ]. GetName ( ) == name) 51 { 52 h [ i ]. Print ( ) ; 53 break ; 54 } 55 } 56 return 0 ; 57 } 9

4 LIBRARY 4 Library 描述 以下是图书类 Book 的声明, 缺少实现部分, 请实现成员函数 class Book { private: string name; // 书名 string author; // 作者 int sale; // 销售量 public: Book(); Book(const string &name, const string &author, int sale); Book(const Book &book); ~Book(); void Print()const;// 显示数据 }; 然后在 main 中进行对象的构造 输入 在 main 函数中, 我们输入三行数据, 第一行是书的名称 ( 长度不超过 100, 可能含有空格 ), 第二行是作者的名字 ( 长度不超过 100, 可能含有空格 ), 第三行是销量 ( 整数类型 ) 类中有三个对应的成员变量, 分别为 name,author 和 sale, 利用题目中所给的构造函数来实例化对象 Book 有三个构造函数, 分别是有参构造函数和无参构造函数还有拷贝构造函数 : 1) 当输入的 name,author 和 sale 都为 -1 的时候, 请使用无参构造函数来实例化对象, 此时我们将 name 的默认值设置为 "No name",author 的默认值设置为 "No author",sale 的默认值设置为 0. 2) 当输入都为 0 的时候, 我们使用拷贝构造函数来处理, 这种情况具体在 main 函数中的实现是这样的 : Book bk1; Book bk2(bk1); 3) 其他情况下一律用有参数的构造函数来构造对象 输出 使用类中的 void Print() 方法来输出一定格式的字符串, 详见样例 样例输入 The Art of Computer Programming Donald Ervin Knuth 1000 样例输出 Name: The Art of Computer Programming Author: Donald Ervin Knuth Sale: 1000 提示 注意输出格式, 每个图书的信息占一行, 信息的项目之间用 \t 分隔, 最后以 \n 换行 请注意, 必须要用类 (class) 来实现代码, 否则不得分 可使用 std::getlin(cin, str); 读入一行 10

4 LIBRARY 1 #inclu de <iostream> 2 #include<s t r i n g > 3 using namespace std ; 4 5 c l a s s Book 6 { 7 p r i v a t e : 8 s t r i n g name ; // 书名 9 s t r i n g author ; // 作者 10 i n t s a l e ; // 销售量 11 public : 12 Book ( ) ; 13 Book( const s t r i n g &name, const s t r i n g &author, i n t s a l e ) ; 14 Book( const Book &book ) ; 15 ~Book ( ) ; 16 void Print ( ) const ; // 显示数据 17 } ; 18 19 Book : : Book ( ) 20 { 21 name = "No name" ; 22 author = "No author" ; 23 s a l e = 0 ; 24 } 25 26 Book : : Book( const s t r i n g &name, const s t r i n g &author, i n t s a l e ) 27 { 28 this >name = name ; 29 this >author = author ; 30 this >s a l e = s a l e ; 31 } 32 33 Book : : Book( const Book &book ) 34 { 35 this >name = book. name ; 36 this >author = book. author ; 37 this >s a l e = book. s a l e ; 38 } 39 40 void Book : : Print ( ) const 41 { 42 cout << "Name: " << name << "\t" ; 43 cout << " Author: " << author << "\t" ; 44 cout << "Sale: " << s a l e << endl ; 45 } 46 47 Book : : ~ Book ( ) 48 { 49 } 11

4 LIBRARY 50 51 i n t main ( ) 52 { 53 s t r i n g name ; 54 s t r i n g author ; 55 i n t s a l e ; 56 std : : g e t l i n e ( cin, name) ; 57 std : : g e t l i n e ( cin, author ) ; 58 cin >> s a l e ; 59 60 i f (name == "-1" && author == "-1" && s a l e == 1) 61 { 62 Book bk1 ; 63 bk1. Print ( ) ; 64 } 65 e l s e i f (name == "0" && author == "0" && s a l e == 0) 66 { 67 Book bk1 ; 68 Book bk2 ( bk1 ) ; 69 bk2. Print ( ) ; 70 } 71 e l s e { 72 Book bk (name, author, s a l e ) ; 73 bk. Print ( ) ; 74 } 75 76 return 0 ; 77 } 12