C日常程式設計--3
阿新 • • 發佈:2018-12-18
C日常程式設計——3.四捨五入
題目
7-18 計程車計價 (15 分) 本題要求根據某城市普通計程車收費標準編寫程式進行車費計算。具體標準如下: 起步里程為3公里,起步費10元; 超起步里程後10公里內,每公里2元; 超過10公里以上的部分加收50%的回空補貼費,即每公里3元; 營運過程中,因路阻及乘客要求臨時停車的,按每5分鐘2元計收(不足5分鐘則不收費)。 輸入格式: 輸入在一行中給出輸入行駛里程(單位為公里,精確到小數點後1位)與等待時間(整數,單位為分鐘),其間以空格分隔。 輸出格式: 在一行中輸出乘客應支付的車費(單位為元),結果四捨五入,保留到元。 輸入樣例1: 2.6 2 輸出樣例1: 10 輸入樣例2: 5.1 4 輸出樣例2: 14 輸入樣例3: 12.5 9 輸出樣例3: 34
程式1
#include <stdio.h>
int main(int argc, char **argv) {
float km,m1,m2,m;
int t;
scanf("%f",&km);
scanf("%d",&t);
if(km>0&&km<3)
m1=10;
else if(km<=10)
m1=10+(km-3)*2;
else
m1=10+7*2+(km-10)*3;
if(t<5) m2=0;
else m2=t/5*2.0;
//修改以下部分
m=m2+m1;
printf("%.1f\n",m); //值直接顯示
printf("%d\n",m); //printf轉換
m=(int)m;
printf("%.1f\n",m); //強制轉換
return 0;
}
結果
$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
12.5 9
33.5
33
33.0
Program exited with status 0
分析: 計算得33.5,printf轉換後為33,強制轉換後也為33,強制轉換無法實現四十五入。 強制轉換(以上兩種方式)直接省略小數點後的值
程式2
//修改以下部分
m=m2+m1;
printf("%.1f\n",m);
m=m2+m1+0.5;
printf("%d\n",m);
m=(int)m;
printf("%.1f\n",m);
結果
$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
12.5 9
33.5
34
34.0
Program exited with status 0
分析: 實際值為33.5,四十五入為34 利用強制轉換直接省略小數點後值的特點,人為地將值加上0.5,然後強制轉換以實現四捨五入