/* (程序头部注释开始) * 程序的版权和版本声明部分 * 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++第5周任务【任务2】本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。
最新推荐文章于 2024-02-12 23:45:00 发布