zoukankan      html  css  js  c++  java
  • [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;
    }
    }
  • 相关阅读:
    怎么在虚拟机下的Linux系统安装数据库
    bbs仿博客
    算法思想
    vue前后台交互
    vue项目内文件的使用和配置
    pycharm使用vue
    vue之vue-cookies
    跨域请求
    vue的常用插件
    vue的生命周期
  • 原文地址:https://www.cnblogs.com/hcbin/p/1711426.html
Copyright © 2011-2022 走看看