K&R的名著:小程序总结2

1、push函数:把f压入到值栈中

#define MAXVAL 100

int sp = 0;
double val[MAXVAL];

void push(void)
{
    if (sp < MAXVAL)
       val[sp++] = f;
    else
       printf("error: stack full, can't push %g\n",f);

}

2、pop函数:弹出并返回栈顶的值

double pop(void)
{
    if (sp > 0)
          return val[--sp];
    else  {
         printf("error: stack empty!\n");
         return 0.0;
  }

}

3、简易计算器(逆波兰表示法)

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

#define MAXOP 100
#define NUMBER '0'

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

int main(void)
{
  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 '-':
	op2 = pop();
	push(pop()- op2);
	break;
      case '*':
	push(pop() * pop());
	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());
      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: stack 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;
  }
  
}

#include<ctype.h>

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
charbuf[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;
}




 

你可能感兴趣的:(K&R的名著:小程序总结2)