// File: FnAsArg.cpp // Example of passing function as parameter // Prepared by Dr. Spiegel #include #include "char_ops.h" void GetNumbers(int *X,int *Y); void OperateOnNumbers(int N1,int N2); int main() {int N1,N2; char Choice; GetNumbers(&N1,&N2); OperateOnNumbers(N1,N2); } void GetNumbers(int *X,int *Y) {printf("Enter two Integers >"); scanf("%d%d",X,Y); } int Add(int N1,int N2) {return(N1+N2);} int Sub(int N1,int N2) {return(N1-N2);} int Mul(int N1,int N2) {return(N1*N2);} int Div(int N1,int N2) {return(N1/N2);} int Mod(int N1,int N2) {return(N1%N2);} int Operate(int N1,int N2,int (*BinaryOp)(int,int)) {return((*BinaryOp)(N1,N2)); } void OperateOnNumbers(int N1,int N2) {char Choice; do { printf("Pick Operation: + - * / % Q Quits\n"); Choice=GetChoice("+-*/%Q"); switch(Choice) { case '+': printf("%d + %d = %d\n",N1,N2,Operate(N1,N2,Add)); break; case '-': printf("%d - %d = %d\n",N1,N2,Operate(N1,N2,Sub)); break; case '*': printf("%d * %d = %d\n",N1,N2,Operate(N1,N2,Mul)); break; case '/': printf("%d / %d = %d\n",N1,N2,Operate(N1,N2,Div)); break; case '%': printf("%d %% %d = %d\n",N1,N2,Operate(N1,N2,Mod)); break; } } while (Choice != 'Q'); }