掌握计算后,我设计了计算三角形和梯形面积的程序,但是发现面积的计算结果总是会少了那么一点。
为什么面积总会缺一点呢?想要解决这个问题需要先编写出计算三角形和梯形面积的程序。
温故知新
(1)三角形面积=底×高÷2。
运行程序:
请输入三角形的底边长? 7 请输入三角形的高? 5 三角形的面积是: 17
实际上,三角形的面积是17.5。
(2)梯形面积=(上底+下底)×高÷2。
运行程序:
请输入梯形的上底? 5 请输入梯形的下底? 8 请输入梯形的高? 3 梯形的面积是: 19
实际上,梯形面积是19.5。
area = (upperSole + bottom) * height / 2 :程序计算也是先乘除后加减,遇到括号先计算括号里的内容。
提出思考
为什么这两次面积计算都少了0.5呢?遇到问题,不要急于翻书查找答案,探索和思考出答案的过程要比答案本身更重要。
(1)想一想,计算结果和什么有关?①存放数字的变量;②计算的式子。
(2)想一想,变量都是什么数据类型?
(3)看一看,计算式子有没有什么特别的?
探索思考
当我们遇到一个疑问的时候,要“上下求索”。从上寻求和这个问题有关联的部分,列出导致这样的结果的可能;向下探寻这个问题可能引出的变化,列出这些变化。然后逐一分析。
我发现最关键的可能是变量被声明为 int 类型,即声明的是整数类型,而缺少的部分都是 小数 部分。整数是不包含小数部分的,所以小数部分就出不来了。
float浮点数
把变量声明为 float 数据类型。
运行程序:
请输入三角形的底边长? 7 请输入三角形的高? 5 三角形的面积是: 17.5
float 称为浮点数数据类型(单精度),用于存储实数值,即含有小数的值。如果你需要更高的精度,可以选择 double 数据类型,它被称为双精度浮点数。
翻译助力理解
● float:浮动的、漂浮。
● double:两倍的,双的。
area = length * height / 2 :将计算 length * height / 2 ,并将计算出的结果赋值给 area 。在编程中,该语句中的 = 被称为赋值操作,是先进行等号右边的计算,再将最终的结果赋值给等号左边的变量。注意,这里的 = 不是等于的含义。
敲黑板
特别注意没输出的小数部分。
输出结果竟然是 1 。
虽然已经将 num 定义为浮点数,但在 3/2 的计算过程中,由于3和2都是整数,计算仍然是按照整数类型的方式进行,直到计算出结果 1 后才将它赋值给浮点数类型的变量 num 。
想要解决这个问题,需要在计算的过程中引入浮点数,让计算机按照浮点数来计算。
稍作改变,改为 num = 3/2.0; ,试试看吧。
降价促销
双十一到了,之前5元一瓶的牛奶迎来了大促销,现在4.8元一瓶,并且还买一送一,请问买32瓶需要多少钱?
巩固练习
(1)想要声明一个变量存放数值3.14,以下哪句代码可以做到?( )
A.float π
B.int π
C.float num
D.float 1num
(2)float被称为有小数部分数值的双精度浮点数。( )√( )×
(3)写出下面程序的运行结果。
探索思考
既然 float 可以保留数值的小数部分,而 double 数据类型的精度比 float数据类型的精度 还要高,那为什么每次声明变量的时候不都声明成 double ,这样不就可以避免一些小数的计算问题了吗?
计算机好比一个超级大的储存盒子,想像一下往盒子里放入3.14159265359和放3.14所需要的空间大小会一样大吗?
如果往盒子里放东西时没有做规划的话,就可能导致放不下或只能裁剪后再放入。
于是发明者就想到了 声明 ,即每放入一个东西就要空出一块专门的位置,就像一个小盒子。但是每个小盒子要多大呢?这就取决于数据类型了。如果是 int 数据类型,就空出一个小点的盒子,如果是 double 数据类型,就空出一个大盒子。这样就可以充分利用空间,而且也不会造成空间的浪费。