第五周 任务二扩展一(枚举类型)

来源:互联网 发布:淘宝里的企业店铺好吗 编辑:程序博客网 时间:2024/05/22 11:59
//【任务2】C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。//任务要求:完成下面类的设计,并在main()函数中自行定义对象,调用各成员函数,完成基本的测试。//任务2拓展1(选做):上面output(int style=0)中的输出方式style的类型最适合使用自定义的枚举类(见第7章)了,试着改造一下。#include<iostream>using namespace std;class CFraction{private:int nume;  // 分子int deno;  // 分母 public:CFraction(int nu = 0, int de = 1) : nume(nu), deno(de){};   //构造函数,初始化用void Set(int nu = 1,int de = 2);    //置值,改变值时用void input();    //按照"nu/de"的格式,如"5/2"的形式输入void Simplify();    //化简(使分子分母没有公因子)void amplify(int n);//放大n倍,如2/3放大5倍为10/3void output(int style = 0);//输出:以8/6为例,style为0时,输出8/6;                                //style为1时,输出4/3;                                //style为2时,输出1(1/3),表示一又三分之一;                                //不给出参数和非1、2、3,认为是方式0};void CFraction :: input(){char c;cout << "请输入一个分数(格式 nu/de):";while(1)      {  cin >> nume >> c >> deno;if(c != '/'){cout << "格式错误,请重新输入:";}elsebreak;}}void CFraction :: Set(int nu, int de){nume = nu;deno = de;}void CFraction :: Simplify(){int i;if(deno < nume)i = deno;else i = nume;for(; i > 0; --i){if(nume % i == 0 && deno % i == 0){nume = nume / i;deno = deno / i;break;}}}void CFraction :: amplify(int n){nume = nume * n;}void CFraction :: output(int style){enum OutStyle{original, simplified, mixed, approximate};//此处比原题目中多了一种方式:输出近似值 OutStyle pri = OutStyle(style);    switch(pri)    {case original: cout << nume << "/" << deno << endl;break;case simplified: Simplify();cout << nume << "/" << deno << endl;break;case mixed: cout << nume / deno << "(" << nume % deno << "/" << deno << ")" << endl;break;case approximate: cout << (float(nume) / float(deno)) << endl;break;default: cout << nume << "/" << deno << endl;break;}}void main(){CFraction CF;CF.input();CF.output();cout << endl;    CF.output(5);cout << endl;    CF.output(3);cout << endl;CF.output(1);cout << endl;CF.output(2);cout << endl;CF.amplify(5);CF.output();    cout << endl;CF.Set();CF.output();cout << endl;    CF.Set(3, 8);CF.output();    cout << endl;}

原创粉丝点击