C++第5周任务【任务2】本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。
2012-03-21 12:01
1316 查看
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: C++中提供了多种基本的数据类型 * 作 者:李洪悬 * 完成日期: 2011 年 3 月 20 日 * 版 本 号: * 对任务及求解方法的描述部分 * 输入描述: * 问题描述: * 程序输出: * 程序头部的注释结束 */
【任务2】C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。 任务要求:完成下面类的设计,并在main()函数中自行定义对象,调用各成员函数,完成基本的测试。 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 };
#include <iostream> using namespace std; int gcd(int a,int b);//求最大公约数 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 }; int main() { CFraction cf; cf.set(); cf.input(); cf.simplify(); cf.amplify(4); cf.output(2); system ("Pause"); return 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() { cout << "请输入分数(m/n):" << endl; int nu,de; while(1) { char c; cin >> nu >> c >> de; if(c != '/') { cout << "输入格式不对!" << endl; } else if(de == 0) { cout << "分母不能为0!" << endl; } else break; } nume = nu; deno = de; } int gcd(int a, int b)////求最大公约数 { int c; while(b != 0) { c = a % b; a = b; b = c; } return a; } void CFraction::simplify() { int t; t = gcd(nume,deno); nume = nume / t; deno = deno / t; } void CFraction::amplify(int n)////放大n倍,如2/3放大5倍为10/3 { nume = nume * n; cout << nume << '/' << deno << endl; } void CFraction::output(int style) { int x; switch (style) { case 0: cout << nume << '/' << deno << endl; case 1: x = gcd(nume,deno); cout << nume / x << '/' << deno / x << endl; break; case 2: x = gcd(nume,deno); nume = nume / x; deno = deno / x; cout << (nume / deno) << '(' << (nume %deno)<< '/' << deno << ')' << endl; break; default : cout << nume << '/' << deno << endl; } }
相关文章推荐
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- 《第五周实验报告2-1》---设计一个简单的分数类,完成对分数的几个运算
- 第十五周实验--任务2--设计分数类,开发一个窗口式程序,可以完成分数的四则运算。
- c++第八周【任务3】实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
- 第十五周C++【任务二】设计分数类,开发一个窗口式程序,可以完成分数的四则运算
- 第八周实验任务三--实现分数类中的运算符重载并可以完成分数的加减乘除、求反、比较的运算
- 《第五周任务二》设计分数类,完成对分数的运算
- 第八周任务三实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
- 《C++第八周实验报告3-1》---实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算
- C++第5周任务【任务4】设计一个学生类,包括学号(num)和成绩(score)。建立一个对象数组
- 第八周实验报告任务3 实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除,求反,比较6种关系的运算。
- 第八周实验任务三--实现分数类中的运算符重载并可以完成分数的加减乘除、求反、比较的运算
- c++设计一个分数类。要求:1.分类包含的分数运算有:连个分数的加、减、乘、除运算。
- 第八周上机任务四--实现分数类中的运算符重载,分数类中的对象可以和整型数进行四则运算,且运算符合交换律
- 【java学习记录】3.采用面向对象的方法设计一个能对复数(Complex)进行加、减、乘法的简单运算的程序
- (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) (4)设计一个测试类
- 实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算
- 第8章-任务4-实现分数类中的运算符重载(分数与整数运算)
- 第8章-任务4-实现分数类中的运算符重载(分数与整数运算)
- 一个基于jQuery延迟对象Deferred的异步任务处理方法