搜索
查看: 915|回复: 5
打印 上一主题 下一主题

大神进来给我看看啊!!超急!!

[复制链接]
跳转到指定楼层
楼主
发表于 2013-10-4 13:47:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币

#include <stdio.h>
#include <math.h>
#include<stdlib.h>
#include <windows.h>
char token;

void match( char expectedToken )
{
    if( token == expectedToken ) token = getchar(); /*匹配成功,获取下一个标志*/
    else
    {     
        printf("你的输入有问题。\n");
        exit(1);
    }
}


int high()
{
    int result;
    if( token == '(' )
    {
        match( '(' );    //匹配,结果,匹配
        result;
        match(')');
    }
    else if ( token>= '0'&&token<='9' ) /*实际的数字*/
    {
        ungetc( token, stdin ); /*将读入的字符退还给输入流,为读取整个数*/
        scanf( "%d", &result );
        token = getchar();
    }

    return result;
}


int mid()    /*用于计算表达式中级别较高的运算*/
{
    int div;      /*除数*/
    int result = high();   /*计算比乘除运算优先级别高的部分*/
    while(( token == '*' ) || ( token == '/' ))
        if ( token == '*')
        {
            match('*');  
            result *= high();
            break;  
        }
        else if (token == '/')
        {
            match('/');   /*进行除法运算*/
            div = high();
            if( div == 0 ) /*需要判断除数是否为0*/
            {
                printf( "除数为0.\n" );
                  exit(1);
            }
            result /= div;
            break;
        }
    return result;
}
int low()/*用于计算表达式中级别最低的运算*/
{
    int result = mid(); /*计算比加减运算优先级别高的部分*/
    while(( token == '+' ) || ( token == '-' ))
        if ( token == '+')
        {
            match('+');     /*进行加法运算*/
            result += mid();
            break;
        }
        else if ( token == '-')
        {
            match('-');    /*进行减法运算*/
            result -= mid();
            break;
        }
    return result;
}


int main()
{
    system("color 79");
    int result;  /*运算的结果*/                 
    printf("\t\t***一个简单的计算器***\n");
    printf("\n");
        printf("请输入你的计算题,按回车键结束:");
        printf("\n");
    token = getchar(); /*载入第一个符号*/
    result = low(); /*进行计算*/
    if( token == '\n' )
        printf( "答案是: %d\n", result );
    else
    {
        printf( "输入有误!");
        exit(1); /* 出现了例外的字符 */
        }
    scanf("%d",result);
    return 0;
}                                  这个程序不能进行带括号的计算,而且不能计算8+9+7之类的3位数计算,谁能帮我修改一下,十分感谢,另:我用的是vc++6.0

最佳答案

查看完整内容

这一段只能处理 () 这种表达式,其他情况都会exit(1); match('('),因为这时候'(' == '(',所以读取下一个字符 如果下一个是')',那么才能match成功 一般的中缀计算器要用两个Stack,找本数据结构的书去抄吧
沙发
发表于 2013-10-4 13:47:52 | 只看该作者
本帖最后由 rosynirvana 于 2013-10-8 18:06 编辑
zyj1994 发表于 2013-10-8 15:23
是为了实现计算器的基本功能,我也很好奇它为什么不能连加和括号的计算,难道程序不对吗?
  1. int result;
  2.     if( token == '(' )
  3.     {
  4.         match( '(' );    //匹配,结果,匹配
  5.         result;
  6.         match(')');
  7.     }
复制代码
这一段只能处理 () 这种表达式,其他情况都会exit(1);
match('('),因为这时候'(' == '(',所以读取下一个字符
如果下一个是')',那么才能match成功

一般的中缀计算器要用两个Stack,找本数据结构的书去抄吧
板凳
发表于 2013-10-4 14:59:42 | 只看该作者
不是很明白你要做什么
这段只是为了计算 a+b a-b a*b a/b这种最基本的运算?
地板
 楼主| 发表于 2013-10-8 15:23:28 | 只看该作者
rosynirvana 发表于 2013-10-4 14:59
不是很明白你要做什么
这段只是为了计算 a+b a-b a*b a/b这种最基本的运算?

是为了实现计算器的基本功能,我也很好奇它为什么不能连加和括号的计算,难道程序不对吗?
5#
发表于 2013-10-13 12:58:35 | 只看该作者
rosynirvana 发表于 2013-10-4 14:59
不是很明白你要做什么
这段只是为了计算 a+b a-b a*b a/b这种最基本的运算?

应该是把``````
6#
发表于 2013-10-13 17:17:36 | 只看该作者
rosynirvana 发表于 2013-10-4 14:59
不是很明白你要做什么
这段只是为了计算 a+b a-b a*b a/b这种最基本的运算?

没错,这个太繁琐,可以用这个
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.         union a
  6.     {
  7.                 int a1;
  8.                 float a2;
  9.     };
  10.     union b
  11.     {
  12.                 int b1;
  13.                 float b2;
  14.     };
  15.     char c;
  16.     printf("欢迎使用此计算机!\n");
  17.     printf("请输入您需要运算的格式:\n");
  18.     scanf("%c",&c);
  19.         printf("请输入第一个数:\n");
  20.     scanf("%d",&a);
  21.     scanf("%d",&a);
  22.     printf("请输入第二个数:\n");
  23.     scanf("%d",&b);
  24.     scanf("%d",&b);
  25.     printf("------------------------------\n");
  26.         if(c=='+')
  27.                 printf("它们的和是%d\n",a+b);
  28.         if(c=='-')
  29.                 printf("它们的差是%d\n",a-b);
  30.         if(c=='*')
  31.                 printf("它们的积是%d\n",a*b);
  32.         if(c=='/' && b!=0)
  33.                 printf("它们的商是%d,余数是%d\n",a/b,a%b);
  34.     if(c=='/' && b==0)
  35.                 printf("除数不能是零\n");
  36.     if(c!='+' && c!='-' && c!='*' && c!='/')
  37.                 printf("输入有误!\n");
  38.         system("pause");
  39.         return 0;
  40. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表