c++实现简单计算器

帮一个同学写的,非计算机类专业,应付交差,也没什么功能,两个数的加减乘除运算,以及三角函数的运算。要求用到模板、运算符重载和异常处理。

一直以来都是用的java,没怎么用过c++,就当是复习了一下c++语法。

代码如下:

  1 #include<iostream>
  2 #include<string>
  3 #include<cmath>
  4 #include<cstdlib>
  5
  6 using namespace std;
  7
  8 //四则运算
  9 template <class T> class ElementaryArithmetic{
 10 private:
 11     T result;
 12     T operand1, operand2;
 13     char operators;
 14 public:
 15     //四则运算
 16     void Calculate();
 17     //加法运算
 18     void add(T, T);
 19     //减法运算
 20     void subtraction(T, T);
 21     //乘法运算
 22     void multiplication(T, T);
 23     //除法运算
 24     void divide(T, T);
 25     //输出运算符重载
 26     template <class E> friend ostream &operator<<(ostream&, ElementaryArithmetic<E> &);
 27 };
 28
 29 //四则运算
 30 template <class T> void ElementaryArithmetic<T>::Calculate(){
 31     int type;
 32
 33 loop1:
 34     system("cls");
 35     cout << endl << "*******************" << endl;
 36     cout << "*   1.加法运算    *" << endl;
 37     cout << "*   2.减法运算    *" << endl;
 38     cout << "*   3.乘法运算    *" << endl;
 39     cout << "*   4.除法运算    *" << endl;
 40     cout << "*******************" << endl << endl;
 41     cout << "请输入菜单项(1-4):";
 42     try{
 43         cin >> type;
 44         if (type != 1 && type != 2 && type != 3 && type != 4)
 45             throw 1;
 46     }
 47     catch (int e){
 48         cout << endl << "输入错误,请重新输入选项...";
 49         system("pause");
 50         goto loop1;
 51     }
 52
 53     cout << endl << "请输入两个数字:";
 54     cin >> operand1 >> operand2;
 55     if (type == 1){
 56         add(operand1, operand2);
 57         operators = ‘+‘;
 58     }
 59     else if (type == 2){
 60         subtraction(operand1, operand2);
 61         operators = ‘-‘;
 62     }
 63     else if (type == 3){
 64         multiplication(operand1, operand2);
 65         operators = ‘*‘;
 66     }
 67     else if (type == 4){
 68         divide(operand1, operand2);
 69         operators = ‘/‘;
 70     }
 71
 72 }
 73
 74 //加法运算
 75 template <class T> void ElementaryArithmetic<T>::add(T operand1,T operand2){
 76     result = operand1 + operand2;
 77 }
 78
 79 //减法运算
 80 template <class T> void ElementaryArithmetic<T>::subtraction(T operand1, T operand2){
 81     result = operand1 - operand2;
 82 }
 83
 84 //乘法运算
 85 template <class T> void ElementaryArithmetic<T>::multiplication(T operand1, T operand2){
 86     result = operand1 * operand2;
 87 }
 88
 89 //除法运算
 90 template <class T> void ElementaryArithmetic<T>::divide(T operand1, T operand2){
 91     try{
 92         //除数为0,出现异常
 93         if ((operand2 - 0) < 1e-8 && (operand2 - 0) > -1e-8)
 94             throw 0;
 95     }
 96     catch (int){
 97         throw ;
 98     }
 99     result = operand1 / operand2;
100 }
101
102 //输出运算符重载
103 template <class E> ostream& operator<<(ostream &os, ElementaryArithmetic<E> &result){
104     os << endl << "计算结果 : " << result.operand1 << result.operators << result.operand2 << ‘=‘ << result.result << endl;
105     return os;
106 }
107
108 //三角函数
109 class Trigonometric{
110 private:
111     double radian;
112     string type;
113     double result;
114 public:
115     //三角函数计算
116     void Calculate();
117     //输出运算符重载
118     friend ostream &operator<<(ostream&, Trigonometric &);
119 };
120
121 //三角函数计算
122 void Trigonometric::Calculate(){
123     int option;
124
125 loop2:
126     system("cls");
127     cout << "*******************" << endl;
128     cout << "*    1.求正弦      *"<< endl;
129     cout << "*    2.求余弦      *"<< endl;
130     cout << "*    3.求正切      *"<< endl;
131     cout << "*******************" << endl << endl;
132     cout << "请输入菜单项(1-3):";
133     try{
134         cin >> option;
135         if (option != 1 && option != 2 && option != 3 && option != 4)
136             throw 2;
137     }
138     catch (int e){
139         cout << endl << "输入错误,请重新输入选项..." ;
140         system("pause");
141         goto loop2;
142     }
143
144
145     cout << endl << "请输入弧度:";
146     cin >> radian;
147
148     if (option == 1){
149         result = sin(radian);
150         type = "sin";
151     }
152     else if (option == 2){
153         result = cos(radian);
154         type = "cos";
155     }
156     else if (option == 3){
157         result = tan(radian);
158         type = "tan";
159     }
160 }
161
162 //输出运算符重载
163 ostream &operator<<(ostream &os, Trigonometric &result){
164     os << endl << "计算结果 : " << result.type << "(" << result.radian << ") = " << result.result << endl;
165     return os;
166 }
167
168 int main(){
169     int type;
170
171 loop:
172     while (true){
173         system("cls");
174         cout << "*******主菜单**********" << endl;
175         cout << "*                     *" << endl;
176         cout << "*   1. 四则运算       *" << endl;
177         cout << "*   2. 三角函数       *" << endl;
178         cout << "*   3. 退出程序       *" << endl;
179         cout << "*                     *" << endl;
180         cout << "***********************" << endl << endl;
181         cout << "请输入菜单项(1-3):";
182
183         try{
184             cin >> type;
185             if (type != 1 && type != 2 && type != 3)
186                 throw - 1;
187
188             if (type == 1){
189                 ElementaryArithmetic<double> calc;
190                 calc.Calculate();
191                 cout << calc;
192             }
193             else if (type == 2){
194                 Trigonometric calc;
195                 calc.Calculate();
196                 cout << calc;
197             }
198             else if (type == 3)
199                 break;
200         }
201         catch (int e){
202             if (e == -1){
203                 cout << endl << "输入错误,请重新输入选项...";
204                 system("pause");
205                 goto loop;
206             }
207             else if (e == 0)
208                 cout << "除数不能为 0 " << endl;
209
210         }
211         cout << endl;
212         system("pause");
213     }
214     return 0;
215 }

