#include <stdio.h>
double price(double ditance,double period)
{
double price3=0;
if(ditance<3)
{
price3=13;
}
else if(period<23||period>5)
{
double price3=13+(ditance-3)*2.3;
}
else
{
double price3=13+(ditance-3)*2.3*1.2;
}
return price3;
}
int main()
{
double price0=0;
double price1=0;
double price2=0;
double ditance1=0;
double period1=0;
double period2=0;
scanf("%d%d%d",&ditance1,&period1,&period2);
price1=price(ditance1,period1);
price2=price(ditance1,period2);
price0=price1+price2+2;
printf("小明每天打车的总费用为%lf\n",price0);
return 0;
}首先,你的转换有问题,你定义的都是double型,但你在输入距离时间时,控制符是%d整型的,这是要进行强制转化,会有误差,然后你又将实参传递给了形参,而形参又是double型,本来经过第一次转换都有误差了怎么还能正确,能得到28只是因为经过这两次之后,错误更多,你传给形参的ditance已经变成了0,此时price3=13,下面的判断语句不在进行,然后它返回了结果。所以你得到了13+13+2=28.不要去想其他的,你这代码思路都没错,关键是你对类型转换的理解,强制转换最好少用。
第二,你自创的函数体中那么多的条件语句,你只有一个返回值,你是要返回那个?虽然你能得到28是因为返回值为13,但,如果你将%d改为%lf后,会出现返回值为0的情况,是因为此时你的ditance已经为12,不满足<3的情况,需要继续往下判断,而此时,又有两个判断结果,你没有明确,虽然说返回值只有一个,但不代表你不能多用return。
#include <stdio.h>
double price(double ditance,double period)
{
double Price;
if(ditance<3)
{
double Price=13;
}
else if(period<23||period>5)
{
double Price=13+(ditance-3)*2.3;
}
else
{
double Price=13+(ditance-3)*2.3*1.2;
}
return Price;
}
int main()
{
//double price0;
double price1;
//double price2;
//double ditance1;
//double period1;
//double period2;
//scanf("%d,%d,%d",&ditance,&period1,&period2);
price1=price(12,9);
// price2=price(12,18);
//price0=price1+price2;
printf("小明每天打车的总费用为%lf\n",price(12,9));
return 0;
}为什么我定义的函数输出的是0?
你的程序太冗长复杂了,我看了半天,其实错在你最后的scanf,给距离赋值0然后进行计算,相当于你上车打个表就下车了,所以起步价加燃油费double就是28了