计算器是怎么工作的?用什么语言编写的?

计算器是怎么工作的?用什么语言编写的?,第1张

计算器由运算器、控制器、存储器等程序共同协调工作。

用程序语言编写。

计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。

低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存储用。高档计算器由微处理器和只读存储器实现各种复杂的运算程序,有较多的随机存储单元以存放输入程序和数据。键盘是计算器的输入部件,一般采用接触式或传感式。

中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的.约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。

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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12400098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存