计算器由运算器、控制器、存储器等程序共同协调工作。
用程序语言编写。
计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。
低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存储用。高档计算器由微处理器和只读存储器实现各种复杂的运算程序,有较多的随机存储单元以存放输入程序和数据。键盘是计算器的输入部件,一般采用接触式或传感式。
中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的.约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。
17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除仿仔、乘方、开方运算,甚备桐汪至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算轮茄器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。
计算器的复杂度随着使用目的而有所不同。
最简单的计算器模块应该包含下列功能键:
1、电源,皮腔例如电池或太阳能板(solar panel)。
2、显示幕。
通常以LED光源或LCD制成,可显示一定数量的数字(通常为八、十、十二、十六位,以十二位最常见)
3、电子升埋回路。
4、一个包含下列按键的按键面版:
(1)十个数字键,从0到9。
(2)小数点。
(3)等于符号,用于显示运算解。
(4)四个运算函数(加减乘除)。
(5)取消键,用于清空当前显示的数字。
(6)电源开关。
(7)其他基本函数,例如求平方根或百分比键 (%)。
(8)更高级的模块也许会有一个单数值记忆按键(M+,M-),可在需要时叫回。
扩展资料:
常见的计算器有四类:
1、算术型计算器。
可进行加、减、乘、除等简单的四则运算,又称简单计算燃笑衫器。一般都是实物计算器
2、科学型计算器。
可进行乘方、开方、指数、对数、三角函数、统计等方面的运算,又称函数计算器。 可以是软件,也可以是实物。
3、程序员计算器。
专门为程序员设计的计算器,,主要特点是支持And,Or,Not,Xor,即最基本的与或非和异或 *** 作, 及移位 *** 作 Lsh,Rsh:全称是Left Shift和Right Shift,也就是左移和右移 *** 作。
4、统计计算器。
为有统计要求的人员设计的设计的计算器,可以是软件,也可以是实物。
参考资料:
百度百科-计算器
#include<iostream>#include<cmath>
#include<string>
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]
=
{'\n',
')',
'+',
'-',
'*',
'/',
'%',
'^',
'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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)