| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 361 人关注过本帖
标题:【急】求大神一眼看破我程序的错误,可以成功调试,不过结果不是我想要的, ...
只看楼主 加入收藏
zhou_m_j
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2013-12-28
收藏
 问题点数:0 回复次数:1 
【急】求大神一眼看破我程序的错误,可以成功调试,不过结果不是我想要的,看一下吧


//程序实现多则运算及有括号的运算


#include<stdio.h>
#include<stdlib.h>

char TOK;

void match();
float low();
float mid();
float high();



void match( char matching )    //对当前的标志进行匹配

{


    if( TOK == matching ) TOK = getchar();        //匹配成功,获取下一个标志

    else

    {      

        printf("匹配不成功!\n");

        exit(1);                //匹配不成功,退出程序

    }

}



float high()                        //用于计算表达式中级别最高的运算,即带()的运算

{

    float Result;

    if( TOK == '(' )             //带有括号的运算

    {

        match( '(' );

        Result=low();                //递归计算表达式
        
        match(')');

    }

    else if ( TOK>= '0'&&TOK<='9' )                //实际的数字

    {

        ungetc( TOK, stdin );                //将读入的字符退还给输入流,为读取整个数

        scanf( "%f", &Result );                //读出数字

        TOK = getchar();                    //读出当前的标志

    }

    else

    {

        printf("输入的不是括号也不是数字\n");            //不是括号也不是数字

        exit(1);

    }

    return Result;

}




float mid()                                //用于计算表达式中级别较高的运算
{
    float div;                            //除数
    float Result = high();                //计算比乘除运算优先级别搞的部分


    while((TOK == '*')||(TOK == '/'))
        if(TOK == '*')
        {
            match('*');                        //进行乘法运算
            Result *= high();
            break;
        }
        else
        {
            match('/');                    //进行除法运算
            div = high();
            if(div == 0)                //判断除数是否为0
            {
                printf("除数为0.\n");
                exit(1);
            }
            Result  /= div;
            break;
        }


        return Result;
}





float low()                    //用于计算表达式中级别最低的运算
{

    float Result= mid();            //计算比加减运算优先级别高的部分

    while(( TOK == '+' ) || ( TOK == '-' ))

    if ( TOK == '+')

    {

        match('+');     //进行加法运算

        Result += mid();

        break;

    }

    else if ( TOK == '-')

    {

        match('-');    //进行减法运算

        Result -= mid();

        break;

    }

    return Result;

}



main()

{   

    float Result;            //运算的结果  
   
    printf("*****************************************\n");    //菜单

    printf("***********欢迎使用     计算器***********\n");

    printf("**     请输入一个类似于这样的式子      **\n");

    printf("**             2+3/2*(4-2)             **\n");

    printf("*****************************************\n");



    TOK = getchar();                //载入第一个符号
        
    Result = low();                    //进行计算

    if( TOK == '\n' )                // 是否一行结束

        printf( "=%f\n", Result );

    else

        {

            printf( "出现了例外的字符!\n");

            exit(1);                    //出现了例外的字符

        }

    getchar();

    return 0;

}



谢谢大神帮助了,解决成功给分
搜索更多相关主题的帖子: matching include 
2013-12-28 23:24
zhou_m_j
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2013-12-28
收藏
得分:0 
该出来的请发我邮箱吧,我不一定在守帖,谢谢,运行通过了我会给分的
2013-12-28 23:29
快速回复:【急】求大神一眼看破我程序的错误,可以成功调试,不过结果不是我想要 ...
数据加载中...
 
   



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

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