【GESP】C++一级练习BCQM3054(luogu-B2013),温度表达转化
GESP一级知识点:浮点数、整数运算+格式化输出知识点的应用。
BCQM3054(luogu-B2013),温度表达转化
题目要求
描述
利用公式 C=5×(F−32)÷9(其中C表示摄氏温度,F表示华氏温度)进行计算转化,输入华氏温度F,输出摄氏温度C,要求精确到小数点后5位。
输入
输入一行,包含一个实数F,表示华氏温度。(F≥−459.67)。
输出
输出一行,包含一个实数,表示对应的摄氏温度,要求精确到小数点后5位。
输入样例
41
输出样例
5.00000
题目分析
这是一道典型的公式计算 + 格式化输出题,考察了 GESP 一级中最基础的几个知识点:
- 变量类型的选择: 题目说”输入一个实数”,而且输出要”精确到小数点后5位”。所以我们必须使用
double(双精度浮点数)来存储温度值,而不能用int(整数)。如果用int,小数部分会被直接丢掉。 - 套公式计算: 题目已经给出了转换公式 $C = 5 \times (F - 32) \div 9$。我们只需要把华氏温度 $F$ 读入后,按照公式计算出摄氏温度 $C$ 即可。
- 格式化输出: 题目要求”精确到小数点后5位”,这需要使用
printf的格式控制符%.5f,其中.5表示保留 5 位小数,f表示输出的是浮点数。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdio>
int main() {
// 定义一个 double 类型的变量 f,用来存储输入的华氏温度
// 因为温度可能是带小数的实数,所以必须用 double 而不是 int
double f;
scanf("%lf", &f); // 用 %lf 读入一个 double 类型的值
// 按照公式计算摄氏温度:C = 5 * (F - 32) / 9
double c = 5 * (f - 32) / 9;
// 输出结果,保留小数点后 5 位
// %.5f 中的 .5 表示保留 5 位小数
printf("%.5f", c);
return 0;
}
代码解析小贴士
scanf("%lf", &f)中的%lf: 读取double类型时,scanf必须用%lf(注意是小写字母 L,不是数字 1)。而printf输出double时,用%f就可以了。这是 C 语言输入输出的一个经典”不对称”设计,初学者容易搞混。- 为什么不用
cout? 用cout也可以实现,但格式化输出需要额外引入<iomanip>头文件并使用std::fixed和std::setprecision(5),写起来较长。对于这类简单的格式化输出题,printf更加简洁直接。
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
"luogu-"系列题目可在洛谷题库进行在线评测。
"bcqm-"系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
本文由作者按照 CC BY-NC-SA 4.0 进行授权
