2. 编一个模拟计算器进行简单算术运算的程序(c=a运算符b),只做加、减、乘、除四种运算。(用switch结构

作者&投稿:爱新觉罗柏 (若有异议请与网页底部的电邮联系)
2. 编一个模拟计算器进行简单算术运算的程序(c=a运算符b),只做加、减、乘、除四种运算。(用switch结构~

代码如下:
#include "pch.h"
#include
#include
#include
#include
using namespace std;
int add(int i, int j)
{
return i + j;
}
// 使用函数调用运算符
struct divide
{
int operator()(int i, int j)
{
return i / j;
}
};
auto mod = [](int i, int j) {return i % j; };
map> binops =
{
{"+", add}, // 使用函数指针
{"-", minus()}, // 使用标准库函数对象
{"*", [](int i, int j) {return i * j; }}, // 使用未命名的lambda表达式
{"/", divide()}, // 使用函数调用运算符
{"%", mod} // 命名了的lambda表达式
};
int main()
{
int num1, num2;
string s;
while (cin >> num1)
{
cin >> s >> num2;
cout << num1 << s << num2 << "=" << binops[s](num1, num2) << endl;
}
return 0;
}

扩展资料
Switch用在编程中,如C语言中它经常跟Case一起使用,是一个判断选择代码。其功能就是控制流程流转的。
直线翻译:switch语句,即“切换”语句;case即“情况”。
switch语句的语法如下(switch,case,break和default是关键字):
switch ( 变量表达式 )
{
case 常量1 :语句;break;
case 常量2 :语句;break;
case 常量3 :语句;break;
...
case 常量n:语句;break;
default :语句;break;
}
当变量表达式所表达的量与其中一个case语句中的常量相符时,就执行此case语句后面的语句,并依次下去执行后面所有case语句中的语句,除非遇到break;语句跳出switch语句为止。如果常量表达式的量与所有case语句的常量都不相符,就执行default语句中的语句。

#include
#include
#include
using
namespace
std;
const
double
pi
=
3.14159265;
const
double
e
=
2.718281828459;
const
int
SIZE
=
1000;
typedef
struct
node//为了处理符号而建立的链表(如:
1+(-2))
{
char
data;
node
*next;
}node;
typedef
struct
stack_num//存储

的栈
{
double
*top;
double
*base;
}stack_num;
typedef
struct
stack_char//存储
运算符号
的栈
{
char
*top;
char
*base;
}stack_char;
stack_num
S_num;//定义
stack_char
S_char;//定义
char
fu[18]
=
{'
',
')',
'+',
'-',
'*',
'/',
'%',
'^',
'Q',
'L',
'C',
'S',
'T',
'c',
's',
't',
'('};
int
compare[1000];//表现出各运算符号的优先级
double
shu[1000];//存储
"数"
的数组
double
dai_result;//运算的结果,是为了处理
M
运算(简介函数里有M的定义)
int
biao
=
0;//和dia_result
一样,为了处理
M
运算
char
line[SIZE];//输入的所要计算的表达式
void
init()//初始化
{
compare[fu[0]]
=
-2;//用数字的大小表现出符号的优先级
compare[fu[1]]
=
-1;
compare[fu[2]]
=
2;
compare[fu[3]]
=
2;
compare[fu[4]]
=
4;
compare[fu[5]]
=
4;
compare[fu[6]]
=
4;
compare[fu[7]]
=
5;
for(int
i
=
8;
i
<=
15;
i++)
compare[fu[i]]
=
6;
compare[fu[16]]
=
7;
S_num.base
=
(double*)malloc(sizeof(double)*SIZE);//为栈开辟空间
S_char.base
=
(char*)malloc(sizeof(char)*SIZE);//同上
S_num.top
=
S_num.base;
S_char.top
=
S_char.base;
}
void
push_num(double
n)//数字进栈
{
*
++S_num.top
=
n;
}
void
push_char(char
c)//运算符号进栈
{
*
++S_char.top
=
c;
}
double
pop_num()//数字出栈
{
double
m
=
*S_num.top;
S_num.top--;
return
m;
}
char
pop_char()//运算符号出栈
{
char
cc
=
*S_char.top;
S_char.top--;
return
cc;
}
char
get_top_char()//得到运算符号的栈中最顶端的运算符号
{
return
*S_char.top;
}
double
operate(double
y,
char
c,
double
x)//
对两个数计算
(
含是双目运算符
:

*,
/
等等
)
{
double
r;
if(c
==
'-')
r
=
x
-
y;
else
if(c
==
'+')
r
=
x
+
y;
else
if(c
==
'/'
&&
y
!=
0)
r
=
x
/
y;
else
if(c
==
'*')
r
=
x
*
y;
else
if(c
==
'^')
{
r
=
1;
for(int
i
=
1;
i
<=
y;
i++)
r
*=
x;
}
else
if(c
==
'%')
{
int
r0
=
(int)x
%
(int)y;
r
=
double(r0);
}
return
r;
}
double
operate_one(double
one,
char
cc)//
对一个数运算
(
含单目运算符
:

log(L),
sin(S)
等等
)
{
double
r;
if(cc
==
'Q')
r
=
sqrt(one);
else
if(cc
==
'C')
r
=
cos(one);
else
if(cc
==
'S')
r
=
sin(one);
else
if(cc
==
'T')
r
=
tan(one);
else
if(cc
==
'c')
i++;
}
i++;
}
if(ge
>=
3)
return
0;
else
return
1;
}
void
output(double
result)//
打出结果
{
printf("
所得结果是
:
");
cout<<result<<endl;
}
void
check()//
检查表达式是否合法
{
void
introduce();
char
cc;//
决定计算器按哪种功能进行计算
double
result;//
结果
void
input();//
定义
if(
check_kuohao()
&&
check_char()
)//
看是否合法
,
合法则计算
{
result
=
compute();
output(result);
cout<<"
输入一个字符
'M'

'D'

'F',
决定是否继续
:
"<<endl;
while(cin>>cc)
{
if(cc
==
'M')
{
system("cls");
introduce();
printf("
您上次所得结果为
:
");
cout<<result<<endl;
cout<<"
在上次计算结果的基础上
,
请继续输入想计算的表达式
"<<endl;
dai_result
=
result;
biao
=
1;
input();//
输入表达式
break;
}
else
if(cc
==
'D')
{
system("cls");
introduce();
cout<<"
计算器已清零
,
请输入您所要计算的表达式
"<<endl;
input();//
输入表达式
break;
}
else
if(cc
==
'F')
{
system("cls");
cout<<"
计算器关闭
,
谢谢使用
!"<<endl;
break;
}
else
{
cout<<"
所输入字符无效
,
请输入一个字符
'M'

'D'

'F'!"<<endl;
continue;
}
}
}
else//
不合法,分两种不合法
{
if(check_kuohao()
==
0
&&
check_char()
==
1)
{
cout<<"
您所输入的表达式括号不匹配
,
请重新输入
:"<<endl;
input();//
输入表达式
}
else
{
cout<<"
您所输入的表达式不合法
,
请重新输入
:"<<endl;
input();//
输入表达式
}
}
}
void
tackle_fuhao()//
处理负号
{
node
*root,
*head,
*p,
*q,
*p1;
root
=
head
=
new
node;
head->next
=
NULL;
int
i;
for(i
=
0;
line[i]
!=
'\0';
i++)//
建立链表
{
p
=
new
node;
p->data
=
line[i];
p->next
=
head->next;
head->next
=
p;
head
=
p;
}
//
delete
p;
q
=
(node*)malloc(sizeof(node));
head
=
root;
if(root->next->data
==
'+'
||
root->next->data
==
'-')//
处理第一个字符
{
p
=
new
node;
p->data
=
'0';
p->next
=
head->next;
head->next
=
p;
}
if(root->next
!=
NULL)
{
for(q
=
root->next;
q;
q
=
q->next)
{
if(q->data
==
'('
&&
(q->next->data
==
'-'
||
q->next->data
==
'+'))
{
p
=
new
node;
p->data
=
'0';
p->next
=
q->next;
q->next
=
p;
}
}
}
//
delete
q;
p1
=
new
node;
int
qi
=
-1;
for(p1
=
root->next;
p1;
p1
=
p1->next)
{
line[++qi]
=
p1->data;
}
line[++qi]
=
'\0';
}
void
input()//
输入
{
cin>>line;
if(biao
==
0)
tackle_fuhao();//
处理负号
check();//
检查表达式是否合法
}
void
introduce()//
对计算器的符号功能的简要介绍
{
cout<<"
计算器简要介绍
"<<endl;
cout<<"C(cos)
S(sin)
T(tan)
a(arccos)
c(arcsin)
"<<endl;
cout<<"7
8
9
/
on
t(arctan)
"<<endl;
cout<<"4
5
6
*
%
L(log)"<<endl;
cout<<"1
2
3
-
M(M+)
Q(sqrt)
"<<endl;
cout<<"0
.
+
^(
乘方
)
F(off)
Enter(=)
"<<endl;
cout<<"
对于对数输入
L2_5
表示以
2
为底
5
的对数
"<<endl;
cout<<"M(
在前面结果的基础上继续计算,
如:
上次结果为
10

现输入
+10.5*2)"<<endl;
cout<<"D(
清零并继续输入
)"<<endl;
cout<<"F(
计算机关闭
)"<<endl;
cout<<"
输入
P
就代表输入圆周率
,
输入
E
代表输入自然对数
"<<endl<<endl;
}
void
print()
{
system("color
2");
cout<<"
欢迎使用本计算器
"<<endl;
cout<<"
输入一个字符串
on,
计算器开始启动
"<<endl;
}
void
if_start()//
是否启动计算器
{
string
start;
print();
while(cin>>start)
{
if(start
!=
"on")
{
cout<<"
您所输入的字符无效
,
请按照介绍的继续输入
:"<<endl;
continue;
}
else
break;
}
if(start
==
"on")
{
system("color
5");//
颜色的处理
system("cls");//
刷屏
}
introduce();//
对计算器的简要介绍
cout<<"
现在
,
请输入您所要计算的表达式
"<<endl;
input();//
输入所要计算的表达式
}
int
main()
{
if_start();//
调用是否启动计算器函数
return
0;
}
r
=
acos(one);
else
if(cc
==
's')
r
=
asin(one);
else
if(cc
==
't')
r
=
atan(one);

代码如下:

#include "pch.h"

#include <iostream>

#include <functional>

#include <map>

#include <string>

using namespace std;

int add(int i, int j)

{

return i + j;

}

// 使用函数调用运算符

struct divide

{

int operator()(int i, int j)

{

return i / j;

}

};

auto mod = [](int i, int j) {return i % j; };

map<string, function<int(int, int)>> binops = 

{

    {"+", add},                                  // 使用函数指针

    {"-", minus<int>()},                         // 使用标准库函数对象

    {"*", [](int i, int j) {return i * j; }},    // 使用未命名的lambda表达式

    {"/", divide()},                             // 使用函数调用运算符

    {"%", mod}                                   // 命名了的lambda表达式

};

int main()

{

int num1, num2;

string s;

while (cin >> num1)

{

cin >> s >> num2;

cout << num1 << s << num2 << "=" << binops[s](num1, num2) << endl;

}

return 0;

}

扩展资料

Switch用在编程中,如C语言中它经常跟Case一起使用,是一个判断选择代码。其功能就是控制流程流转的。

直线翻译:switch语句,即“切换”语句;case即“情况”。

switch语句的语法如下(switch,case,break和default是关键字):

switch ( 变量表达式 )

{

case 常量1 :语句;break;

case 常量2 :语句;break;

case 常量3 :语句;break;

...

case 常量n:语句;break;

default :语句;break;

}

当变量表达式所表达的量与其中一个case语句中的常量相符时,就执行此case语句后面的语句,并依次下去执行后面所有case语句中的语句,除非遇到break;语句跳出switch语句为止。如果常量表达式的量与所有case语句的常量都不相符,就执行default语句中的语句。




工布江达县17872566231: 2. 编一个模拟计算器进行简单算术运算的程序(c=a运算符b),只做加、减、乘、除四种运算.(用switch结构 -
麻忠塔定: 代码如下:#include "pch.h"#include <iostream>#include <functional>#include <map>#include <string> using namespace std; int add(int i, int j) { return i + j; }// 使用函数调用运算符 struct divide { int operator()(int i, int j) { return i / j; } }; auto mod ...

工布江达县17872566231: 用C语言编写一个简单的计算器1 -
麻忠塔定: #include<stdio.h> int main() {double num1 = 0; //输入1double num2 = 0; //输入2char ch; //操作double ret = 0; //结果 printf( "输入第一个数:" );scanf( "%lf", &num1 );printf( "输入第二个数:" );scanf( "%lf", &num2 ); ...

工布江达县17872566231: 1, 从键盘输入一个大写字母,要求改用小写字母输出. 2, 编写计算器程序,要求能够实现简单的算术运算. -
麻忠塔定: Private Sub form_Click() Dim s As String Dim t As String s = Text1.Text Dim i As Long Dim char As Long Text2.Text = "" For i = 1 To Len(s) char = Asc(Mid(s, i, 1)) If char >= 104 And char'说明是小写字母 h-z Select Case char Case Asc("i") ...

工布江达县17872566231: 模拟计算器程序 设计一个程序来模拟一个简单的手持计算器.程序支持算术运算+、 - 、*、/、=、以及C(清除) -
麻忠塔定: /* 一个计算器小程序 1. 支持加减乘除.可以扩展,只要修改cal()函数和增加运算符判断. 2. 回车和等于号或者下一个运算符都可以作为求值号, 结果可以作为下一个运算对象,也可以不作为运算对象,程序自行判断. 3. 支持容错...

工布江达县17872566231: c语言编写 编写一个简单的计算器,实现两个整型数的四则运算. -
麻忠塔定: #include#include int main() { int a,b; char ch,pm='Y'; while(pm!='N') { cout<<"请输入第一个数:"< cin>>a; cout<<"请输入运算符号:"< cin>>ch; cout<<"请输入第二个数:"< cin>>b; if(ch=='+') cout<< else if(ch=='-') cout<< else if(ch=='*') cout<< else if(ch=='/') cout< cout<<"结束输入N,继续输入任意键!"< pm=getchar(); } return 1;} 要c++的行吗?还要换成c吗?

工布江达县17872566231: 用C语言编程实现一个简单的四则运算计算器 -
麻忠塔定: #include <stdio.h> //函数,读数操作数 int getNextNum() { int ret; scanf("%d",&ret); return ret; } //函数,读运算符 char getOpt() { return getchar(); } //函数,计算 int caculate(int op1 , int op2 ,char opt) { if(opt=='+')return op1+op2; if(opt=='-')...

工布江达县17872566231: 用C语言编写简易计算器程序 -
麻忠塔定: 原发布者:持剑观风#include#includeintmain(void){intchoice,t=1;printf("**********************计算器*****************************************\n");printf("1.加法运算2.减法运算\n");printf("3.乘法运算4.除法运算\n");printf("5.平方运算6.开方运算\n...

工布江达县17872566231: C语言模拟计算器功能,能够进行简单的4则运算. -
麻忠塔定: dlib.h int fun1(int *i,int *j) {int a,b,c,d,e=0; a=random(100); b=random(100); d=a+b; (*j)++; while (e3) {printf(%d+%d=,a,b); e++; scanf(%d,c); if(c==d) {printf(回答正确\n);(*i)++;break;} else {printf(对不起,你的答案错误\n);}; } } int fun2(int *i,int *j) {int ...

工布江达县17872566231: c语言设计一个简单的计算器程序
麻忠塔定: /* 2013年12月23日 12:43:46 目的:计算器的实现 */ # include <stdio.h> # include <ctype.h> # include <math.h> char get_choice(void); //获取用户输入的选项,并建立目 char get_first(void); //获取用户输入的选项,并剔除错误输入 float get_int(...

工布江达县17872566231: c语言程序编写(初学)(1) 编写一个简单计算器程序,输入格式为:data1 op data2.其中data1和data2是参加运算的两个数,op为运算符,其取值只能是+... -
麻忠塔定:[答案] #includemain(){ char op; float result,data1,data2; float OP(float x,float y,char t); printf("input op(+,-,*,/):\n",op); scanf("%c",&op); printf("input data1:\n",data1); scanf("%f",&data1); pr...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网