| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 448 人关注过本帖
标题:刚刚下的求值表达式 但结果是错误的 算+法 -法还可以但是要算乘除就不行了 ...
取消只看楼主 加入收藏
猩猩
Rank: 1
来 自:森林
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-10-10
收藏
 问题点数:0 回复次数:0 
刚刚下的求值表达式 但结果是错误的 算+法 -法还可以但是要算乘除就不行了
#include<stdio.h>
#define MaxSize 99
void trans(char str[],char exp[]) /*将算术表达式转换成后追表达式*/
{
struct
{
char data[MaxSize];
int top; /*top为栈顶*/
}op; /*定义一个含data和top的结构体*/
char ch;
int i=0,t=0;
op.top=-1;
ch=str[i]; /*将str的每一个数转换成ch*/
i++;
while(ch!='\0') /*ch对应不同的符号的时候对应的转换情况*/
{
switch(ch)
{
case'(': /*当是(的时候,将此括号存入栈tp*/
op.top++;op.data[op.top]=ch;
break;
case')':
while(op.data[op.top]!='(')
{
exp[t]=op.data[op.top];
op.top--;
t++;
}
op.top--;
break;
case'+':
case'-':
while(op.top!=-1&&op.data[op.top]!='(')
{
exp[t]=op.data[op.top];
op.top--;
t++;
}
op.top++;
op.data[op.top]=ch;
break;
case'*':
case'/':
while(op.top=='/'||op.top=='*')
{
exp[t]=op.data[op.top];
op.top--;
t++;
}
op.top++;
op.data[op.top]=ch;
break;
case' ':
break;
default:
while(ch>='0'&&ch<='9')
{
exp[t]=ch;t++;
ch=str[i];i++;
}
i--;
exp[t]='#';
t++;
}
ch=str[i];
i++;
}
while(op.top!=-1)
{
exp[t]=op.data[op.top];
t++;
op.top--;
}
exp[t]='\0';
}
float compvalue(char exp[])
{
struct
{
float data[MaxSize];
int top;
}st;
float d;
char ch;
int t=0;
st.top=-1;
ch=exp[t];
t++;
while(ch!='\0')
{
switch(ch)
{
case'+':
st.data[st.top-1]=st.data[st.top-1]+st.data[st.top];
st.top--;
break;
case'-':
st.data[st.top-1]=st.data[st.top-1]-st.data[st.top];
st.top--;
break;
case'*':
st.data[st.top-1]=st.data[st.top-1]-st.data[st.top];
st.top--;
break;
case'/':
if(st.data[st.top]!=0)
st.data[st.top-1]=st.data[st.top-1]-st.data[st.top];
else
{
printf("\n\t除0是错误的");
}
st.top--;
break;
default:;
d=0;
while(ch>='0'&&ch<='9')
{
d=10*d+ch-'0';
ch=exp[t];
t++;
}
st.top++;
st.data[st.top]=d;
}
ch=exp[t];
t++;
}
return st.data[st.top];
}
void main() /*可以提到前面去*/
{
char str[MaxSize],exps[MaxSize]; /*str为算术表达式,exps为后缀表达式*/
printf("请输入一个求值表达式\n");
printf("表达式:");
gets(str); /*输入一个算术表达式*/
printf("原表达式是:%s\n",str);
trans(str,exps); /*将算术表达式转换成后追表达式*/
printf("后缀表达式:%s\n",exps);
printf("计算结果:%g\n",compvalue(exps));/*通过后缀表达式来求值*/
}
搜索更多相关主题的帖子: 乘除 求值 结果 表达 
2007-10-11 10:33
快速回复:刚刚下的求值表达式 但结果是错误的 算+法 -法还可以但是要算乘除就 ...
数据加载中...
 
   



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

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