C++ Fraction类实现分数加乘运算无输出问题排查
问题原因
代码运行无输出是核心错误直接导致程序崩溃,外加逻辑失效共同造成的:
- 致命运行时错误:
simplify()方法的循环变量i初始值为0,循环内执行num%i、den%i时触发除零异常,程序会直接终止,不会产生任何输出,这是无输出的根本原因。 - 逻辑错误:
simplify()方法中虽然计算了最大公约数gcd,但计算完成后没有将分子、分母同除以gcd,约分逻辑完全不生效。 - 潜在隐患:原有逻辑没有处理分子为0、分数带负号的场景,遍历公约数时未对负数取绝对值,会出现计算结果不符合预期的问题。
修改后可运行代码
#include <iostream> #include <algorithm> #include <cstdlib> using namespace std; class Fraction { private: int num; int den; public: Fraction(int a, int b) { num = a; den = b; } void simplify() { // 分子为0时统一规约为0/1 if (num == 0) { den = 1; return; } int gcd = 1; int abs_num = abs(num); int abs_den = abs(den); int min_val = min(abs_num, abs_den); // 循环从1开始,避免除零错误 for (int i = 1; i <= min_val; i++) { if (abs_num % i == 0 && abs_den % i == 0) { gcd = i; } } // 执行约分操作 num /= gcd; den /= gcd; // 统一将负号放在分子位置,保证分母恒为正 if (den < 0) { num = -num; den = -den; } } void print() { cout << num << "/" << den << endl; } void add(Fraction const& f2) { int lcm = den * f2.den; int x = lcm / den; int y = lcm / f2.den; int n = x * num + y * f2.num; num = n; den = lcm; simplify(); } void multiply(Fraction const& f2) { num = num * f2.num; den = den * f2.den; simplify(); } }; int main() { Fraction f1(2, 3); Fraction f2(3, 5); f1.add(f2); cout << "加法运算后f1结果:"; f1.print(); cout << "加法运算后f2结果:"; f2.print(); f1.multiply(f2); cout << "乘法运算后f1结果:"; f1.print(); cout << "乘法运算后f2结果:"; f2.print(); return 0; }
运行预期输出
加法运算后f1结果:19/15 加法运算后f2结果:3/5 乘法运算后f1结果:19/25 乘法运算后f2结果:3/5
内容的提问来源于stack exchange,提问作者Ananya Sharma
相关产品推荐
相关产品推荐

