Hello,大家好,这是我的第一篇博客,写得不好之处请见谅。
这学期的软件工程课上,老师给我们布置了一道题目:
编写一个程序:它可以读入一个写有很多数学算式的txt文档。对于每一条算式,先请用户输入算式答案,再由程序自动计算算式答案。若用户输入正确,则提示正确,若输入错误,则提示错误和显示正确答案。要求算式含有真分数和假分数。
拿到这道题目我首先想到的是原来数据结构课所学过的中缀表达式相关知识,即我们输入的数学算式都是中缀表达式形式,我们要计算这个式子,先要将它转换为后缀表达式的形式,然后再计算这个后缀表达式即可。在原来的问题中,算式中的数字类型都是double型,这次换为分数型。
-
增加一个分数类Fraction,用两个整型分别来存储它的分子和分母。用运算符重载的方法来重新定义+-*/符号运算。运算符重载<<,使其按分数格式输出。
-
之前的程序读入算式中的数字后都存储为double型,现改为存储成原数字/1的形式。
以下是Fraction类的类定义代码:
1 #pragma once 2 #include <iostream> 3 4 using namespace std; 5 6 class Fraction 7 { 8 public: 9 Fraction(); 10 Fraction(int n); 11 Fraction(int n, int d); 12 ~Fraction(); 13 int numerator; 14 int denominator; 15 Fraction operator + (Fraction f); 16 Fraction operator - (Fraction f); 17 Fraction operator * (Fraction f); 18 Fraction operator / (Fraction f); 19 friend ostream &operator<< (ostream &out, Fraction &f); 20 };
以下是Fraction类的函数实现代码:
1 #include "stdafx.h" 2 #include "Fraction.h" 3 4 Fraction::Fraction() 5 { 6 } 7 8 Fraction::Fraction(int n):numerator(n), denominator(1) 9 { 10 } 11 12 Fraction::Fraction(int n, int d): numerator(n), denominator(d) 13 { 14 } 15 16 Fraction::~Fraction() 17 { 18 } 19 20 Fraction Fraction::operator + (Fraction f) { 21 return Fraction(numerator * f.denominator + denominator * f.numerator, denominator * f.denominator); 22 } 23 24 Fraction Fraction::operator - (Fraction f) { 25 return Fraction(numerator * f.denominator - denominator * f.numerator, denominator * f.denominator); 26 } 27 28 Fraction Fraction::operator * (Fraction f) { 29 return Fraction(numerator * f.numerator, denominator * f.denominator); 30 } 31 32 Fraction Fraction::operator / (Fraction f) { 33 return Fraction(numerator * f.denominator, denominator * f.numerator); 34 } 35 36 ostream& operator << (ostream &out, Fraction &f) { 37 out << f.numerator << "/" << f.denominator; 38 return out; 39 }
当前测试结果如图:
还存在的问题:
- 没有约分
- 没有做算式录入、判断等部分