基於硬體的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。