补做- 第五次实验-项目五
2017-05-08 13:16
190 查看
4000
一、问题及代码
[cpp] view
plain copy
/*
* 文件名称:Exbz5-5.cpp
* 作 者:程家琦
* 完成日期:2017 年 5 月 8 日
* 版 本 号: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;
}
二、运行结果
一、问题及代码
[cpp] view
plain copy
/*
* 文件名称:Exbz5-5.cpp
* 作 者:程家琦
* 完成日期:2017 年 5 月 8 日
* 版 本 号: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;
}
二、运行结果
相关文章推荐
- C++第五次剩余项目—数组选择(非实验和作业)
- C++第五次实验作业——项目一
- c++第五次实验项目一
- C++第五次实验数组1项目3
- c++第五次实验—项目一
- C++第五次实验——项目二
- c++第五次上机实验--项目一、项目五
- c++第五次上机实验:项目一-奇数偶数分组
- 补作业 第五次实验 项目5
- C++第五次实验-项目1:数组分离
- c++第五次实验—项目三:成绩
- C++第五次实验 项目2
- 补做-第五次实验-项目四
- C++第五次实验-项目2:数组选择
- C++第五次上机实验[项目一:数组分离]
- c++第五次实验——项目一:数组分离
- C++第五次实验——项目二
- 补作业 第五次实验 项目4
- c++第五次实验 项目二 正整数类
- 实验项目4――基本线性表就地逆置(顺序结构)