| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 713 人关注过本帖
标题:[求助]自己写的求算术表达式值,谢~!帮改一下
只看楼主 加入收藏
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
 问题点数:0 回复次数:5 
[求助]自己写的求算术表达式值,谢~!帮改一下

有点逻辑错误码` `望帮修改一下
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 100

typedef char Elemtype;
typedef struct SqStack SqStack;
struct SqStack
{
int elem[MAXSIZE];
int top;
};

void InitStack(SqStack *s)
{

s->top=0;
}
void Push(SqStack *s,Elemtype x)
{

if(s->top==MAXSIZE-1)
printf("栈已满\n");
else
{
s->top++;
s->elem[s->top-1]=x;
}

}
int Pop(SqStack *s,Elemtype *y)
{

if(s->top==0)
return 0;
s->top--;
*y=s->elem[s->top];
return 1;

}


int Get_StackTop(SqStack *s)
{
Elemtype x;
if(s->top!=0)
{
x=s->elem[s->top];
return x;
}
else
{
printf("Eorror\n");
return 0;
}
}

int Opr(char c)
{
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='=')
return 0;
else
return 1;
}
char precede(char s,char c)
{
switch(s)
{
case'+':
case'-':
if(c=='+'||c=='-')
return '>';
else if(c=='*'||c=='/')
return '<';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
case'*':
case'/':
if(c=='+'||c=='-')
return '>';
else if(c=='*'||c=='/')
return '>';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
case '(':
if(c=='+'||c=='-')
return '<';
else if(c=='*'||c=='/')
return '<';
else if(c=='(')
return '<';
else if(c==')')
return '=';
else
return 'E';
case ')':
if(c=='+'||c=='-')
return '>';
else if(c=='*'||c=='/')
return '>';
else if(c=='(')
return 'E';
else if(c==')')
return '>';
else
return '>';
case '#':
if(c=='+'||c=='-')
return '<';
else if(c=='*'||c=='/')
return '<';
else if(c=='(')
return '<';
else if(c==')')
return 'E';
else
return '=';
default:
break;
}//switch
return 0;
}//preceed

int Operation(char *m,char *op,char *n)
{
int num;
int a=atoi(m);
int b=atoi(n);
switch(*op)
{
case'+':
num=a+b;
break;
case'-':
num=a-b;
break;
case'*':
num=a*b;
break;
case'/':
if(b==0)
{
printf("Eorror\n");
return 0;
}
else
{
num= a/b;
break;
}
default:
printf("In put eorror \n");
break;
}//switch
return num;
}//operation

void main()
{
char c,r;
char *x,*op;
char *a,*b;
int value;
SqStack *OPTR; //算符
SqStack *OPND; //运算数
OPTR=(SqStack *)malloc(sizeof(SqStack));
OPND=(SqStack *)malloc(sizeof(SqStack));
InitStack(OPTR);
Push(OPTR,'#');
InitStack(OPND);
c=getchar();
while(c!='#'||Get_StackTop(OPTR)!='#')
{
if(!Opr(c))
{
Push(OPND,c);
c=getchar();
}
else
{
r=precede(Get_StackTop(OPTR),c);
switch(r)
{
case'<':
Push(OPND,c);
c=getchar();
break;
case'=':
Pop(OPTR,x);
c=getchar();
case'>':
Pop(OPTR,op);
Pop(OPND,a);
Pop(OPND,b);
value=Operation(b,op,a);
Push(OPND,value);
break;
}//switch

}//else
}//wilte
printf("result = %d\n",Get_StackTop(OPND));
}

[此贴子已经被作者于2007-10-6 18:54:21编辑过]

搜索更多相关主题的帖子: 算术 表达 
2007-10-06 18:53
小灵心
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2007-10-2
收藏
得分:0 
上次你那贴有人贴了答案,你知道不?

2007-10-06 18:56
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
得分:0 

没有` 删了`?

不知道那里去了`

2007-10-06 18:57
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
得分:0 
回复:(小灵心)上次你那贴有人贴了答案,你知道不?...
我中午发的``
我刚上线去找了下`` 没有见了`!

2007-10-06 18:58
小灵心
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2007-10-2
收藏
得分:0 
我有保存下来,我找找看。。。

NPMRuIAQ.rar (2.12 KB) [求助]自己写的求算术表达式值,谢~!帮改一下



2007-10-06 19:13
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
得分:0 

谢谢你了`1`

2007-10-06 19:18
快速回复:[求助]自己写的求算术表达式值,谢~!帮改一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013007 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved