* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: 分数类 * 作 者: 冯珍珍 * 完成日期: 2012年3月25日 * 版 本 号: * 对任务及求解方法的描述部分 * 输入描述: * 问题描述: * 程序输出: * 程序头部的注释结束*/ #include <iostream> using namespace std; int gcd(int,int);//求最大公约数的函数声明 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(); //按照"nu/de"的格式,如"5/2"的形式输入 void simplify(); //化简(使分子分母没有公因子) void amplify(int n); //放大n倍,如2/3放大5倍为10/3 void output(int style=0); //输出:以8/6为例,style为0时,输出8/6; //style为1时,输出4/3; //style为2时,输出1(1/3),表示一又三分之一; //不给出参数和非1、2,认为是方式0 }; CFraction::CFraction(int nu,int de) //构造函数,初始化用 { if(de!=0) { nume=nu; deno=de; } else { cout<<"分母不能置为0!"<<endl; exit(0); } } void CFraction:: Set(int nu,int de) //置值,改变值时用 { if(de!=0) { nume=nu; deno=de; } } void CFraction:: input() //按照"nu/de"的格式,如"5/2"的形式输入 { char c; while(1) { cout<<"输入分数(m/n)"; cin>>nume>>c>>deno; if(c!='/') cout<<"格式不对!"<<endl; else if(deno==0) cout<<"分母不能为0!"<<endl; else break; } } void CFraction::simplify() //化简(使分子分母没有公因子) { int c=gcd(nume,deno); nume=nume/c; deno=deno/c; } void CFraction::amplify(int n) //放大n倍,如2/3放大5倍为10/3 { nume=nume*n; } void CFraction::output(int style) //输出:以8/6为例,style为0时,输出8/6; { int m; m=gcd(nume,deno); switch(style) { case 0:cout<<nume<<'/'<<deno;break; case 1:cout<<(nume/m)<<'/'<<(deno/m);break; //style为1时,输出4/3; case 2:cout<<(nume/deno)<<"("<<(nume%deno)/m<<'/'<<deno/m<<")";break;//style为2时,输出1(1/3),表示一又三分之一; default:cout<<nume<<'/'<<deno<<endl; //不给出参数和非1、2,认为是方式0z } cout<<endl; } int gcd(int x,int y) //求最大公约数函数定义 { int r; while(y!=0) { r=x%y; x=y; y=r; } return x; } int main() { CFraction c1; c1.output(0); //输出 c1.Set(8,6); //置值 c1.output(0);//输出 c1.amplify(4);//扩大倍数 c1.output(0);//输出 c1.input();//输入 c1.simplify(); c1.output(0); c1.output(1); c1.output(2); return 0; }
第五周任务二(分数类)
最新推荐文章于 2022-08-01 08:42:40 发布