/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者:张传新
* 完成日期:2012 年 3 月 19日
* 版 本 号: 1
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,
如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数
类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符
重载等积累些感性认识。
* 程序输出:
* 程序头部的注释结束
*/
#include<iostream>
using namespace std;
class CFraction
{private:
int nume; // 分子
int deno; // 分母
public:
CFraction(int nu=1,int de=2); //构造函数,初始化用
//void Set(int nu=0,int de=1); //置值,改变值时用(不知道怎么用啊!)
void input(); //按照"nu/de"的格式,如"5/2"的形式输入
void Simplify(); //化简(使分子分母没有公因子)
void S_Simplify(); //化简(以4/3为例,输出1(1/3),表示一又三分之一)
void amplify(int n); //放大n倍,如2/3放大5倍为10/3
void output(int style); //输出:以8/6为例,style为0时,输出8/6;
//style为1时,输出4/3;
//style为2时,输出1(1/3),表示一又三分之一;
//不给出参数和非1、2,认为是方式0
};
CFraction::CFraction(int nu,int de)
{
nume = nu;
deno = de;
}
/*void CFraction::Set(int nu=0,int de=1)
{
}*/
void CFraction::input()
{
int a,c;
char b;
cout<<"请输入分数(按照“a/b”的格式输入):"<<endl;
cin>>a;
cin>>b;
cin>>c;
nume = a;
deno = c;
}
void CFraction::Simplify()//化简(使分子分母没有公因子)
{
for(int i = 1;i <= nume && i <= deno;i++)
{
if(nume%i==0 && deno%i==0)
{
nume = nume/i;
deno = deno/i;
}
}
cout<<nume<<"/"<<deno<<endl;
}
void CFraction::S_Simplify()
{
int n;
if(nume>=deno)
{
n=nume/deno;
nume=nume%deno;
}
cout<<n<<"("<<nume<<"/"<<deno<<")"<<endl;
}
void CFraction::amplify(int n)
{
nume = nume*n;
cout<<nume<<"/"<<deno<<endl;
}
void CFraction::output(int style)
{
if(style == 1)
{
CFraction::Simplify();
}
else if(style == 2)
{
CFraction::S_Simplify();
}
else
{
cout<<nume<<"/"<<deno<<endl;
}
}
void main()
{
CFraction CF1;
CF1.input();
CF1.amplify(5);
CF1.output(1);
CFraction CF2;
CF2.amplify(7);
CF2.output(2);
}
运行结果:
上机感言:“void Set(int nu=0,int de=1);”是干什么用的,贺老师 ???