#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了