c语言摄氏度与华氏温度如何转换

电子说

1.2w人已加入

描述

  摄氏度与华氏度的转换公式为C=(F-32)*5/9。

  不少人看到这样的转换公式就会将摄氏度C和华氏度F定义成浮点数类型的变量。

  然后采用C语言编写

  C=(F-32)*5/9的语句进行转换。

  如果在带有浮点数高级处理器上运算、或者是对实时性没有要求,不在乎该转换所耗费的时间,则没有任何问题。

  但是如果该程序运行在普通的单片机,而且该单片机除了要进行转换之后,还有其它实时性要求高的任务需要处理。比如需要快速进行故障判断并进行保护,或者是需要进行通信数据处理,快速响应。

  比如需要进行输出短路的保护判断,有些输出的短路可能需要在几百us内进行保护,否则可能损坏器件,如果该转换耗时几ms以上,可能就会导致响应不及时,造成器件损坏。

  所以当程序运行在普通的单片机时,我们还需要考虑该单片机是否支持硬件的浮点数运算,甚至要考虑是否有硬件的乘法器。

  普通的单片机不支持硬件浮点数运算,浮点数的四则运算可能需要软件算法实现,会花费大量的时间。

  这种情况,我们可以根据精度和量程要求,放缩之后,将C和F定义为整型的变量,再进行运算。

  比如,如果我们取1位小数的精度,量程为100摄氏度,

  则可以将C和F定义为16位的整型,采用下列的程序进行转换;

  signed short C, F;

  C=(F-32)*50/9。

  早期的Microchip的PIC16F,PIC18F系列的处理器,没有硬件乘除法器,进行乘除法运算,都需要通过软件算法实现,可能耗费几十ms的时间。

  这种情况我们可以通过加法和移位操作实现;

  *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;

  这样可以大大节省转换时间。

  首先,我们要理解需求,就像你问的“摄氏度与华氏温度如何转换”,然后就是设计,简单点就是使用怎样的公式算法来解决问题,

  “摄氏温标”是经验温标之一,亦称“百分温标”。温度符号为t,单位是摄氏度,国际代号是“℃”

  华氏温标”是经验温标之一。在美国的日常生活中,多采用这种温标。规定在一大气压下水的冰点为32度,沸点为212度,两个标准点之间分为180等分,每等分代表1度。华氏温度用字母“F”表示。它与摄氏温度(C)和之间的换算关系为F=9/5c+32, 或C=5/9(F-32)。

  现在转换公式已经有了,就是编码实现了。

  代码:

  #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;

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分