用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语言实现计算器,要有按键功能!(+-*/即可)的主要内容,如果未能解决你的问题,请参考以下文章