223.5.17编程一小时打卡

一、问题描述:

相信同学们对复数运算符重载已经相当熟悉啦,那今天那我们来看看分数又该如何处理呢?定义一个分数类FS,有私有成员分子fz,分母fm。另有公有成员函数FS operator + (const FS &f)对运算符“+”进行重载,实现两个分数相加。题目首先给出一个整型数n,紧跟着2n行输入,输入形如3z4m,代表分子为3,分母为4。其中分母不为0,输入时分母可以为负数,但输出时分母必须为正数。
要求对分数进行两两求和,并化简。(备注说明:分数为0时,表示成0z1m,如果结果为负数,那么分子取负数,分母为正数)

二、解题思路:
首先,定义一个分数类,包含俩个私有成员数据分子分母,然后+定义为运算符重载,定义化简函数,最后在主函数中进行输入分数进行操作并输出结果。

 

三、代码实现:

复制代码
 1 #include<iostream>
 2 using namespace std;
 3 class FS {
 4     int fz, fm;
 5 public:
 6     void set(int z, int m);
 7     FS(int z = 0, int m = 1) :fz(z), fm(m) {}
 8     int yue(int ,int); 
 9     void show();
10     FS operator+(const FS& f);
11 };
12 void FS::set(int z, int m) {
13     fz = z; fm = m;
14 }
15 int FS::yue(int a, int b) { 
16     int t;
17     if (a < b) {
18         t = a; a = b; b = t;
19     }while (b) {
20         t = b;
21         b = a % b;
22         a = t;
23     }return a;
24 }
25 void FS::show() {
26     cout << fz << "z" << fm << "m\n";
27 }FS FS::operator+(const FS& f) {
28     int m = fm * f.fm;
29     int z = fz * f.fm + f.fz * fm;
30     int y = yue(m, z);
31     m /= y; z /= y;
32     if (m < 0)
33     {
34         m *= -1; z *= -1;
35     }return FS(z, m);
36 }
37 int main() {
38     int n,fz,fm,i,j;
39     cin>>n;
40     char a,b;
41     FS *f = new FS[n*2];
42     FS *f1 = new FS[n];
43     for(i=0;i<n*2;i++)
44     {
45         cin>>fz>>a>>fm>>b;
46         f[i].set(fz,fm);
47     }
48    for (i = 0, j = 0; i < n; i++, j += 2) {
49         f1[i] = f[j] + f[j + 1];
50     }
51     for(i=0;i<n;i++)
52     {
53         f1[i].show();
54     }
55         delete []f1;
56       delete []f;
57 }
复制代码

 

posted @   信2211-8李欣垚  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示