Code:#include <stdio.h> #include <stdlib.h> #include <ctype.h> #define LINE_MAXLENGTH 80 void add(int num1, int num2,FILE * ofp) { printf("%double + %double = %double\n",num1,num2,num1+num2); fprintf(ofp,"%double + %double = %double\n",num1,num2,num1+num2); } void multiply(int num1, int num2,FILE *ofp) { printf("%double * %double = %double\n",num1,num2,num1 * num2); fprintf(ofp,"%double * %double = %double\n",num1,num2,num1 * num2); } void substract(int num1, int num2, FILE *ofp) { printf("%double - %double = %double\n",num1,num2,num1-num2); fprintf(ofp,"%double - %double = %double\n",num1,num2,num1-num2); } void divide(int num1,int num2, FILE * ofp) { fprintf(ofp,"%d / %d = %d\n",num1,num2,num1/num2); printf("%d / %d = %d\n",num1,num2,num1/num2); } void toUpperCase(char ch, FILE * ofp) { printf("%c ==> %c\n",ch,toupper(ch)); fprintf(ofp,"%c ==> %c\n",ch,toupper(ch)); } void toLowerCase(char ch,FILE * ofp) { printf("%c ==> %c\n",ch,tolower(ch)); fprintf(ofp,"%c ==> %c\n",ch,tolower(ch)); } void printKthDigit(int val, int k,FILE * ofp) { int i=1; int temp =val; while(temp >0) { if(i == k) { printf("%d (digit @ %d) ==> %d\n",val,k, temp%10); fprintf(ofp,"%d (digit @ %d) ==> %d\n",val,k, temp%10); break; }; i++; temp = temp/10; } } void roundDecimal(double x, int n, FILE * ofp) { char temp[32]=""; double rounded = round(x); sprintf(temp,"%.*lf",n,rounded); printf("%lf (precision=%d) => %s\n",x,n,temp); fprintf(ofp,"%lf (precision=%d) => %s\n",x,n,temp); } void separte(double x , FILE * ofp) { char temp[32]=""; char sign; int intPart; int fraction; sprintf(temp,"%lf",x); sscanf(temp,"%d.%d",&intPart,&fraction); if(intPart > 0) sign = '+'; else { sign = '-'; intPart = -1 * intPart; } printf("%lf ==> sign=%c, integer=%d,fraction=%d\n",x, sign,intPart,fraction); fprintf(ofp,"%lf ==> sign=%c, integer=%d,fraction=%d\n",x, sign,intPart,fraction); } void partitionInteger(int i, int x, FILE * ofp) { int j; int k; j =floor(x* i/100.0); k = i-j; printf("i=%d,x=%d ==> j=%d, k=%d \n",i,x,j,k); fprintf(ofp,"i=%d,x=%d ==> j=%d, k=%d \n",i,x,j,k); } void help( FILE * ofp) { printf("\n *** Help Menu! See below for Calculator Commands: ***\n"); printf("\n + i j ---> Add integers i and j \n"); printf("\n * i j ---> Multiply integers i and j \n"); printf("\n + -i j ---> Subtract integer j from i \n"); printf("\n /i j ---> Divide integer i by j \n"); printf("\n C Ch ---> Change character Ch to uppercase \n"); printf("\n c Ch ---> Change character Ch to lowercase \n"); printf("\n P i k ---> Print out the k-th digit of integer i \n"); printf("\n R x i ---> Round double value x to i decimal places \n"); printf("\n S x ---> Separate out the sign, integer part and fractional part of double value x \n"); printf("\n D i x ---> Given integers i and x, print out two integers j and k, where the sum of j and k equals i, and when you take x'percent' of i and truncate it you get j \n"); printf("\n H ---> view all commands \n"); printf("\n Q ---> Quit program\n"); } int main(void) { float num1, num2, result; char op, ch; double firstDouble; int temp; FILE* cmd = fopen("CommandsProj2.dat", "r"); if (cmd == NULL) { printf("File could not be opened"); return EXIT_FAILURE; } char line[LINE_MAXLENGTH + 1]; while (fgets(line, LINE_MAXLENGTH + 1, cmd)) { float result; line[strcspn(line, "\n")] = '\0'; if (strcmp(line, "DA") == 0) { } else if (strcmp(line, "Q") == 0) { } else if (strcmp(line, "H") == 0) { printf("\nHelp:operations are + - * / H Q\n"); continue; } else if (sscanf(line, "%c %f %f", &op, &num1, &num2) == 3) { printf("CMD=%int : ",cmd); if(cmd == '+') { sscanf(temp,"%f %f",&num1,&num2); add(num1,num2,cmd); } else if (cmd == '*') { sscanf(temp,"%f %f",&num1,&num2); multiply(num1,num2,cmd); } else if (cmd == '-') { sscanf(temp,"%f %f",&num1,&num2); substract(num1,num2,cmd); } else if (cmd == '/') { sscanf(temp,"%f %f",&num1,&num2); divide(num1,num2,cmd); } else if (cmd == 'C') { sscanf(temp,"%c",&ch); toUpperCase(ch,cmd); } else if (cmd == 'c') { sscanf(temp,"%c",&ch); toLowerCase(ch,cmd); } else if (cmd == 'P') { sscanf(temp,"%i %i",&num1, &num2); printKthDigit(num1,num2,cmd); } else if (cmd == 'R') { sscanf(temp, "%d %d",&firstDouble,&num2); roundDecimal(firstDouble, num2,cmd); } else if (cmd == 'S') { sscanf(temp,"%lf",&firstDouble); separte(firstDouble,cmd); } else if (cmd == 'D') { sscanf(temp,"%i %i",&num1,&num2); partitionInteger(num1,num2,cmd); } else if (cmd == 'H') { help(cmd); } else if (cmd == 'Q') { break; } printf("\n%c Operator: %4.1f %c %4.1f = %4.1f \n", op, num1, op, num2, result); fflush (stdout); } } return EXIT_SUCCESS; }