| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 527 人关注过本帖
标题:表达式求值,各位帮帮忙。。
只看楼主 加入收藏
小茫
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-9-30
收藏
 问题点数:0 回复次数:3 
表达式求值,各位帮帮忙。。
程序代码:
#include<stdio.h>
#include<string.h>

int rank(char c1,char c2)          //判断符号的优先级
{
    if(c1=='(')return -1;
    if(c1==')')return 1;
    if(c2=='(')return -1;
    if(c2==')')return 1;
    if(c1=='(' && c2==')')return 0;
    if(c1=='#' && c2=='#')return 0;
    if(c1=='#')return -1;
    if(c2=='#')return 1;
    if(c2=='/' && c1=='+' )return -1;
    if(c2=='/' && c1=='-' )return -1;
    if(c2=='*' && c1=='+' )return -1;
    if(c2=='*' && c1=='-' )return -1;

    return 1;
}

void change(char sin[],char sout[])       //将中缀表达式转换成后缀表达式
{
    char  op[99];
    int len,i,psout=0,pop=1,j=0;

    len=strlen(sin);
    op[0]='#';
    sin[len++]='#';
    for(i=0;i<len;i++)
    {
        scanf("%s",&sin[i]);
        if(sin[i]>='0' && sin[i]<='9')
            sout[psout++]=sin[i];
        else
        {
            while(rank(op[pop],sin[i])>0)
            {
                sout[psout++]=op[pop-1];
                pop--;
            }
            if(rank(op[pop],sin[i])==0)
                pop--;
            if(rank(op[pop],sin[i])<0)
                op[pop++]=sin[i];
        }
    }
    sout[psout]=0;
    while(sout[j])
    {
        j++;
        printf("后缀表达式为:%s",sout[j]);
    }
    return;
}

double sincal(double a,double b,char c)     //将运算符和操作数的运行结果返回
{
    if(c=='+')return(a+b);
    if(c=='-')return(a-b);
    if(c=='*')return(a*b);
    return(a/b);
}

double calculate(char cal[])        //计算后缀表达式
{
    int i=0,len,top=0;
    double inter[99],a,b;

    len=strlen(cal);
    for(i=0;i<len;i++)
    {
        if(cal[i]>'0' && cal[i]<'9')
            inter[++top]=cal[i]-'0';
        else
        {
            a=inter[top-2];
            b=inter[top-1];
            inter[top-2]=sincal(a,b,cal[i]);
            top--;
        }
    }
     return inter[0];
}

void main()
{
    printf("输入一个表达式:");

    double  final;
    char  sin[99],sout[99];
    scanf("%s",sin);
    change(sin,sout);
    final=calculate(sout);

    printf("%f\n",final);
}
看了好久,脑袋都要坏掉了
搜索更多相关主题的帖子: 求值 表达 
2010-10-24 20:26
lyj2010lyj
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2010-9-28
收藏
得分:0 
printf("%f\n",final);
改了:printf("%f"\n,final)
2010-10-24 20:59
sunmingchun
Rank: 4
来 自:安徽-滁州
等 级:业余侠客
帖 子:198
专家分:277
注 册:2010-4-2
收藏
得分:0 
错误改了出来了,可是没结果,有时间好好看看。
2010-10-24 21:14
小茫
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-9-30
收藏
得分:0 
抱歉没说清楚,这个程序的意思是让用户输入一个中缀表达式,然后通过栈将它转为后缀表达式之后,再输出这个表达式的结果。
楼上的说错误改出来了,但是没结果是什么意思?
二楼说的那个算是错误码?/n不是本来就要在双引号里面的吗?
2010-10-24 21:28
快速回复:表达式求值,各位帮帮忙。。
数据加载中...
 
   



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

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