您的位置:首页 > 其它

第六周项目1==分数类的雏形

2016-04-07 17:57 309 查看


问题及代码:

/*

*copyright (t) 2004,烟台大学计算机学院

*All rights reserved.

*文件名称:test.cpp

*作者:张晴晴

*完成日期:2016年4月7日

*版本号:v1.0

*问题描述:完成分数的几个运算。

*输入描述:分数及操作需要使用到的量。

*程序输出:输出按要求得到的数。

*/

#include<iostream>

using namespace std;

class cfraction

{

private:

int nume; // 分子

int deno;

int nume1;

int deno1; // 分母

public:

cfraction(int nu=0,int de=1); //构造函数,初始化用

void set(int nu=0,int de=1); //置值,改变值时用

void input(); //按照"nu/de"的格式,如"5/2"的形式输入

void simplify(); //化简(使分子分母没有公因子)

void amplify(); //放大n倍,如2/3放大5倍为10/3

void output(int style=0);

}; //输出:以8/6为例,style为0时,原样输出8/6;

cfraction::cfraction(int nu,int de):nume(nu),deno(de){}

void cfraction::set(int nu,int de) //置值,改变值时用

{

nume=nu;

deno=de;

}

void cfraction::input() //按照"nu/de"的格式,如"5/2"的形式输入

{

char p;

cout<<"请输入您要操作的分数:"<<endl;

cin>>nume>>p>>deno;

}

void cfraction::simplify() //化简(使分子分母没有公因子)

{

int nu=nume;

int de=deno;

int t;

while(de>0)//求最大公约数

{

t=nu%de;

nu=de;

de=t;

}

nume1=nume/nu;

deno1=deno/nu;

cout<<" 化简后为:";

cout<<nume1<<'/'<<deno1<<endl;

}

void cfraction::amplify()//放大n倍,如2/3放大5倍为10/3

{

int n;

cout<<"扩大倍数为:";

cin>>n;

nume=nume*n;

cout<<"扩大"<<n<<"倍后为:"<<nume<<'/'<<deno<<endl;

}

void cfraction::output(int style) //输出:以8/6为例,style为0时,原样输出8/6;

{

if(style==0)

cout<<"style0:您输入为:"<<nume<<'/'<<deno<<endl;

else if(style==1)

cout<<"style1:化简为:"<<nume1<<'/'<<deno1<<endl;

else if(style==2)

{

if(nume/deno<=1)

cout<<"style2:"<<nume<<'/'<<deno<<endl;

else if (nume/deno>1)

cout<<"style2:"<<nume/deno<<'('<<nume%deno<<'/'<<deno<<')'<<endl;

}

else if(style==3)

cout<<"style3:小数形式为:"<<(float)nume/(float)deno<<endl;

}

int main()

{

cfraction grade;

grade.input ();

grade.simplify();

grade.amplify();

grade.simplify(); //开始这个地方错了,应该在放大倍数之后再化简一次才能输出放大后被化简的值。

grade.output(0);

grade.output(1);

grade.output(2);

grade.output(3);

return 0;

}

运行结果:



知识点总结:注意主函数里面的函数运算顺序。

学习心得:求最大公约数的步骤记住!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: