• [C] 逆波兰计算器


    来源:网络

    #include <stdio.h>
    #include
    <stdlib.h>
    #include
    <ctype.h>
    #define MAXOP 100
    #define NUMBER '0'

    int getop(char []);
    void push(double);
    double pop(void);

    int getch(void);
    void ungetch(int);

    int getop(char s[])
    {
    int i,c;
    while ((s[0]=c=getch())==' '|| c=='\t');
    s[
    1]='\0';
    if(!isdigit(c)&&c!='.')
    return c;
    i
    =0;
    if(isdigit(c))
    while (isdigit(s[++i]=c=getch()));
    if (c=='.')
    while (isdigit(s[++i]=c=getch()));
    s[i]
    ='\0';
    if (c!=EOF)
    ungetch(c);
    return NUMBER;
    }



    #define BUFSIZE 100
    char buf[BUFSIZE];
    int bufp=0;

    int getch(void)
    {
    return(bufp>0) ? buf[--bufp]:getchar();
    }
    void ungetch(int c)
    {
    if (bufp>=BUFSIZE)
    printf(
    "ungetch:too many characters\n");
    else
    buf[bufp
    ++]=c;
    }
    main()
    {
    int type;
    double op2;
    char s[MAXOP];
    while ((type=getop(s))!=EOF) {
    switch (type) {
    case NUMBER:
    push(atof(s));
    break;

    case '+':
    push(pop()
    +pop());
    break;
    case '*':
    push(pop()
    *pop());
    break;
    case '-':
    op2
    =pop();
    push(pop()
    -op2);
    break;
    case '/':
    op2
    =pop();
    if (op2!=0.0)
    push(pop()
    /op2);
    else
    printf(
    "error:zero divisor\n");
    break;
    /*case '/n':
    printf("\t%.8g\n",pop());
    break;
    */
    case 0x0a:
    printf(
    "\t%.8g\n",pop());
    break;

    default:
    printf(
    "error:unknown command %s\n",s);
    break;
    }
    }
    return 0;
    }


    #define MAXVAL 100

    int sp=0;
    double val[MAXVAL];

    void push(double f)
    {
    if (sp<MAXVAL)
    val[sp
    ++]=f;
    else
    printf(
    "error:strack full,can't push %g\n",f);
    }
    double pop(void)
    {
    if (sp>0)
    return val[--sp];
    else {
    printf(
    "error:stack empty\n");
    return 0.0;
    }
    }
  • 相关阅读:
    redis和memcached的对比
    Linux根目录下各目录含义
    阿里云常用服务介绍
    Nginx的负载均衡算法、lvs的负载均衡算法
    MySQL高可用架构之MHA
    SQL server 2012 各个版本比较
    500 ZuulException: Forwarding error
    Hibernate --主键生成策略
    springboot配置activeMQ传输object类型的消息时:classnotfound问题
    JMS简介与API
  • 原文地址:https://www.cnblogs.com/hcbin/p/1711426.html
Copyright © 2020-2023  润新知