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

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

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

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

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

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

C/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

02

c_cpp

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++ 程序设计 实验 3 - 参考答案 MASTER 2017 年 5 月 21 日 1

extend

Microsoft PowerPoint - string_kruse [兼容模式]

C/C++ - 文件IO

untitled

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

C 1

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

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

第3章.doc

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

Microsoft PowerPoint - 10 模板 Template.pptx

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

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

untitled

untitled

untitled

C/C++ - 数组与指针

untitled

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

C/C++ - 函数

個 人 的 手, 拉 著 瞎 子 的 手 把 他 帶 往 村 外 的 時 候, 對 於 瞎 子 來 講, 那 個 人 的 手 和 耶 穌 的 手 有 沒 有 區 別? 沒 有! 為 什 麼 沒 有 區 別? 因 為 對 於 一 個 瞎 子 來 說, 手 和 耳 朵 就 是 他 接 觸 世 界, 瞭

IO

3.1 num = 3 ch = 'C' 2

Microsoft Word - CPE考生使用手冊 docx

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

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

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

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

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

untitled

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

untitled

Strings

Strings

nooog

FY.DOC

北京大学

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

C/C++ - 字符串与字符串函数

CC213

新・解きながら学ぶJava

Microsoft PowerPoint - L17_Inheritance_v4.pptx

提问袁小兵:

Microsoft Word - chap10.doc

Microsoft Word - 第3章.doc

C++ 程式設計

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

第七讲 继承与多态

CHAPTER VC#

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

CC213

Microsoft Word - 新1-12.doc

Microsoft Word cppFinalSolution.doc

C++11概要 ライブラリ編

untitled

第5章修改稿

Chapter 9: Objects and Classes

第一章

C/C++ 语言 - 循环

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

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("%

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

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

Microsoft PowerPoint - Class5.pptx

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

数据结构与算法 - Python基础

Eclipse C C++, or

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

新・解きながら学ぶC言語

C/C++ - 字符输入输出和字符确认

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

C

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


<4D F736F F D B0EABB79A4E5B8D5C344BBBCB065AAA9>


康體藝術

XV XV

无类继承.key

新・明解C言語入門編『索引』

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

ebook39-5

科学计算的语言-FORTRAN95

Chapter12 Derived Classes

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

沒有投影片標題

Microsoft Word - well_game.doc

Transcription:

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

1 PERSON 1 Person 题目描述 编写程序, 定义一个基类 Person, 包含 name 和 age 两个数据成员 ; 再由它派生出学生类 Student 和教师类 Teacher, 其中学生类添加学号 no 数据, 教师类添加职称 title 数据 ; 要求每个类均有构造函数 析构函数和显示数据的函数 使用以下函数运行你的程序 : int main() { Person p("mary", 18); p.show(); Student s("tom", 20, 10001); s.show(); Teacher t("john", 30, "Associate Professor"); t.show(); return 0; } 输入 无 输出 Constructor of Person Name: Mary, Age: 18 Constructor of Person Constructor of Student Name: Tom, Age: 20, No: 10001 Constructor of Person Constructor of Teacher Name: John, Age: 30, Title: Associate Professor Destructor of Teacher Destructor of Person Destructor of Student Destructor of Person Destructor of Person 样例输入 null 样例输出 Constructor of Person Name: Mary, Age: 18 Constructor of Person Constructor of Student Name: Tom, Age: 20, No: 10001 Constructor of Person Constructor of Teacher Name: John, Age: 30, Title: Associate Professor Destructor of Teacher Destructor of Person Destructor of Student Destructor of Person Destructor of Person 注意标点符号是半角字符,:, 后面有一个空格 2

1 PERSON 1 #include <iostream > 2 #include <s t r i n g > 3 using namespace std ; 4 5 c l a s s Person 6 { 7 p r o t e c t e d : 8 s t r i n g name ; 9 i n t age ; 10 p u b l i c : 11 Person ( const s t r i n g &name, i n t age ) 12 { 13 t h i s >name = name ; 14 t h i s >age = age ; 15 c o u t << " Constructor of Person\n" ; 16 } 17 ~Person ( ) 18 { 19 c o u t << " Destructor of Person\n" ; 20 } 21 void show ( ) 22 { 23 cout << "Name: " << name << ", " << "Age: " << age << endl ; 24 } 25 } ; 26 27 28 c l a s s Student : p u b l i c Person 29 { 30 p r i v a t e : 31 i n t no ; 32 p u b l i c : 33 Student ( const s t r i n g &nname, i n t aage, i n t number ) : Person (nname, aage ), no ( number ) 34 { 35 c o u t << " Constructor of Student\n" ; 36 } 37 ~Student ( ) 38 { 39 c o u t << " Destructor of Student\n" ; 40 } 41 void show ( ) 42 { 43 cout << "Name: " << name << ", " << "Age: " << age << ", " << "No: " << no << endl ; 3

1 PERSON 44 } 45 } ; 46 47 c l a s s Teacher : p u b l i c Person 48 { 49 p r i v a t e : 50 s t r i n g t i t l e ; 51 p u b l i c : 52 Teacher ( s t r i n g n, i n t a, s t r i n g t i ) : Person (n, a ), t i t l e ( t i ) 53 { 54 c o u t << " Constructor of Teacher\n" ; 55 } 56 ~Teacher ( ) 57 { 58 c o u t << " Destructor of Teacher\n" ; 59 } 60 void show ( ) 61 { 62 cout << "Name: " << name << ", " << "Age: " << age << ", " << " Title: " << t i t l e << endl ; 63 } 64 } ; 65 66 i n t main ( ) 67 { 68 Person p ( "Mary",18) ; 69 p. show ( ) ; 70 Student s ( "Tom",20,10001) ; 71 s. show ( ) ; 72 Teacher t ( "John",30, "Associate Professor" ) ; 73 t. show ( ) ; 74 return 0 ; 75 } 4

