C++|作业训练(7)
问题1
三维空间中的点可以看作是三维向量,两个三维向量相减可以用这两点之间的距离来表示,构造一个 三维向量类multVector,重载“-”减号运算符计算两个三维向量之间的距离。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using namespace std;
class multVector {
private:
float x, y, z;
public:
multVector() { x = 0.0, y = 0.0, z = 0.0; }
multVector(float x, float y, float z) :x(x), y(y), z(z) {}
float operator- (const multVector& m)
{
return sqrt((this->x - m.x) * (this->x - m.x) + (this->y - m.y) * (this->y - m.y) + (this->y - m.z) * (this->y - m.z));
}
};
int main()
{
float x1, y1, z1;
float x2, y2, z2;
cout << "请输入第一个点的坐标" << endl;
cin >> x1 >> y1 >> z1;
multVector m1(x1, y1, z1);
cout << "请输入第二个点的坐标" << endl;
cin >> x2 >> y2 >> z2;
multVector m2(x2, y2, z2);
cout << "两点之间的距离是:" << endl;
cout << m2 - m1 << endl;
return 0;
}
问题2
给一个大小为2n(n为正整数)的数组,计算数组中相邻的两个元素的差,该差值构成一个新的,大小为原来数组一半,即大小为n的数组。例如原有一个大小为6的整形数组:{21, 15, 7, 43,12,9 },两个相邻元素中后一个减前一个得到新的数组:{15-21,43-7, 9-12}={-6, 36, -3}。同理,一个浮点型数组也可以做同样的运算,即数组元素类型作为参数可以变化。利用函数模板方法实现这个算法。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using namespace std;
template <class T>
void func(T *a,int n)
{
for (int i = 0;i < n-1;i++)
{
a[i] = a[i + 1] - a[i];
if (i % 2 == 0)
{
cout << a[i] << "\n";
}
}
}
int main()
{
int n;
cout << "请输入数组元素个数(偶数):" << endl;
cin >> n;
if (n % 2 == 0)
{
int* a = new int[n];
cout << "请输入数组元素:" << endl;
for (int i = 0;i < n;i++)
{
cin >> a[i];
}
func(a, n);
delete[]a;
}
else
{
cout << "请输入偶数!!" << endl;
}
}
问题3
给自己设计一个个人记账小程序。假设你有两张卡,一个是工行储蓄卡,一个是纺大食堂饭卡,构造一个Account类,这两张卡作为这个类的对象,记录和显示这两个卡的交易情况以及两张卡的余额。同时用一个静态成员变量来记录两个卡总的余额。(该题总分16分) 参考要求: 构造一个Account类。数据成员包括:卡余额:Balance,卡名称:CarName,静态成员变量用于统计两个卡的总余额:TotalBalance;项目名称:Item,用于记录消费或者收入名称,可以用一个字符串数组。如吃一次晚餐,可以记作:“晚餐”,如收到父母打款,可以记作:“父母给生活费”等,金额amount,用于记录每一次花费或者收入的金额,可以用一个浮点型数组。(2分) 成员函数:一个构造函数,用于初始化你的卡对象。(3分)成员函数Transaction,用于记录你的消费或者收入,两个参数分别为:项目和金额,收入是金额为正,消费是金额为负。(3分)成员函数Display,用于显示你当前的余额和所有交易情况。(3分)在main函数中实现至少一次收入和消费,然后显示当前两个卡的余额和交易情况。
1 |
|
问题4
工程预算一般包括材料费用和人工费用,这两个费用都由净费用以及管理费用之和构成。其中管理费用由净费用乘上费率产生。这两个费用的净费用计算方法及费率都不一样。其中材料费用的净费用的计算方法为材料数量乘以材料单价。人工费用的净费用的计算方法为人员工资加上员工福利。工程总预算由这两个费用总和构成,用类继承及多态方法编程实现这样工程预算的计算。(该题总分为16分) (1)构造一个预算类:Budget类,包含一个计算费用的虚函数。(4分) (2)以这个类作为基类,派生出两个派生类:材料类:Material(3分),人工类:Labour。(3分) (3)在main函数中用多态方法动态联编实现工程预算的计算。(6分) 参考要求如下: Budget 基类,这个类中包括成员变量:名称:Name,可用于保存每个对象的名称,如材料,人工。 净费用:netCost,用以保存净费用。费率:FeeRate,用以保存管理费率。总费用:Cost,用于保存费用,Cost计算方法为:Cost=netCost(1+FeeRate/100.00)。包括成员函数:成员函数:Display,用于显示净费用netCost,费率FeeRate,总费用Cost。虚函数:GetBudget,用于计算每项的总费用。 派生类:材料 Material类,包含数量Amount和单价Price两个成员变量。净费用的计算方法为数量价格,管理费费率为:3.12%。例如:材料数量为11吨,每吨单价为1.2万元,则净费用为111.2=13.2万元,加上管理费,则材料总费用为13.2(1+3.12%)=13.6188万元。 派生类:人工 Labour类,包含工资Salary和福利Welfare两个成员变量,净费用的计算方法为工资+福利,管理费率为:14.6%。例如:工资为9万元,福利为3万元,则净费用为9+3=12万元,加上管理费,则人工总费用为(9+3)*(1+14.6%)=13.752万元。 在两个派生类中,覆盖GetBudget这个虚函数,按照不同的计算方法计算出总费用。 在main函数中,构造两个派生类对象,两个派生类有各自的构造函数来初始化各自数据,要求用动态联编方法实现GetBudget计算出各个派生类的总费用,并计算出总预算金额。不要求键盘输入数据,输出格式不作严格要求,最终参考输出结果如下图所示。
1 |
|