为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我输入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;
}


正在回答

3 回答

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

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

0 回复 有任何疑惑可以回复我~
#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?

0 回复 有任何疑惑可以回复我~
#1

qq_刘某_1

建议你把前面几章的内容好好看看,你先定义了一个静态函数 价格,然后又在if里定义了动态函数价格,所以最后返回值时,返回的是空的静态函数。
2017-08-27 回复 有任何疑惑可以回复我~
#2

qq_刘某_1

建议你把前面几章的内容好好看看,你先定义了一个静态函数 价格,然后又在if里定义了动态函数价格,所以最后返回值时,返回的是空的静态函数。
2017-08-27 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

慕无忌5114327 提问者

非常感谢您能认真地看完我的程序,但是现在的是问题是为什么我定义的函数输出的是0?
2017-08-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信