文章

【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 一级中最基础的几个知识点:

  1. 变量类型的选择: 题目说”输入一个实数”,而且输出要”精确到小数点后5位”。所以我们必须使用 double(双精度浮点数)来存储温度值,而不能用 int(整数)。如果用 int,小数部分会被直接丢掉。
  2. 套公式计算: 题目已经给出了转换公式 $C = 5 \times (F - 32) \div 9$。我们只需要把华氏温度 $F$ 读入后,按照公式计算出摄氏温度 $C$ 即可。
  3. 格式化输出: 题目要求”精确到小数点后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;
}

代码解析小贴士

  1. scanf("%lf", &f) 中的 %lf 读取 double 类型时,scanf 必须用 %lf(注意是小写字母 L,不是数字 1)。而 printf 输出 double 时,用 %f 就可以了。这是 C 语言输入输出的一个经典”不对称”设计,初学者容易搞混。
  2. 为什么不用 coutcout 也可以实现,但格式化输出需要额外引入 <iomanip> 头文件并使用 std::fixedstd::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),考试认证学员交流,互帮互助

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
本文由作者按照 CC BY-NC-SA 4.0 进行授权