/******************************************************* Computer Programming - I Warmup Problem Sheet - 1999-2000 *******************************************************/ /* * Question: * Write a program that takes a positive number with a fractional part * and round it to two decimal places. * For example, 32.4851 would round to 32.49 and 32.4431 would round to 32.44. * Do not use the precision specifier of the control string in printf function. */ #include <stdio.h> #define NUM_LENGTH 20 main() { char str[NUM_LENGTH]; int len,i=0,point_position=-1; printf("Give the number: "); scanf("%s",str); len=strlen(str); for(i=0;i<len;i++) { if((str[i]<'0'||str[i]>'9') && str[i]!='.') { printf("Error: This is not a floating point number\n"); exit(1); } if(str[i]=='.') if(point_position>=0) { printf("Error: This is not a floating point number\n"); exit(1); } else point_position=i; } for(i=len-1;i>point_position+2;i--) if(str[i]>='5') str[i-1]+=1; // if(str[point_position+2]>'9') // str[point_position+2]='9'; for(i=point_position+2;i>0;i--) { if(i==point_position) continue; if(str[i]>'9') { if(i-1==point_position) str[i-2]+=1; else str[i-1]+=1; str[i]-=10; } else break; } if(str[0]>'9') { printf("1"); str[0]-=10; } str[point_position+3]='\0'; printf("%s\n",str); }/* End of main*/