# include  <stdio.h> # include  <stdlib.h> # include  <ctype.h> # include  <string.h> # define  MAXOP  100 # define  NUMBER  '0' # define  MAXVAL  100 # define  BUFSIZE  100 int  sp =  0 ; 
double  val[ MAXVAL] ; char  buf[ BUFSIZE] ; 
int  bufp =  0 ; 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 ; } 
} void  printTop ( void ) { if ( sp >  0 ) { printf ( "Top: %g\n" ,  val[ sp- 1 ] ) ; } else { printf ( "Error! Stack Empty!\n" ) ; } 
} void  topCopy ( void ) { if ( sp >  0  ||  sp <  MAXVAL) { val[ sp++ ]  =  val[ sp- 1 ] ; } else  if ( sp <=  0 ) { printf ( "Error! Stack Empty!\n" ) ; } else { printf ( "Error! Stack Full!\n" ) ; } 
} void  swapTop ( void ) { double  temp; if ( sp >=  2 ) { temp =  val[ sp- 1 ] ; val[ sp- 1 ]  =  val[ sp- 2 ] ; val[ sp- 2 ]  =  temp; } else { printf ( "Can't Swap Top Number!\n" ) ; } 
} void  emptyStack ( void ) { for ( int  i =  sp -  1 ;  i >=  0 ;  i-- ) { val[ i]  =  0 ; } sp =  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; } 
} int  getop ( char  s[ ] ) { int  i,  c; while ( ( s[ 0 ]  =  c =  getch ( ) )  ==  ' '  ||  c ==  '\t' ) ; s[ 1 ]  =  '\0' ; if ( c ==  '-' ) { int  next =  getch ( ) ; if ( ! isdigit ( next)  &&  next !=  '.' ) { ungetch ( next) ; return  c; } s[ 1 ]  =  c =  next; i =  1 ; } else { i =  0 ; if ( ! isdigit ( c)  &&  c !=  '.' ) { return  c; } } 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; 
} int  main ( ) { for ( double  i =  0.0 ;  i <  10.0 ;  i++ ) { push ( i) ; } printTop ( ) ; swapTop ( ) ; printTop ( ) ; topCopy ( ) ; printTop ( ) ; emptyStack ( ) ; printTop ( ) ; system ( "pause" ) ; return  0 ; 
}