1. 程式人生 > >基於硬體的C(C++)語言程式設計教程10:運輸公司計算運費

基於硬體的C(C++)語言程式設計教程10:運輸公司計算運費

本系列文章希望探討以硬體為平臺講述C(C++)知識的一個新的途徑,改變目前大多數C語言教程僅注重C語言本身的語法規則,而脫離其應用環境的現狀。希望讀者通過本教程的學習,能夠立刻學以致用,真正將所學知識應用到專案實踐中。

開發環境:Atmel Studio 7.0

硬體平臺:Microchip AVR ATmega168PA

參考教材:C++程式設計(第3版) 譚浩強編著,清華大學出版社

備註:教程僅適合初學者,高手請繞過
 

本文將對教材P68頁的例程3.9進行改進,使之能夠運行於Atmel Studio。例程3.9的原題如下:

運輸公司對使用者計算運費,路程(s,單位公里)越遠,每公里運費越低,標註如下:

                   s < 250             沒有折扣

     250   <= s < 500            2%

     500   <= s < 1000          5%

     1000 <= s < 2000          8%

     2000 <= s < 3000          10%

     3000 <= s                       15%

解題思路:設每公里每噸貨物的基本運費為p,貨物重為w,距離為s,折扣為d,則總運費f為:

     f = p * w * s * (1 - d)

如果應用switch語句,則必須找到最大公約數,我們從題中的分析可以看出最大公約數為250,這樣就可將題目轉化為1個單獨的整型變數,以用於switch的表示式。

一、源程式(改進後)

/*
 *	專案名稱:運輸公司計算運費
 *	作者:snmplink
 *	建立時間:2018-11-7
 *	備註:
 */ 

#include <avr/io.h>


int main(void)
{
    int c, s;
    float p, w, d, f;
	
    p = 100;		//p為運費
    w = 20;			//w為重量
    s = 300;		//s為距離	
	
    while (1) 
    {
        if (s >= 3000)
        {
            c = 12;
        }
        else
        {
            c = s / 250;	//整型除以整型還是整型
        }
        switch (c)
        {
        case 1:
            d = 2;
            break;
        case 2:
        case 3:
            d = 5;
            break;
        case 4:
        case 5:
        case 6:
        case 7:
            d = 8;
            break;
        case 8:
        case 9:
        case 10:
        case 11:
            d = 10;
            break;
        case 12:
            d = 15;
            break;
        }
        f = p * w * s * (1 - d / 100.0);
    }
}

二、執行結果

三、流程圖

四、註解

1、switch後面括號內的“表示式”,只能是數值型別資料。

2、當switch表示式的值與某一個case子句中的常量表達式的值相匹配時,就執行此case子句中的內嵌語句,若所有的case子句中的常量表達式的值都不能與switch表示式的值匹配,就執行default子句的內嵌語句。

3、每一個case表示式的值必須互不相同。

4、各個case和default的出現次序不影響執行結果。

5、執行完一個case子句後,流程控制轉移到下一個case子句繼續執行,不再進行判斷。

6、如果希望跳出switch結構,可以使用break語句。

 

任何問題,只需在此文章的評論處留言即可,我將盡力解答,不要試圖採用其它的聯絡方式,我一概不理會。

原創性文章,轉載請註明出處CSDN:http://blog.csdn.net/qingwufeiyang12346。