![小学生C++创意编程(视频教学版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/24/52842024/b_52842024.jpg)
第5课 这面积总缺那么一点(浮点数数据类型)
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P48_4323.jpg?sign=1739037922-C02uygoNqkk7FbkRu8oabWHiyrGLWSFb-0-1354cfc6ed48d7ac843bee7c338b8299)
掌握计算后,我设计了计算三角形和梯形面积的程序,但是发现面积的计算结果总是会少了那么一点。
为什么面积总会缺一点呢?想要解决这个问题需要先编写出计算三角形和梯形面积的程序。
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P48_28656.jpg?sign=1739037922-bzc515b6v5Ld4549YGexGJw6gC6vvSW4-0-cffdc9757e93692badabbbede34ab73e)
温故知新
(1)三角形面积=底×高÷2。
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P48_28661.jpg?sign=1739037922-OnwIXh6tWvuLfET6yXNb8d88rVPWMgah-0-de1bb7ad41d2ada0af1b5a893a785c83)
运行程序:
请输入三角形的底边长? 7 请输入三角形的高? 5 三角形的面积是: 17
实际上,三角形的面积是17.5。
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P49_28665.jpg?sign=1739037922-jKJSg5axu6Q8skmQeWV94ZfzOYTbBeVG-0-6e594cae83fcbb3b55eb4ef2245a5ef8)
(2)梯形面积=(上底+下底)×高÷2。
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P49_28666.jpg?sign=1739037922-075xtds9wGnaetX7LQGskVrgGCcteEXZ-0-8587d777380156afb166ff89edd394ae)
运行程序:
请输入梯形的上底? 5 请输入梯形的下底? 8 请输入梯形的高? 3 梯形的面积是: 19
实际上,梯形面积是19.5。
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P50_28670.jpg?sign=1739037922-ippcsOCowqaEpbDyHny1kcV0aibwV32Y-0-8cc50b2adc3c574c2dd5ca4c49cccfea)
area = (upperSole + bottom) * height / 2:程序计算也是先乘除后加减,遇到括号先计算括号里的内容。
提出思考
为什么这两次面积计算都少了0.5呢?遇到问题,不要急于翻书查找答案,探索和思考出答案的过程要比答案本身更重要。
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P50_28677.jpg?sign=1739037922-LN42ytlUPdHQtm7HfeoB1ZkM7qY2uH5h-0-644a190dc0797bd1e19d9a650874b2c3)
(1)想一想,计算结果和什么有关?①存放数字的变量;②计算的式子。
(2)想一想,变量都是什么数据类型?
(3)看一看,计算式子有没有什么特别的?
探索思考
当我们遇到一个疑问的时候,要“上下求索”。从上寻求和这个问题有关联的部分,列出导致这样的结果的可能;向下探寻这个问题可能引出的变化,列出这些变化。然后逐一分析。
我发现最关键的可能是变量被声明为int类型,即声明的是整数类型,而缺少的部分都是小数部分。整数是不包含小数部分的,所以小数部分就出不来了。
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P50_28678.jpg?sign=1739037922-MWJACFtxyNZzirkNLzA8kE2WAn95oJKd-0-aac14db472b036c5a3547aa266baa080)
float浮点数
把变量声明为float数据类型。
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P51_28679.jpg?sign=1739037922-SF33KnauyOXbfpKCsPFQhBxRhOHlJzy2-0-7ca0f38ef1a5f5bd9d9d39a07eba588e)
运行程序:
请输入三角形的底边长? 7 请输入三角形的高? 5 三角形的面积是: 17.5
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P51_28683.jpg?sign=1739037922-0wsSvmGHurGQ8D9K0GqU0ycYUJshtEqe-0-507eb9a4566aa4b16e4906b234709f20)
float称为浮点数数据类型(单精度),用于存储实数值,即含有小数的值。如果你需要更高的精度,可以选择double数据类型,它被称为双精度浮点数。
翻译助力理解
● float:浮动的、漂浮。
● double:两倍的,双的。
area = length * height / 2:将计算length * height / 2,并将计算出的结果赋值给area。在编程中,该语句中的=被称为赋值操作,是先进行等号右边的计算,再将最终的结果赋值给等号左边的变量。注意,这里的=不是等于的含义。
敲黑板
特别注意没输出的小数部分。
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P52_28688.jpg?sign=1739037922-0KcIjUgXbhaQUQ0LZoREnUaIvwtixOM4-0-2fe7039521a3f9fde171b96f9bba760a)
输出结果竟然是1。
虽然已经将num定义为浮点数,但在3/2的计算过程中,由于3和2都是整数,计算仍然是按照整数类型的方式进行,直到计算出结果1后才将它赋值给浮点数类型的变量num。
想要解决这个问题,需要在计算的过程中引入浮点数,让计算机按照浮点数来计算。
稍作改变,改为num = 3/2.0;,试试看吧。
降价促销
双十一到了,之前5元一瓶的牛奶迎来了大促销,现在4.8元一瓶,并且还买一送一,请问买32瓶需要多少钱?
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P52_28690.jpg?sign=1739037922-BIXeRXvvtdGfIpi2HZXLSKYzagx6Xg2e-0-5548bddcf663ad5f0eefb16da654c743)
巩固练习
(1)想要声明一个变量存放数值3.14,以下哪句代码可以做到?( )
A.float π
B.int π
C.float num
D.float 1num
(2)float被称为有小数部分数值的双精度浮点数。( )√( )×
(3)写出下面程序的运行结果。
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P53_28694.jpg?sign=1739037922-AoyztiI6bvE0cr04GJoRc48l0vekjWOp-0-876ab42e5da4ae832ded2ce3a7f4fe18)
探索思考
既然float可以保留数值的小数部分,而double数据类型的精度比float数据类型的精度还要高,那为什么每次声明变量的时候不都声明成double,这样不就可以避免一些小数的计算问题了吗?
![](https://epubservercos.yuewen.com/1C2139/31397789403525706/epubprivate/OEBPS/Images/Figure-P53_28698.jpg?sign=1739037922-IH8DMx8D3BdmnWAuIoXZD1TzH7gkj7pq-0-cac35ea52d8e44617cda067b0deea6a9)
计算机好比一个超级大的储存盒子,想像一下往盒子里放入3.14159265359和放3.14所需要的空间大小会一样大吗?
如果往盒子里放东西时没有做规划的话,就可能导致放不下或只能裁剪后再放入。
于是发明者就想到了声明,即每放入一个东西就要空出一块专门的位置,就像一个小盒子。但是每个小盒子要多大呢?这就取决于数据类型了。如果是int数据类型,就空出一个小点的盒子,如果是double数据类型,就空出一个大盒子。这样就可以充分利用空间,而且也不会造成空间的浪费。