#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("小明每天打車(chē)的總費(fèi)用為%lf\n",price0);????
????return?0;
}
2017-09-07
首先,你的轉(zhuǎn)換有問(wèn)題,你定義的都是double型,但你在輸入距離時(shí)間時(shí),控制符是%d整型的,這是要進(jìn)行強(qiáng)制轉(zhuǎn)化,會(huì)有誤差,然后你又將實(shí)參傳遞給了形參,而形參又是double型,本來(lái)經(jīng)過(guò)第一次轉(zhuǎn)換都有誤差了怎么還能正確,能得到28只是因?yàn)榻?jīng)過(guò)這兩次之后,錯(cuò)誤更多,你傳給形參的ditance已經(jīng)變成了0,此時(shí)price3=13,下面的判斷語(yǔ)句不在進(jìn)行,然后它返回了結(jié)果。所以你得到了13+13+2=28.不要去想其他的,你這代碼思路都沒(méi)錯(cuò),關(guān)鍵是你對(duì)類(lèi)型轉(zhuǎn)換的理解,強(qiáng)制轉(zhuǎn)換最好少用。
第二,你自創(chuàng)的函數(shù)體中那么多的條件語(yǔ)句,你只有一個(gè)返回值,你是要返回那個(gè)?雖然你能得到28是因?yàn)榉祷刂禐?3,但,如果你將%d改為%lf后,會(huì)出現(xiàn)返回值為0的情況,是因?yàn)榇藭r(shí)你的ditance已經(jīng)為12,不滿足<3的情況,需要繼續(xù)往下判斷,而此時(shí),又有兩個(gè)判斷結(jié)果,你沒(méi)有明確,雖然說(shuō)返回值只有一個(gè),但不代表你不能多用return。
2017-08-24
為什么我定義的函數(shù)輸出的是0?
2017-08-23
你的程序太冗長(zhǎng)復(fù)雜了,我看了半天,其實(shí)錯(cuò)在你最后的scanf,給距離賦值0然后進(jìn)行計(jì)算,相當(dāng)于你上車(chē)打個(gè)表就下車(chē)了,所以起步價(jià)加燃油費(fèi)double就是28了