问题及代码:
/*
*Copyright (c) 2016,烟台大学计算机学院
*All rights reserved.
*文件名称:zwj.cpp
*作 者:张伟晶
*完成日期:2016年4月2日
*版 本 号:v1.0
*
*问题描述:分数类的雏形
*输入描述:一个分数
*程序输出:各种形式的分数
*/
#include<iostream>
using namespace std;
class cfraction
{
private:
int nume; //分子
int deno; //分母
int s_nume;
int s_deno;
int a_nume;
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倍
void output(int style=0); // 输出:以8/6为例,style为0时,原样输出8/6
//style为1时,输出化简后形式4/3
//style为2时,输出1(1/3)的形式
//style为3时,用小数形式输出
//
};
cfraction::cfraction(int nu,int de):nume(nu),deno(de){}
void cfraction::input()
{
char temp;
cout<<"please input a number:";
cin>>nume>>temp>>deno;
}
void cfraction::simplify()
{
int r,x,y;
x=nume;
y=deno;
while(y!=0)
{
r=x%y;
x=y;
y=r;
}
s_nume=nume/x;
s_deno=deno/x;
}
void cfraction::amplify()
{
int n;
cout<<"请输入放大的倍数:";
cin>>n;
a_nume=s_nume*n;
}
void cfraction::output(int style )
{
int t;
if(style==0)
cout<<"style为0时:"<<nume<<'/'<<deno<<endl;
else if(style==1)
cout<<"style为1时:"<<s_nume<<'/'<<s_deno<<endl;
else if(style==2)
{
t=s_nume%s_deno;
if(t==0)
cout<<"style为2时:"<<nume<<'/'<<deno<<endl;
else
cout<<"style为2时:"<<t<<"("<<s_nume-s_deno*t<<'/'<<s_deno<<")"<<endl;
}
else if(style==3)
cout<<"style为3时:"<<(float)nume/(float)deno<<endl;
else if(style==4)
cout<<"化简为:"<<s_nume<<'/'<<s_deno<<endl;
else
cout<<"放大为:"<<a_nume<<'/'<<s_nume<<endl;
}
int main()
{
cfraction fenshu;
fenshu.input();
fenshu.simplify();
fenshu.output(4);
fenshu.amplify();
fenshu.output(5);
fenshu.output(0);
fenshu.output(1);
fenshu.output(2);
fenshu.output(3);
return 0;
}
运行结果:
知识点总结:
类
学习心得:
持续努力,保持激情。