用C语言实现计算器,要有按键功能!(+-*/即可)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言实现计算器,要有按键功能!(+-*/即可)相关的知识,希望对你有一定的参考价值。

用C语言

参考技术A #include<stdio.h>
#include<malloc.h>
#include<iostream.h>
struct
node

int
date;
struct
node
*next;
;
typedef
struct
node
*link;
link
number=NULL;
link
symble=NULL;
//把数据放入栈中//
link
push(link
stack
,int
num,int
k)

link
newnode;
newnode=(link)malloc(sizeof(struct
node));
if(newnode==NULL)
cout<<"out
of
space"<<endl;
else

if(k>=0
&&
k<=9)//判断前一个字符是否为数字

stack->date=stack->date*10+num;
return
stack;

else

newnode->date=num;
newnode->next=stack;
stack=newnode;
return
stack;



//从栈上取出数据//
link
pull(link
stack,int
*num)

link
top;//去栈顶元素
if(stack!=NULL)

top=stack;
stack=stack->next;
*num=top->date;
free(top);
return
stack;

else
*num=0;

//判断栈是否为空
int
empty(link
stack)

if(stack==NULL)
return
1;
else
return
0;

//判断是否为运算符
int
is_symble(char
ch)

switch(ch)

case
'(':
case
')':
case
'+':
case
'-':
case
'*':
case
'/':
return
1;
default:
return
0;


//
判断运算符的优先级
int
priority(char
ch)

switch(ch)

case
'(':
return
1;
case
'+':
case
'-':return
2;
case
'*':
case
'/':
return
3;//'+','-'的优先级小于'*','/'
default:return
0;


//计算两个操作数的值
int
tuo_result(int
m,int
num1,int
num2
)

switch(m)

case
'+':
return(num2
+
num1);
case
'-':
return
(num2-num1);
case
'*':
return(num2
*
num1);
case
'/':
return(num2
/
num1);


//主函数
void
main
()

char
expression[50];//存放表达式
int
position=0;//表达式的位置
int
sym=0;//运算符
int
num1=0;//后操作数
int
num2=0;//前操作数
int
sum=0;//运算结果
cout<<"请输入表达式:"<<endl;
gets(expression);
while(expression[position]!='\0'
&&
expression[position]!='\n')

if(is_symble(expression[position]))//判断运算符

if(expression[position]=='(')
symble=push(symble,expression[position],-1);
else
if(expression[position]==')')

while(symble->date!='(')

number=pull(number,&num1);
number=pull(number,&num2);
symble=pull(symble,&sym);
number=push(number,tuo_result(sym,num1,num2),-1);

//if(symble->date='(')symble=pull(symble,&sym);
symble=pull(symble,&sym);

else
if(!empty(symble))//判断放运算符的栈是否为空

if(priority(expression[position])
<=
priority(symble->date)
&&
!empty(symble))

//取出一个运算符和两个操作数
number=pull(number,&num1);
number=pull(number,&num2);
symble=pull(symble,&sym);
number=push(number,tuo_result(sym,num1,num2),-1);
//cout<<tuo_result(sym,num1,num2)<<endl;
//把运算符放在栈里
//symble=push(symble,expression[position],-1);

symble=push(symble,expression[position],-1);

//把运算符放在栈里
else
symble=push(symble,expression[position],-1);

else
if(!is_symble(expression[position]))//把操作数放在栈里
number=push(number,expression[position]-48,expression[position-1]-48);
//cout<<expression[position]<<endl;
position++;

//取出运算符栈的运算符
while(!empty(symble))

//cout<<symble->date<<endl;
symble=pull(symble,&sym);
if(!empty(symble))//判断是否为空

if(sym=='+'
&&
symble->date=='-'
)//判断符号问题
,2-2*3+5=1不然就是-1
sym='-';

number=pull(number,&num1);
number=pull(number,&num2);
//cout<<num1<<"
"<<num2<<endl;
//计算的结果放在栈中
number=push(number,
tuo_result(sym,num1,num2),-1);
//cout<<number->date<<endl;

//取出运算结果
number=pull(number,&sum);
cout<<expression<<"="<<sum<<endl;

以上是关于用C语言实现计算器,要有按键功能!(+-*/即可)的主要内容,如果未能解决你的问题,请参考以下文章

怎么用51单片机4*4键盘实现简单计算器 就要加减就可以 汇编语言 麻烦可

c语言怎么监听键盘按键

用C语言设计一个学生成绩管理系统

开发C/S架构用各种语言的优缺点有啥?

用C语言实现三子棋游戏

用C语言编写一个计算器程序,实现加,减,乘,除,求平方根(正数),倒数等功能.