题目1

【问题描述】

根据main测试函数设计有理数类CRational,数据成员由分子、分母组成(都是整型,应表示成最简形式),完成分数显示(如用户输入的分子是4,分母是8,输出:1/2)、两个分数相加、相乘等功能。main函数不得修改。提示:用分子分母的最大公约数分别除分子和分母即得最简分数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main()

{

int a,b,c,d;//接受两个CRational对象的分子和分母

cin>>a>>b>>c>>d;

CRational f1(a,b);//f1对象的分子为a,分母为b

CRational f2(c,d);

CRational f3=f1.add(f2);//f1+f2的结果保存到f3中

f3.show();//显示形式:分子/分母

f3=f1.multi(f2);//f1*f2的结果保存到f3中

f3.show();

return 0;

}

若输入:

-1 5 6 -20

将输出:

-1/2

3/50

【代码】

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <algorithm>
using namespace std;

class CRational{

//定义公共类型public
public:

//定义变量
int fz;//定义分子
int fm;//定义分母
//定义无参和含参变量
CRational(){
this->fz=0;
this->fm=1;
}
//this指针定义初始值0和1
CRational(int a, int b){
int c=__gcd(a,b);
fz=a/c;
fm=b/c;
}
//__gcd(a,b)是求a和b的最大公约数,需要导入"#include <algorithm>"这个库
//定义含参变量的分子和分母,如2,6则需要化简为1和3

//定义函数的用法和具体内容
CRational add(CRational c){
int x=c.fm * this->fm ;//定义新分数的分母x的值是由两个分数的分母相乘
int y=c.fz * this->fm + c.fm * this->fz ;//定义新分数的分子y的值是两个分数的分子分母交叉相乘求和
CRational result(y,x);//定义结果
return result;//返回结果
}//定义add这个函数,作用是求两个分子的和的最简值
CRational multi(CRational c){
int x=c.fm * this->fm ;//定义新分数的分母x的值是由两个分数的分母相乘
int y=c.fz * this->fz ;//定义新分数的分子y的值是由两个分数的分子相乘
CRational result(y,x);//定义结果
return result;//返回结果
}//定义multi这个函数,作用是求两个分子的积的最简值

//定义show的内容和最终呈现形态
void show(){
if(fm<0){
fz=-fz;
fm=-fm;
}
cout<<fz<<'/'<<fm<<endl;
//定义show
}

};


int main()

{

int a,b,c,d;//接受两个CRational对象的分子和分母

cin>>a>>b>>c>>d;

CRational f1(a,b);//f1对象的分子为a,分母为b

CRational f2(c,d);

CRational f3=f1.add(f2);//f1+f2的结果保存到f3中

f3.show();//显示形式:分子/分母

f3=f1.multi(f2);//f1*f2的结果保存到f3中

f3.show();

return 0;

}

题目2

【问题描述】

我们把形如z=a+bi(a,b均为实数)的数称为复数,其中a称为实部,定义一个复数类Complex,用show()函数显示形如 5-3i 6+2i的复数,增成员函数add(const Complex &t),实现对象本身加上复数t的操作,在主程序中进行测试。

【输入形式】

输入四个数,分别代表c1的实部,c1的虚部,c2的实部,c2的虚部

【输出形式】

输出c1,c2,相加的结果

【样例输入】

3 3 4 -3

【样例输出】

c1:3+3i

c2:4-3i

c3:7

【代码】

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<iostream>
using namespace std;
class Complex {
private:
double shi, xu;
public:
Complex(double a, double b);
void add(Complex J);//add函数定义
void show();//函数的结果输出
};
//两个初始化值的构造函数,实部和虚部
Complex::Complex(double a, double b) {
shi = a;
xu = b;
}
void Complex::add(Complex J) {
shi = shi + J.shi;
xu = xu + J.xu;
}
void Complex::show() {
if (shi == 0 && xu == 0) {
cout << 0 << endl;
}
else if (shi == 0) {
cout << xu << "i" << endl;
}
else if (xu == 0) {
cout << shi << endl;
}
else {
if (xu > 0) {
cout << shi << "+" << xu << "i" << endl;
}
else if (xu < 0) {
cout << shi << xu << "i" << endl;
}
}
}
int main() {
double x, y, z, h;
while (cin >> x >> y >> z >> h) {
Complex c1(x, y);//这里是调用两个初始化值的构造函数语法
Complex c2(z, h);//这里是调用一个初始化值的构造函数语法
cout<<"c1:";
c1.show();
cout<<"c2:";
c2.show();
c1.add(c2);//这里是利用c1类来调用参数是c2的add成员函数,c1提供一个shi加上c2的一个shi合成一个新的shi
cout<<"c3:";
c1.show();//结果输出
}
}

代码可能略有不足,请大佬多多指教