已知 int 类型的变量 a 和 b 中分别存储着一个直角三角形的两条直角边的长度,则该三角形的面积可以通过表达式 a / 2.0 * b 求得。
图的存储方式:邻接矩阵(O(n²)空间,适合稠密图)、邻接表(O(n+m)空间,适合稀疏图)。
有向完全图边数为n(n-1),无向完全图边数为n(n-1)/2。简单图不含自环和重边。
【考点】整数除法|浮点运算|C++算术表达式求值
直角三角形面积公式为a*b/2,因a、b为int,若直接a/2*b会先做整数除法丢失精度。但表达式a/2.0*b中2.0是double,强制a转为double参与运算,结果仍为double类型,完美匹配面积计算需求。
命题人埋了双重陷阱:一是诱导你用整数除法思维看a/2.0,二是让你误以为最终结果仍是int。实际上C++运算规则中int与double混合必转double,a/2.0就是double除法,再乘b仍是double,完全符合面积计算需求。
若题目改成float类型变量,表达式依然成立,但考点就退化为类型转换;若写成a/2*b则必错。刷到类似题先问:命题人特意写2.0想考什么?答案永远是考察浮点运算优先级与类型提升。