题目描述:2013年起,火车票退票费比例下调:票面乘车站开车时间前48小时以上的按票价5%计退票费。同时,车票退票费的计算方法不再四舍五入到元为单位,而是以5角为单位:尾数小于0.25元的舍去、不小于0.25元且小于0.75元的计为0.5元、不小于0.75元的进为1元。编写一个函数,计算退票费,假定退票时间举例开车时间在48小时以上。函数原型如下:
double CancelFee(double price);
输入:输入一个实数,表示火车票票面价格。
输出:输出一个实数,表示退票费,结果保留一位小数。
样例输入
106
样例输出
5.5
思路:使用modf()函数分离浮点数的整数和小数部分。
C语言 modf() 函数用来提取双精度浮点数的小数部分和整数。
double modf(double x, double *intptr) 将提取浮点数 x 的整数部分和小数部分,整数部分被存入参数 intptr 中,小数部分被放入返回值中。
头文件:math.h
语法/原型:double modf(double x, double *intptr);
参数说明:
x:要被计算的浮点数;
intptr:一个指向整数部分的指针。
返回值:x 的小数部分。
代码:
#include<stdio.h>
#include <math.h>
double CancelFee(double price);
int main(){
double price;
scanf("%lf",&price);
printf("%.1lf",CancelFee(price));
}
double CancelFee(double price){
double fee=price*0.05,intpart;
double fractpart=modf(fee,&intpart);//用modf()提取整数部分和小数部分
if(fractpart<0.25) return intpart;
else if(fractpart<0.75) return intpart+0.5;
else return intpart+1;
}
//http://c.biancheng.net/c/modf.html
运行结果:
笔者水平有限,不到之处,还望诸位批评指正。