2 INPUTOUTPUT 2 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束, 没有其它格式输出 5

2 INPUTOUTPUT 1 #include <iostream > 2 #include <s t r i n g > 3 4 using namespace std ; 5 6 7 i n t main ( ) 8 { 9 s t r i n g name ; 10 i n t year ; 11 c i n >> name ; 12 c i n >> year ; 13 cout << "I am " << name << ", " << year << " years old.\n" ; 14 return 0 ; 15 } 6

3 REPLACECHAR1 3 ReplaceChar1 题目描述 输入字符串 ( 没有空格字符 ), 替换把其中的字符 'c' 替换成 'C' 并使用以下 main 函数 : int main(){ char str[256]; cin >> str; Replace(str, 'c', 'C'); cout << str << endl; return 0; } 输入描述 字符串 输出描述 结果 输入 abcdedgc 输出 abcdedgc 7

3 REPLACECHAR1 1 #i n c l u d e <iostream > 2 using namespace std ; 3 4 5 void Replace ( char * s t r, char chsrc, char chdst ) 6 { 7 while (* s t r ) 8 { 9 i f (* s t r==chsrc ) 10 { 11 * s t r = chdst ; 12 } 13 s t r ++; 14 } 15 } 16 17 i n t main ( ) { 18 char s t r [ 2 5 6 ] ; 19 c i n >> s t r ; 20 Replace ( s t r, 'c', 'C' ) ; 21 cout << s t r << endl ; 22 return 0 ; 23 } 8

