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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)