数据结构让我们相遇
计算器1.0正式上线:
define.h:
#include<stdlib.h>
#include<stdio.h>
typedef char datatype;
#define maxsize 64
typedef struct
{
datatype data[maxsize];
int top;
}seqstack;
void SetNULL(seqstack *s)
{
s->top=-1;
}
int Empty(seqstack *s)
{
if(s->top>=0)
return 0;
else
return 1;
}
seqstack* Push(seqstack *s,datatype x)
{
if(s->top==maxsize-1)
{
printf("overflow");
return NULL;
}
else
{
s->top++;
s->data[s->top]=x;
}
return s;
}
datatype Pop(seqstack *s)
{
if(Empty(s))
{
printf("underflow");
return NULL;
}
else
{
s->top--;
return(s->data[s->top+1]);
}
}
datatype Top(seqstack *s)
{
if(Empty(s))
{
printf("stack is empty");
return NULL;
}
else
return s->data[s->top];
}
计算器.c:
#include"define.h"
char Super(char a,char b)
{
switch(a)
{
case '+':
if(b=='('||b=='#')
return '<';
else
return '>';
case '-':
if(b=='('||b=='#')
return '<';
else
return '>';
case '*':
if(b=='-'||b=='('||b=='#'||b=='+')
return '<';
else
return '>';
case '/':
if(b=='*'||b=='/'||b==')')
return '>';
else
return '<';
case '(':
if(b=='>')
return '=';
else
return '<';
case ')':
if(b=='(')
return '=';
else
return '>';
case '#':
if(b=='#')
return '=';
else
return '>';
}
}
float Result(datatype x,datatype y,datatype s)
{
int a,b;
a=x-48;
b=y-48;
switch(s)
{
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
case ')':
return b;
case '(':
return b;
}
}
int main()
{
seqstack *OPTR=(seqstack*)malloc(sizeof(seqstack))
,*OPND=(seqstack*)malloc(sizeof(seqstack));
datatype x,y,t,s,p,q;
float result=0;
SetNULL(OPTR);
SetNULL(OPND);
scanf("%c",&s);
OPTR=Push(OPTR,s);
do
{
scanf("%c",&s);
if(s>='0'&&s<='9')
OPND=Push(OPND,s);
else
if(Super(s,OPTR->data[OPTR->top])=='<'||OPND->top<1)
OPTR=Push(OPTR,s);
else
{if(Super(s,OPTR->data[OPTR->top])=='=')
Pop(OPTR);
else
{do{
y=Pop(OPND);
x=Pop(OPND);
q=Pop(OPTR);
result=Result(x,y,q);
OPND=Push(OPND,result+48);
}while(Super(s,OPTR->data[OPTR->top])=='>');
if(Super(s,OPTR->data[OPTR->top])=='<'||OPND->top<1)
OPTR=Push(OPTR,s);
if(Super(s,OPTR->data[OPTR->top])=='=')
Pop(OPTR);
}
}
}while(s!='#');
printf("the result:%g",result);
return 0;
}
注:只要是操作数及中间结果不大于9,不小于0的四则运算都可以实现。
明月盛世交相映,中秋国庆喜相逢。国庆假期第一天,debug出计算器1.0.
接下来要重点解决数字与字符串转换的问题。
国庆中秋不止有欢歌笑语,思乡情长,还要能有所突破。希望我能在这几天的闭关修炼中精进学业,顺便减肥。
(茫茫然不知所云,疯哉,颠哉,睡哉!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)