4 REPLACECHAR2 4 ReplaceChar2 题目描述 输入 string 字符串 str( 可以包含空格字符 ), 替换把其中的字符 'c' 替换成 'C' int main(){ string str; // 补充输入 Replace(str, 'c', 'C'); cout << str << endl; return 0; } 输入描述 字符串 输出描述 结果 输入 abcdedgc 输出 abcdedgc 9

4 REPLACECHAR2 1 #i n c l u d e <iostream > 2 #i n c l u d e <s t r i n g > 3 using namespace std ; 4 5 6 void Replace ( s t r i n g &s t r, char chsrc, char chdst ) 7 { 8 f o r ( i n t i =0; i <s t r. l e n g t h ( ) ; i++) 9 { 10 i f ( s t r [ i ]==chsrc ) 11 { 12 s t r [ i ] = chdst ; 13 } 14 } 15 } 16 17 i n t main ( ) { 18 s t r i n g s t r ; 19 g e t l i n e ( cin, s t r ) ; 20 Replace ( s t r, 'c', 'C' ) ; 21 cout << s t r << endl ; 22 return 0 ; 23 } 10

5 DYNAMICARRAY 5 DynamicArray 题目描述 计算输入小数的和 输入第一行为小数个数, 第二行为小数 ( 空格隔开 ), 输出这些小数的和 输入 第一行为小数个数, 第二行为小数 ( 空格隔开 ) 输出 这些小数的和 输入 5 1.1 2.2 3.3 4.4 5.5 输出 16.5 11

5 DYNAMICARRAY 1 #i n c l u d e <iostream > 2 #i n c l u d e <s t r i n g > 3 using namespace std ; 4 5 6 double Sum( double a r r [ ], i n t n ) 7 { 8 double sum = 0. 0 ; 9 f o r ( i n t i =0; i <n ; i++) 10 sum += a r r [ i ] ; 11 return sum ; 12 } 13 14 double * Input ( i n t n ) 15 { 16 double * a r r = new double [ n ] ; 17 f o r ( i n t i =0; i <n ; i++) 18 c i n >> a r r [ i ] ; 19 return a r r ; 20 } 21 22 23 i n t main ( ) 24 { 25 i n t n ; 26 c i n >> n ; 27 double * a r r ; 28 a r r = Input ( n ) ; 29 cout << Sum( arr, n ) << endl ; 30 d e l e t e [ ] a r r ; 31 return 0 ; 32 } 12

6 ARRAY 6 Array 题目描述 计算输入小数的和 输入第一行为小数个数, 第二行为小数 ( 空格隔开 ), 输出这些小数的和 并使用以下 main 函数 int main() { int n; cin >> n; vector<double> arr; Input(arr, n); cout << Sum(arr) << endl; return 0; } 输入 第一行为小数个数, 第二行为小数 ( 空格隔开 ) 输出 小数的和 输入 5 1.1 2.2 3.3 4.4 5.5 输出 16.5 提示需要使用引用 以及 vector 的常用方法 如增加元素 push_back(), 向量的长度 size() 等 13

6 ARRAY 1 #i n c l u d e <iostream > 2 #i n c l u d e <vector > 3 using namespace std ; 4 5 6 double Sum( vector <double> &a r r ) 7 { 8 double sum = 0. 0 ; 9 f o r ( i n t i =0; i <a r r. s i z e ( ) ; i++) 10 sum += a r r [ i ] ; 11 return sum ; 12 } 13 14 void Input ( vector <double> &arr, i n t n ) 15 { 16 17 f o r ( i n t i =0; i <n ; i++) 18 { 19 double temp ; 20 c i n >> temp ; 21 a r r. push_back ( temp ) ; 22 } 23 } 24 25 26 i n t main ( ) 27 { 28 i n t n ; 29 c i n >> n ; 30 vector <double> a r r ; 31 Input ( arr, n ) ; 32 cout << Sum( a r r ) << endl ; 33 return 0 ; 34 } 14

7 STRUCT 7 Struct 题目描述 Vector2D 为二维坐标, 输入两个向量, 计算这两个相邻的和 并使用以下 main 函数测试 int main() { Vector2D v1,v2; Input(v1); Input(&v2); Vector2D v = Sum(v1, v2); } cout << v.x << " " << v.y << endl; return 0; 输入 第一行第一个向量, 第二行为第二个向量 输出 向量的和 输入 1.1 3.3 4.4 6.6 输出 5.5 9.9 15

7 STRUCT 1 #i n c l u d e <iostream > 2 #i n c l u d e <vector > 3 using namespace std ; 4 5 s t r u c t Vector2D 6 { 7 double x, y ; 8 } ; 9 10 void Input ( Vector2D &v ) 11 { 12 c i n >> v. x >> v. y ; 13 } 14 15 void Input ( Vector2D *v ) 16 { 17 c i n >> v >x >> v >y ; 18 } 19 20 21 Vector2D Sum( const Vector2D &v1, const Vector2D &v2 ) 22 { 23 Vector2D v ; 24 v. x = v1. x+v2. x ; 25 v. y = v1. y+v2. y ; 26 return v ; 27 } 28 29 30 i n t main ( ) 31 { 32 Vector2D v1, v2 ; 33 Input ( v1 ) ; 34 Input(&v2 ) ; 35 Vector2D v = Sum( v1, v2 ) ; 36 37 cout << v. x << " " << v. y << endl ; 38 return 0 ; 39 } 16

8 TEMPLATE1 8 Template1 描述 使用模板函数求最大值 使用如下 main 函数对程序进行测试 int main() { double a, b; cin >> a >> b; cout << Max(a, b) << endl; int c, d; cin >> c >> d; cout << Max(c, d) << endl; } return 0; 输入 两个小数连个整数 输出 最大小数最大整数 样例输入 10.2 9.3 9 10 样例输出 10.2 10 17

8 TEMPLATE1 1 #include <iostream > 2 using namespace std ; 3 4 template<c l a s s T> 5 T Max( const T &a, const T &b ) 6 { 7 i f ( a>b ) return a ; 8 return b ; 9 } 10 11 i n t main ( ) 12 { 13 double a, b ; 14 c i n >> a >> b ; 15 cout << Max( a, b ) << endl ; 16 17 i n t c, d ; 18 c i n >> c >> d ; 19 cout << Max( c, d ) << endl ; 20 21 return 0 ; 22 } 18

9 TEMPLATE2 9 Template2 描述 使用模板函数排序 使用如下 main 函数对程序进行测试 int main() { double a, b, c; cin >> a >> b >> c; Sort(a, b); cout << a << "\t" << b << endl; Sort(a, b, c); cout << a << "\t" << b << "\t" << c << endl; int d, e, f; cin >> d >> e >> f; Sort(d, e); cout << d << "\t" << e << endl; Sort(d, e, f); cout << d << "\t" << e << "\t" << f << endl; } return 0; 输入 三个小数三个整数 输出 两个排好序的小数三个排好序的小数两个排好序的整数三个排好序的整数 样例输入 -23.14 22.11-44.44 3 22 2 样例输出 -23.14 22.11-44.44-23.14 22.11 3 22 2 3 22 19

9 TEMPLATE2 1 #include <iostream > 2 using namespace std ; 3 4 template<c l a s s T> 5 void Sort (T &a, T &b ) 6 { 7 i f ( a<b ) return ; 8 T temp = a ; 9 a = b ; 10 b = temp ; 11 } 12 13 template<c l a s s T> 14 void Sort (T &a, T &b, T &c ) 15 { 16 Sort ( a, b ) ; 17 Sort (b, c ) ; 18 Sort ( a, b ) ; 19 } 20 21 i n t main ( ) 22 { 23 double a, b, c ; 24 c i n >> a >> b >> c ; 25 Sort ( a, b ) ; 26 cout << a << "\t" << b << endl ; 27 Sort ( a, b, c ) ; 28 cout << a << "\t" << b << "\t" << c << endl ; 29 30 i n t d, e, f ; 31 c i n >> d >> e >> f ; 32 Sort (d, e ) ; 33 cout << d << "\t" << e << endl ; 34 Sort (d, e, f ) ; 35 cout << d << "\t" << e << "\t" << f << endl ; 36 37 return 0 ; 38 } 20

10 PERIMETER 10 Perimeter 描述 编写一个园形类 Circle, 实现半径的输入 周长的计算和输出 使用如下 main 函数对程序进行测试 ( 其中 PI=acos(-1.0)) int main() { double r; cin >> r; Circle ci(a); cout << ci.perimeter(); return 0; } 输入 半径 输出 周长 ( 小数点后两位 ) 样例输入 3.21484 样例输出 20.20 圆周率的取值需要比较精确, 以保证计算结果的精度控制精度可能需要以下代码 #include<iostream> #include<iomanip> cout<<setiosflags(ios::fixed)<<setprecision(2); 21

10 PERIMETER 1 #include <iostream > 2 #include <iostream > 3 #include <iomanip> 4 #i n c l u d e <cmath> 5 using namespace std ; 6 7 double PI = acos ( 1.0) ; 8 c l a s s C i r c l e 9 { 10 p r i v a t e : 11 double r ; 12 p u b l i c : 13 C i r c l e ( double r =0.0) { t h i s >r=r ; } ; 14 double Perimeter ( ) { return 2*PI* r ; } 15 } ; 16 17 i n t main ( ) 18 { 19 double r ; 20 c i n >> r ; 21 C i r c l e c i ( r ) ; 22 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 ) ; 23 cout << c i. Perimeter ( ) ; 24 return 0 ; 25 } 22

11 SQUARE 11 Square 描述 编写一个正方形类 Square, 实现边长的输入 面积和周长的计算和输出 使用如下 main 函数对程序进行测试 int main() { double a; cin >> a; Square sq(a); } cout << "Area: "<< sq.area() << "\nperimeter: "<< sq.perimeter(); return 0; 输入 边长 输出 面积周长 样例输入 10.2 样例输出 Area: 104.04 Perimeter: 40.8 23

11 SQUARE 1 #include <iostream > 2 using namespace std ; 3 4 c l a s s Square 5 { 6 p r i v a t e : 7 double a ; 8 p u b l i c : 9 Square ( ) {a = 0. 0 ; } ; 10 Square ( double a ) { t h i s >a=a ; } ; 11 double Area ( ) { return a*a ; } 12 double Perimeter ( ) { return 4*a ; } 13 } ; 14 15 i n t main ( ) 16 { 17 double a ; 18 c i n >> a ; 19 Square sq ( a ) ; 20 21 cout << "Area: "<< sq. Area ( ) << "\nperimeter: "<< sq. Perimeter ( ) ; 22 return 0 ; 23 } 24

12 BOOK 12 Book 题目描述 完成图书类 Book( 包含书名, 作者, 销量 ), 并用以下 main 函数测试 Book 类 int main() { Book book1; book1.print(); string name, author; int sale; getline(cin, name); getline(cin, author); cin >> sale; } Book book2(name, author, sale); book2.print(); return 0; 输入 第一行书名第二行作者名第三行销量 输出 Name: 书名, Author: 作者, Sale: 销量 Name: 书名, Author: 作者, Sale: 销量 输入样例 The Art of Computer Programming Donald Ervin Knuth 1000 输出样例 Name: no, Author: no, Sale: 0 Name: The Art of Computer Programming, Author: Donald Ervin Knuth, Sale: 1000 25

12 BOOK 1 #include <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 p u b l i c : 12 Book ( ) 13 { 14 name = "no" ; 15 author = "no" ; 16 s a l e = 0 ; 17 } 18 Book ( const s t r i n g &n, const s t r i n g &a, i n t s ) 19 { 20 name = n ; 21 author = a ; 22 s a l e = s ; 23 } 24 void Print ( ) 25 { 26 cout<<" Name: "<<name<<", " ; 27 cout<<" Author: "<<author<<", " ; 28 cout<<"sale: "<<s a l e <<endl ; 29 } 30 ~Book ( ) {} 31 } ; 32 33 i n t main ( ) 34 { 35 Book book1 ; 36 book1. Print ( ) ; 37 38 s t r i n g name, author ; 39 i n t s a l e ; 40 g e t l i n e ( cin, name) ; 41 g e t l i n e ( cin, author ) ; 42 c i n >> s a l e ; 43 44 Book book2 (name, author, s a l e ) ; 45 book2. Print ( ) ; 26

12 BOOK 46 return 0 ; 47 } 27