# 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     //加法运算
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){
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:
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 << "请输入弧度：";
147
148     if (option == 1){
150         type = "sin";
151     }
152     else if (option == 2){
154         type = "cos";
155     }
156     else if (option == 3){
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 }```

0 条评论

• ### sql server 触发器

触发器是一种特殊类型的存储过程。触发器可包含复杂的T-SQL语句。触发器不能通过名称被直接调用，也不允许设置参数。它是建立在触发事件上的。 触发器可以强制执行一...

• ### sql server 事务处理

事物处理 事务是SQL Server中的单个逻辑单元，一个事务内的所有SQL语句作为一个整体执行，要么全部执行，要么都不执行。 事务有4个属性，称为ACID（原...

• ### mysql基础 事务的认识和使用

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务是恢复和并发控制的基本单位。 在关系数据库中，一个事务可以是...

• ### Lucene 高阶查询的六脉神剑 —— QueryParser

上篇我们介绍了 Lucene 多样的查询模式，每一种都是相互独立的用来解决特定查询目标的 Query 对象。本节我们要将这些查询模式使用 QueryParser...

• ### 模仿是最好的学习方式

代码仓库开始的时候还是很简单的，如果随着时间的推移，版本迭代很多次后，再研究就困难很多，所以大佬们经常推荐从第一个commit开始学习，记得以前github是以...

• ### 实践微服务，第14部分：GraphQL

在实践微服务系列博客的这一篇中，我们将看看如何使用GraphQL将Account对象提供给我们的客户端。

• ### 只有名字，如何查到老赖的身份证号？

三叔为人爽快，对朋友那是真讲义气，关系铁的借钱不用借条，不铁的写个借条就行，就是这么豪爽的老实人，现在却遇到了老赖，当初承诺还钱的「朋友」却玩起了失踪，电话不接...

• ### 理才网入选中国B2B百强：头部效应 驱动未来 | 腾讯SaaS加速器·学员动态

? 来源 | 腾讯SaaS加速器首期项目-理才网 ---- ? 12月27日，第三届·中国浙江舟山群岛新区全球海洋经济创业大赛总决赛在朱家尖举行。经过多轮...