您的位置:首页 > 其它

补作业 第五次实验 项目5

2017-05-07 15:26 281 查看
一、问题及代码

/*
* 文件名称:分数类.cpp
* 作 者:赖豪运
* 完成日期:2017 年 5 月 7 日
* 版 本 号:v1.0
* 对任务及求解方法的描述部分:
* 输入描述:无
* 问题描述: C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如分数。我们可以自定义类支持这些数据类型。
  本任务将设计一个简单的分数类,完成对分数的几个运算
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include<iostream>
#include<Cmath>
using namespace std;
int gcd(int m, int n);
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
CFraction(int nu = 0, int de = 1);
void set(int nu = 0, int de = 1);
void input();
void simplify();
void amplify(int n);
void output(int style = 0);
};
CFraction::CFraction(int nu, int de)
{
if (de != 0)
{
nume = nu;
deno = de;
}
else
{
cerr << "初始化中发生错误,程序退出\n";
system("pause");
exit(0);
}
}

void CFraction::set(int nu, int de)
{
if (de != 0)
{
nume = nu;
deno = de;
}
}
void CFraction::input()
{
int nu, de;
char c;
while (1)
{
cout << "输入分数(m/n): ";
cin >> nu >> c >> de;
if (c != '/')
cout << "输入格式错误!\n ";
else if (de == 0)
cout << "分母不能为零!\n ";
else
break;
}
nume = nu;
deno = de;
}
void CFraction::simplify()
{
int n = gcd(deno, nume);
deno /= n;
nume /= n;
}
int gcd(int m, int n)
{
int r;
if (m<n) { r = m; m = n; n = r; }
while (r = m%n)
{
m = n;
n = r;
}
return n;
}
void CFraction::amplify(int n)
{
nume *= n;
}
void CFraction::output(int style)
{
int n;
switch (style)
{
case 0:
cout << "原样:" << nume << '/' << deno << endl;break;
case 1:
n = gcd(deno, nume);
cout << "化简形式: " << nume / n << '/' << deno / n << endl;break;
case 2:
cout << "带分数形式:" << nume / deno << '(' << nume%deno << '/' << deno << ')' << endl;break;
case 3:
cout << "近似值:" << nume / double(deno) << endl;break;
default:
cout << "默认原样:" << nume << '/' << deno << endl;
}
}
int main()
{
CFraction c1, c2(8, 6);
cout << "关于c1: " << endl;
c1.output(0);
cout << "改变c1: " << endl;
c1.set(2, 7);
c1.output();
cout << "输入c1: " << endl;
c1.input();
c1.output(0);
cout << "关于c2: " << endl;
c2.output(0);
c2.output(1);
c2.output(3);
c2.output(3);
c2.output();
cout << "将c2化简: " << endl;
c2.simplify();
c2.output(0);
cout << "将c2放大倍: " << endl;
c2.amplify(5);
c2.output(0);
c2.output(1);
system("pause");
return 0;
}

二、运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: