# K & R C Programs Exercise 4-3.

K and R C, Solution to Exercise 4-3:
K and R C Programs Exercises provides the solution to all the exercises in the C Programming Language (2nd Edition) . You can learn and solve K&R C Programs Exercise.
Write a c program to implement Basic framework, it’s straight forward to extend the calculate. Add the modulus(%) operator and provisions for negative numbers. Read more about C Programming Language .

`/************************************************************ You can use all the programs on  www.c-program-example.com* for personal and learning purposes. For permissions to use the* programs for commercial purposes,* contact [email protected]* To find more C programs, do visit www.c-program-example.com* and browse!* *                      Happy Coding***********************************************************/#include<stdio.h>#include<math.h>       /*for atof()*/#define MAXTOP 100     /* max size of operand or operator  */#define NUMBER  '0'    /* SIGNAL THAT A NUMBER WAS FOUND   */int gettop(char []);void push(double);double pop(void);//reverse Polish calulatorint 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 '*':   push(pop() * pop());   break;  case '-':   op2=pop();   push(pop() - op2);   break;  case '-':   op2=pop();   if(op2 != 0.0)    push(pop() / op2);   else printf("nError: Zero divissorn")       break;  case '%':   op2 = pop();   if(op2)    push(fmod(pop(), op2));   else    printf("nError: Division by zero!");   break;  case 'n':   printf("t%.8gn",pop());   break;   default:   printf("error: unknown command %sn", s);   brak;  } } return 0;}/* Getop: get next operator or numeric operand. */int getop(char s[]){#define PERIOD  '.' int i = 0; int c; int next; /* Skip whitespace */ while((s = c = getch()) == ' ' || c == 't')  ; s = ''; /* Not a number but may contain a unary minus. */ if(!isdigit(c) && c != PERIOD && c != '-')  return c;                if(c == '-') {  next = getch();  if(!isdigit(next) && next != PERIOD)  {   return c;  }  c = next; } else {  c = getch(); } while(isdigit(s[++i] = c))  c = getch(); if(c == PERIOD)                     /* Collect fraction part. */  while(isdigit(s[++i] = c = getch()))   ; s[i] = ''; if(c != EOF)  unGetch(c); return NUMBER;#define MAXVAL 100int sp = 0;          /* Next free stack position. */double val[MAXVAL];  /* value stack. *//* push: push f onto stack. */void push(double f){    if(sp < MAXVAL)        val[sp++] = f;    else         printf("nError: stack full can't push %gn", f);}/*pop: pop and return top value from stack.*/double pop(void){    if(sp > 0)        return val[--sp];    else    {        printf("nError: stack emptyn");        return 0.0;    }}}`
`Read more Similar C ProgramsC BasicC StringsK and R C Programs Exercise`

You can easily select the code by double clicking on the code area above.