攝氏度與華氏度的轉換公式為C=(F-32)*5/9。
不少人看到這樣的轉換公式就會將攝氏度C和華氏度F定義成浮點數(shù)類型的變量。
然后采用C語言編寫
C=(F-32)*5/9的語句進行轉換。
如果在帶有浮點數(shù)高級處理器上運算、或者是對實時性沒有要求,不在乎該轉換所耗費的時間,則沒有任何問題。
但是如果該程序運行在普通的單片機,而且該單片機除了要進行轉換之后,還有其它實時性要求高的任務需要處理。比如需要快速進行故障判斷并進行保護,或者是需要進行通信數(shù)據(jù)處理,快速響應。
比如需要進行輸出短路的保護判斷,有些輸出的短路可能需要在幾百us內進行保護,否則可能損壞器件,如果該轉換耗時幾ms以上,可能就會導致響應不及時,造成器件損壞。
所以當程序運行在普通的單片機時,我們還需要考慮該單片機是否支持硬件的浮點數(shù)運算,甚至要考慮是否有硬件的乘法器。
普通的單片機不支持硬件浮點數(shù)運算,浮點數(shù)的四則運算可能需要軟件算法實現(xiàn),會花費大量的時間。
這種情況,我們可以根據(jù)精度和量程要求,放縮之后,將C和F定義為整型的變量,再進行運算。
比如,如果我們取1位小數(shù)的精度,量程為100攝氏度,
則可以將C和F定義為16位的整型,采用下列的程序進行轉換;
signed short C, F;
C=(F-32)*50/9。
早期的Microchip的PIC16F,PIC18F系列的處理器,沒有硬件乘除法器,進行乘除法運算,都需要通過軟件算法實現(xiàn),可能耗費幾十ms的時間。
這種情況我們可以通過加法和移位操作實現(xiàn);
*5/9約等于36408/65536=(32768+2048+1024+512+32+16+8)/65536;
將C定義為32位的整型。
signed int C, d1,d2;
d1=F-32;
d2=d1 《《 3;//*8
d1 = d1 《《1;//*16
d2 += d1;
d1 = d1 《《 1;//*32;
d2 += d1;
d1 = d1 《《 5;//*512;
d2+= d1;
d1 = d1 《《 1;//*1024;
d2 += d1;
d1 = d1 《《 4; //*32768
d2+= d1;
C=d2》》16;
這樣可以大大節(jié)省轉換時間。
首先,我們要理解需求,就像你問的“攝氏度與華氏溫度如何轉換”,然后就是設計,簡單點就是使用怎樣的公式算法來解決問題,
“攝氏溫標”是經驗溫標之一,亦稱“百分溫標”。溫度符號為t,單位是攝氏度,國際代號是“℃”
華氏溫標”是經驗溫標之一。在美國的日常生活中,多采用這種溫標。規(guī)定在一大氣壓下水的冰點為32度,沸點為212度,兩個標準點之間分為180等分,每等分代表1度。華氏溫度用字母“F”表示。它與攝氏溫度(C)和之間的換算關系為F=9/5c+32, 或C=5/9(F-32)。
現(xiàn)在轉換公式已經有了,就是編碼實現(xiàn)了。
代碼:
#include 《stdio.h》
int main(void)
{
float F,C;
print(“華氏度--攝氏度轉換器\n”)
printf(“請輸入您需要轉換的華氏溫度:”);
scanf(“%f”,&F);
C = (F-32)*5/9.0;
printf(“其對應的攝氏溫度為:%.2f \n”,C);
return 0;
}
-
C語言
+關注
關注
180文章
7598瀏覽量
136182 -
攝氏度
+關注
關注
0文章
4瀏覽量
3615
發(fā)布評論請先 登錄
相關推薦
評論