C++作业
task2_3
题目
教材习题4_20:定义满足要求的复数类Complex类
【问题描述】
定义一个复数类Complex,使得下面的代码能够工作。(注:下列代码需放在主函数中。)
Complex c1(3,5); //用复数3+5i初始化c1
Complex c2=4.5; //用实数4.5初始化c2
c1.add(c2); //将c1与c2相加,结果保存在c1中
c1.show(); //将c1输出(这时的结果应该是7.5+5i)
【输入形式】
无
【输出形式】
7.5+5i
【样例输入】
【样例输出】
7.5+5i
解答
1 |
|
ClassType c = value 相当于 ClassType c(value)
task3_1
题目
编写数学类,能求开平方,sin 绝对值,圆面积等操作
【样例输入输出】
input a number:3.5
the result of sqrt is:1.87083
the result of sin is:-0.350783
the result of fabs is:3
the result of fabs is:3.5
the result of area is:38.4845
解答
1 |
|
编写工具类, 使用静态方法. 构造函数最好给成private,不能实例化对象. 只能通过类名调用
task5_1
解答
1 |
|
派生类构造函数给继承的基类初始化
task6_3
题目
【问题描述】
从键盘中读入最多不超过50个学生的学生信息(包括空格隔开的姓名、学号、年龄信息,以学号从低到高排序)
人员类:包含姓名,年龄。
学生类:继承自人员类,增加学号。
【输入形式】
每次键盘读入最多不超过50个学生的学生信息:
第一行为学生人数;
后面每一行为空格隔开的学生学号、姓名、年龄,其中学号和年龄都是整数。
【输出形式】
分别以姓名顺序(从低到高)和年龄顺序(从低到高)将学生信息输出,每行输出一位学生的信息,其中学号占3位,姓名(英文)占6位,年龄占3位,均为右对齐。年龄相同时按姓名从低到高排序。两种顺序的输出结果用一行空行相隔。
【输入样例】
4
1 aaa 22
45 bbb 23
54 ddd 20
110 ccc 19
【输出样例】
1 aaa 22
45 bbb 23
110 ccc 19
54 ddd 20
110 ccc 19
54 ddd 20
1 aaa 22
45 bbb 23
解答
1 |
|
很基础的继承然后排序
要引入 iomanip
setw()设置输出流占位, 后面还可以跟setfill()指定填充符号
task7_3
题目
【问题描述】
下面的程序能得到预期的结果吗?如何避免类似问题的发生?
请修改程序,使它得到我们想要的结果。即希望两个输出的值相同。
提示:struct在C++中也可以用来定义类,它与class的不同在于struct定义的类成员的默认访问权限是public。
#include
using namespace std;
struct Base1 {int x;};
struct Base2 {float y;};
struct Derived : Base1,Base2{};
int main()
{
Derived *pd=new Derived;
pd->x=1;pd->y=2.0f;
void *pv = pd;
Base2 pb=static_cast<Base2>(pv);
cout<
delete pd;
return 0;
}
【输入形式】
无
【输出形式】
2 2
解答
1 |
|
task9_1
题目
对类Point重载“++”(自增)、“–”(自减)运算符,要求同时重载前缀和后缀。
解答
1 |
|
task9_2
题目
定义一个时间类CTime,分钟和秒钟是其两个私有成员数据。输入一个起始时间和一个结束时间(起始时间早于结束时间),通过运算符重载-(减号),计算这两个时间相隔多少秒钟。说明:这两个时间在同一小时之内,且采用60分钟60秒钟的计时分式,即从00:00-59:59。
解答
1 |
|
task10_1
题目
约瑟夫问题:n个骑士编号1,2,…,n,围坐在圆桌旁。编号为1的骑士从1开始报数,报到m的骑士出列,然后下一个位置再从1开始报数,找出最后留在圆桌旁的骑士编号。
解答
1 |
|
调试了半天, 主要实现迭代器怎么取模, 返回迭代器之间的距离用std::distance().
第一眼想到方法的是不改变vector大小:
1 |
|
6-47
1 | // 表驱动法 |
task12
1 |
|

写的另一种解法, 很巧妙
1 |
|
1 |
|
1 |
|