好吧,其实我也不知道为什么要求用模板和运算符重载,感觉没什么必要,典型的作业代码,不过也可能是我思想的局限性。总之,就这样吧。

时间: 2024-10-06 13:52:42

c++实现简单计算器的相关文章

j2ee-JSP之简单计算器

来源韩顺平.j2ee视频实战教程jsp第1讲(下集) -------------------------------------------------------------------------------------------------------- 简单计算器,可以控制输入的数(仅第一个数)不能为空且不能为字符串 myCal.jsp代码 1 <!--这是计算器的界面 --> 2 <!-- 可以控制输入的数不能为空且不能为字符串 --> 3 <%@ page co

JAVA编写的简单计算器

package com.hellojava.practice.test; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.Panel; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; impo

HDU1237 简单计算器 【栈】+【逆波兰式】

版本:1.0 日期:2014.5.17 2014.6.1 版权:© 2014 kince 转载注明出处 在介绍SwitchButton之前,先来看一下系统Button是如何实现的.源码如下: @RemoteView public class Button extends TextView { public Button(Context context) { this(context, null); } public Button(Context context, AttributeSet att

[Java.web]简单计算器

项目的  WebRoot 目录下的 calculator.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML> <html> <head> <title>计算结果</title> </head> <body> <jsp:us

NOIP19:简单计算器

/* 1.4编程基础之逻辑表达式与条件分支 19:简单计算器 总时间限制: 1000ms 内存限制: 65536kB 描述 一个最简单的计算器,支持+, -, *, / 四种运算.仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围. 输入 输入只有一行,共有三个参数,其中第1.2个参数为整数,第3个参数为操作符(+,-,*,/). 输出 输出只有一行,一个整数,为运算结果.然而: 1. 如果出现除数为0的情况,则输出:Divided by zero! 2. 如果出现无效的操作符

hdoj 1237 简单计算器

简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 14512    Accepted Submission(s): 4920 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整

Shell 实现简单计算器功能

Shell 实现简单计算器功能,脚本如下: [[email protected] scripts]# cat jisuan.sh #!/bin/bash print_usage(){     printf $"USAGE:$0 NUM1 {+|-|*|/} NUM2\n"     exit 1 } #判断传入的参数是不是3个 if [ $# -ne 3 ]   then     print_usage fi firstnum=$1 secondnum=$3 op=$2 #对传入的参数进

Javascript 实现简单计算器实例代码

Javascript 实现简单计算器实例代码 这篇文章主要介绍了Javascript 实现简单计算器实例代码的相关资料,需要的朋友可以参考下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

菜鸟学Android编程——简单计算器《一》

菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少,加减乘除就可以. 第一步:设计布局文件 界面如下图: 由于刚开始学Android,对布局文件也不是很了解,边查边找,最后凑合着写好了布局文件. 注意事项:此布局文件用到了GridLayout布局,是在Android4.0以上才出现的(不知道谷歌有没有开发相应的包来适配4.0以下版本). 有关Gri

HDU 1237 简单计算器

简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12832    Accepted Submission(s): 4222 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整