1. 程式人生 > >C日常程式設計--3

C日常程式設計--3

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,然後強制轉換以實現四捨五入