C++分数计算器

C++分数计算器各种分数计算类型都能计算

代码:https://mbd.pub/o/bread/ZZeZk5hx

一 目的

(1)定义一个整数类。 定义一个分数类,由整数类派生。能对分数进行各种计算和输入/输出。可进行分数的加、减、乘和除法等四则运算。

流程图:
在这里插入图片描述
流程图
在这里插入图片描述

二 需求分析

1、问题描述

实现分数的计算器功能,对分数进行四则运算和输入/输出。

2、需求以及实现功能介绍

(1)定义整数类和分数类。其中,包括构造函数、析构函数、显示函数等。

(2)输入/输出:对流提取和流插入运算符进行重载。

(3)计算功能:可进行分数的加、减、乘和除法运算。

(4)化简功能:将分数化简为最简分数。

(5)异常处理功能:分数中分母不能为零。

(6)菜单功能:每种功能的操作都是在菜单中进行相应选择。

3、设计步骤

根据系统功能要求,可以将问题解决分为以下步骤:

(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;

(2)分析系统中的各个实体及它们之间的关系;

(3)根据问题描述,设计系统的类层次;

(4)完成类层次中各个类的描述;

(5)完成类中各个成员函数的定义;

(6)完成系统的应用模块;

(7)功能调试;

(8)完成系统总结报告。

三 概要设计

1、函数类设计

(1)正数类设计

class Integer      //定义一个整数类

{

  protected:     //私有属性 

     int fz;    //分子 

     int fm;    //分母 

  public:            //公有属性 

     Integer(int a=0,int b=1):fz(a),fm(b){}

     ~Integer(){}    //析构函数 

     void display();  //显示函数 

};

2、整数类派生分数类的关系

3、所有函数和类的定义

Fraction(int a=0,int b=1):Integer(a,b){}//分数类成员

            friend istream & operator>>(istream &input,Fraction &); //输入重载

            friend ostream & operator<<(ostream &output,Fraction &); //输出重载    

            Fraction operator+(Fraction &c);//重载+运算符(分数和分数) 

            Fraction operator+(int n);//重载+运算符(整数与分数)               

            Fraction operator-(Fraction &c);//重载-运算符(分数与分数) 

            Fraction operator-(int n);//重载-运算符(整数与分数) 

            friend Fraction operator-(int n,Fraction &c);                  

            Fraction operator*(Fraction &c);//重载*运算符(分数与分数) 

            Fraction operator*(int n);//重载*运算符(整数与分数)                

            Fraction operator/(Fraction &c);//重载/运算符(分数与分数)

            Fraction operator/(int n);//重载/运算符(整数与分数) 

            friend Fraction operator/(int n,Fraction &c);              

            Fraction predigest();//约分函数

            void display();//输出函数 

main() //主函数

四 详细设计

设计流程图:

在这里插入图片描述

五 调试分析

1、调试方法

首先打开开发软件Visual Studio,运行程序,出现错误修改再运行,直至运行结果0 error , 0 warning 结束。接着进入程序界面,看程序能否实现所要求的各项功能,再作下一步的修改。

2、调试时出现的问题及解决方案:

(1)当多次运行程序时,屏幕被运行数据占满,显得很杂乱。

解决方案:引用清屏函数,及时销掉所占内存。

(2)在进行运算时要实现反复运算得有返回功能,由于我们程序分支,不能正常的调用完毕后进入下一个循环,自动返回。

解决方案:用if语句,判断输入功能对于的数字,然后运行函数块。

(3)还有一些小错误,比如未声明就直接使用变量、未对一些变量初始化、声明是空值函数却有返回值、缺少";"、使用getch() , system("cls")却                                              缺少相应的头文件﹐出现警告。

六 测试结果

1、主界面调试

在这里插入图片描述

2、分数与整数运算调试:
在这里插入图片描述

七 用户使用说明

按照屏幕上的提示进行操作,输入整数与分数,其次按照页面弹出来的文字进行分数与分数的四则运算或者整数与分数的四则运算。分数计算器程序的每种功能都可以用菜单选项列出,用户可以根据需要选择相应的菜单项,从而执行不同的子程序以完成相应的功能。增加运算符重载功能,使所设计的分数计算器可以进行四则运算&幂运算&逻辑运算。四则运算&幂运算可以用菜单选项列出,用户可以根据需要选择相应的运算。程序具有判断功能,当有非法的输入时(如分母等于零等),能给出提示信息并退出运算。

八 课程设计总结

在这次C++编程过程中,我基本完成了编写程序和实习要求,经过知识的考验,让我深有感触,也让我知道编程不仅需要聪明的头脑,而且也需要耐心和恒心。在程序调试过程中,出现了很多错误和本不应该出现的毛病,然在老师的指导和同学们的帮助下,我把调试过程中的错误和毛病一一更正,完成了调试和编写程序过程,在这里我对谆谆教导我的老师和鼎立相助的同学们表示感谢。

在这次设计中,我清楚的知道自己的知识结构和能力水平的不足,在原有的基础之上更应该有待加强,学人之长,补己之短,也要严谨认真的对待每一个问题。同时也要加强自身的自学能力和提高自我解决问题的能力水平,在这次实习中,我清楚的知道自己的知识结构和能力水平的不足,在原有的基础之上更应该有待加强,学人之长,补己之短,也要严谨认真的对待每一个问题。同时也要加强自身的自学能力和提高自我解决问题的能力水平。

在设计过程中涉及到派生类,必须从整数类中派生分数类,还得有构造函数、析构函数、显示函数等。 虽说上面这些老师都讲过,但我还没有掌握住,不得不把书拿出来看一遍。随后就是分数与分数,分数与整数,整数与分数的约分了,若果两个分数相加还得同分,约分,求出最大公约数。又上网补习了这一方面的知识,还好网上的这些知识比较容易理解,在这方面没有浪费多长时间。最后无非就是输入输出流的重载了,说真的我对这些知识懵懵懂懂,一知半解。途中这方面出了问题,也不知道哪错了,日志里就是说输入输出流里面的问题,于是又上网查了些这些问题,最后不知道改了哪个地方,程序好了,能运行了,搞得我很懵逼。既然程序能运行了,我就试着运行了,首先我运行了分数与整数的运算,没啥问题,对我来说是个很好的信号。随后我又运行了分数与分数运算,出错了结果为0,我试着查找问题所在,最后原来是赋值错了,修改完毕,运行完美,到此结束,程序结束。虽说做本次实验途中出现了许多问题,但最后也都被解决了。从中看出了自己的不足之处有很多,希望通过本次实验以后自己能汲取这些失败的教训,为以后的学习打好坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/214526.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv8 区域计数 | 入侵检测 | 人员闯入

大家好,昨天的 YOLOv8 新增加了一个功能,区域计数,用这个功能我们能实现很多的任务, 比如入侵检测,流量统计,人员闯入等,使用方式也非常的方便,但是一定要使用最新版的 YOLOv8 代码(2023/12/03更新的代码)。 低版本是不具备这个功能的,上面是演示效果。 使用非常的方…

Leetcode2661. 找出叠涂元素

Every day a Leetcode 题目来源&#xff1a;2661. 找出叠涂元素 解法1&#xff1a;哈希 题目很绕&#xff0c;理解题意后就很简单。 由于矩阵 mat 中每一个元素都不同&#xff0c;并且都在数组 arr 中&#xff0c;所以首先我们用一个哈希表 hash 来存储 mat 中每一个元素的…

C语言中的动态内存管理

在C语言中&#xff0c;动态内存管理是通过一系列的标准库函数来实现的&#xff0c;这些函数包括malloc, free, calloc 和 realloc。它们允许程序在运行时动态地分配和释放内存&#xff0c;这是管理复杂数据结构&#xff08;如链表、树等&#xff09;时非常有用的功能。 为什么…

软件生命周期四个阶段SDLC

软件产品生命周期&#xff1a;指软件产品研发全部过程、活动和任务的结构框架。 产品的生命周期一般包括四个阶段&#xff1a;引入期、成长期、成熟期和衰退期&#xff0c;在不同的阶段中&#xff0c;市场对产品的反应不同&#xff0c;其销售特点不同&#xff0c;因而产品管理的…

【强化学习算法】Q-learning原理及实现

实现代码github仓库&#xff1a;RL-BaselineCode 代码库将持续更新&#xff0c;希望得到您的支持⭐&#xff0c;让我们一起进步&#xff01; 文章目录 1. 原理讲解1.1 Q值更新公式1.2 ε-greedy随机方法 2. 算法实现2.1 算法简要流程2.2 游戏场景2.3 算法实现 3. 参考文章 1. 原…

数据挖掘实战-基于word2vec的短文本情感分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

专业爬虫框架 -- scrapy初识及基本应用

scrapy基本介绍 Scrapy一个开源和协作的框架&#xff0c;其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的&#xff0c;使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。 但目前Scrapy的用途十分广泛&#xff0c;可用于如数据挖掘、监测和自动化测试等领域…

HCIP —— 双点重发布 + 路由策略 实验

目录 实验拓扑&#xff1a; 实验要求&#xff1a; 实验配置&#xff1a; 1.配置IP地址 2.配置动态路由协议 —— RIP 、 OSPF R1 RIP R4 OSPF R2 配置RIP、OSPF 双向重发布 R3配置RIP、OSPF 双向重发布 3.查询路由表学习情况 4.使用路由策略控制选路 R2 R3 5.检…

【Google2023】利用TiDE进行长期预测实战(时间序列密集编码器)

一、本文介绍 大家好&#xff0c;最近在搞论文所以在研究各种论文的思想&#xff0c;这篇文章给大家带来的是TiDE模型由Goggle在2023.8年发布&#xff0c;其主要的核心思想是&#xff1a;基于多层感知机&#xff08;MLP&#xff09;构建的编码器-解码器架构&#xff0c;核心创…

GEE:梯度卷积

作者:CSDN @ _养乐多_ 本文将介绍在 Google Earth Engine(GEE)平台上,进行梯度卷积操作的代码框架、核心函数和多种卷积核,比如 Roberts、Prewitt、Sobel、各向同性算子、Compass算子、拉普拉斯算子、不同方向线性检测算子等。 结果如下图所示, 文章目录 一、常用的梯度…

实现一个简单的网络通信下(udp)

时间过去好久了&#xff0c;先回忆一下上一篇博客的代码&#xff01;&#xff01; 目前来看&#xff0c;我们客户端发一条消息&#xff0c;我服务器收到这一条消息之后呢&#xff0c;服务器也知道了是谁给我发来的消息&#xff0c;紧接这就把这条消息放进buffer当中&#xff0c…

POJ 3734 Blocks 动态规划(矩阵的幂)

一、题目大意 我们要给排成一行的区块涂颜色&#xff0c;可以选择红、绿、蓝、黄四种&#xff0c;要求红和绿的块都必须是偶数个&#xff0c;求出最终的涂色方式&#xff0c;对10007取余。 二、解题思路 我们设三个数列A&#xff0c;B和C&#xff1a; 1、A代表红色和绿色都…

百度收录批量查询工具,免费SEO优化排名工具

拥有一个在搜索引擎中得到良好收录的网站对于个人和企业都至关重要。而百度&#xff0c;作为中国最大的搜索引擎&#xff0c;其收录情况直接影响着网站的曝光度和流量。 百度搜索引擎是中文用户获取信息的重要途径之一。而在这个竞争激烈的网络环境中&#xff0c;了解自己网站…

QT 中 QTimer 类 备查

基础 // 指定了父对象, 创建的堆内存可以自动析构 QTimer::QTimer(QObject *parent nullptr);// 根据指定的时间间隔启动或者重启定时器, 需要调用 setInterval() 设置时间间隔 void QTimer::start();// 启动或重新启动定时器&#xff0c;超时间隔为msec毫秒。 void QTimer::…

游泳馆会员服务预约管理系统预约小程序效果如何

游泳馆在各地每天都有大量用户前往&#xff0c;夏季室外、冬季室内也是学习游泳技术和休闲娱乐的好地方&#xff0c;而消费者大多是年轻人和家长带的孩子&#xff0c;这部分群体更显年轻化&#xff0c;因此在如今互联网环境下&#xff0c;传统商家需要进一步赋能客户消费路径。…

共识问题:区块链如何确认记账权?

区块链可以说是最近几年最热的技术领域之一&#xff0c;区块链起源于中本聪的比特币&#xff0c;作为比特币的底层技术&#xff0c;本质上是一个去中心化的数据库&#xff0c;其特点是去中心化、公开透明&#xff0c;作为分布式账本技术&#xff0c;每个节点都可以参与数据库的…

力扣 --- 最长公共前缀

题目描述&#xff1a; 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"…

蓝桥杯物联网竞赛_STM32L071_8_ADC扩展模块

原理图&#xff1a; 扩展模块原理图&#xff1a; RP1和RP2分别对应着AIN1和AIN2&#xff0c;扭动它们&#xff0c;其对应滑动变阻器阻值也会变化 实验板接口原理图&#xff1a; 对应实验板接口PB1和PB0 即AN1对应PB1, AN2对应PB0 CubMx配置&#xff1a; ADC通道IN8和IN9才对…

Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(二)视图模板、静态资源访问

学习视频&#xff1a;孙哥说SpringMVC&#xff1a;结合Thymeleaf&#xff0c;重塑你的MVC世界&#xff01;&#xff5c;前所未有的Web开发探索之旅 衔接上文Spring MVC学习随笔-控制器(Controller)开发详解&#xff1a;控制器跳转与作用域&#xff08;一&#xff09; SpingMVC中…

智慧灯杆系统平台架构设计需要考虑的几个要点

智慧灯杆是一种集成了各种先进技术的道路照明设施。它不仅提供照明服务&#xff0c;还可以具有物联网技术、视频监控、环境监测、广播通讯、无线网络覆盖等多种功能。这些智能功能可以通过互联网进行控制和管理&#xff0c;从而实现智慧城市的建设。智慧灯杆能够提升城市的智能…
最新文章