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

/*实现功能`计算算术表达式的值*/
#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));
}

搜索更多相关主题的帖子: top void include 表达式 
2007-10-06 13:51
bobofei
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-5-9
收藏
得分:0 
我现在没有心思帮你读这么长的代码,我要到JAVA版去发言
2007-10-06 13:58
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
得分:0 

2007-10-06 14:03
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
C程序的一个错误,谢~!帮改一下
是什么错误.

倚天照海花无数,流水高山心自知。
2007-10-06 14:04
gejianlin
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-10-6
收藏
得分:0 
2007-10-06 14:39
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
得分:0 

逻辑错误啊`` 运行`结果不对``


2007-10-06 14:39
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
得分:0 
回复:(柒兲)[em03]
逻辑错误啊` 结果不对哦``

2007-10-06 14:45
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
得分:0 
回复:(柒兲)[em03]
逻辑错误``结果不对

2007-10-06 14:46
快速回复:[求助]C程序的一个错误,谢~!帮改一下
数据加载中...
 
   



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

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