问答详情
源自:5-14 综合练习

为什么我输入12 9 18,最后得出的是28?

#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;
}


提问者:慕无忌5114327 2017-08-22 18:52

个回答

  • Herzog
    2017-09-07 17:33:01

    首先,你的转换有问题,你定义的都是double型,但你在输入距离时间时,控制符是%d整型的,这是要进行强制转化,会有误差,然后你又将实参传递给了形参,而形参又是double型,本来经过第一次转换都有误差了怎么还能正确,能得到28只是因为经过这两次之后,错误更多,你传给形参的ditance已经变成了0,此时price3=13,下面的判断语句不在进行,然后它返回了结果。所以你得到了13+13+2=28.不要去想其他的,你这代码思路都没错,关键是你对类型转换的理解,强制转换最好少用。

    第二,你自创的函数体中那么多的条件语句,你只有一个返回值,你是要返回那个?虽然你能得到28是因为返回值为13,但,如果你将%d改为%lf后,会出现返回值为0的情况,是因为此时你的ditance已经为12,不满足<3的情况,需要继续往下判断,而此时,又有两个判断结果,你没有明确,虽然说返回值只有一个,但不代表你不能多用return。

  • 慕无忌5114327
    2017-08-24 00:37:22

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

  • qq_刘某_1
    2017-08-23 15:22:38

    你的程序太冗长复杂了,我看了半天,其实错在你最后的scanf,给距离赋值0然后进行计算,相当于你上车打个表就下车了,所以起步价加燃油费double就是28了