C++ 竞赛入门

数据类型

数据类型

本节学会什么

  • 为整数、小数、字符和真假选择合适的类型
  • 区分 intlong longdoublecharbool
  • 在竞赛中先估计数据范围,再决定类型

为什么需要它

计算机不会把所有数字都用同一种方式保存。分数需要小数,人数通常是整数,长度可能大到超出 int 范围。类型选错时,程序即使能运行,答案也可能悄悄出错。

最小可运行示例

#include <iostream>

int main() {
    int students = 42;
    long long population = 1400000000LL;
    double average = 87.5;
    char grade = 'A';
    bool passed = true;

    std::cout << students << '\n';
    std::cout << population << '\n';
    std::cout << average << '\n';
    std::cout << grade << '\n';
    std::cout << passed << '\n';
    return 0;
}

在 GNU C++17 常见竞赛环境中,int 通常能表示约 -2e92e9long long 能表示约 -9e189e18。不要依赖 float 保存需要精确比较的小数,默认优先使用 double

关键过程与易错点

类型 适合表示 常见错误
int 小范围整数、下标、计数 用它保存很大的乘积。
long long 大范围整数、总和、乘积 忘记在很大的常量后加 LL
double 平均数、长度、比例 == 比较计算得到的小数。
char 单个字符,如 'A' 把字符 '1' 当成整数 1
bool 真或假 用它保存多个状态。

表达式的类型也很重要:int a = 3, b = 2; 时,a / b 的结果是 1。想得到 1.5,至少有一个操作数必须是 double,例如 1.0 * a / b

动手检查

分别输出 sizeof(int)sizeof(long long)sizeof(double)。再计算 3 / 23.0 / 2,写下两次输出为什么不同。

立即练习

难度 题目 题解 训练目标
基础 洛谷 P5703:苹果采购 题解 int 保存数量和单价,计算整数结果。
巩固 洛谷 P5706:再分肥宅水 题解 区分整数人数和 double 类型的平均量。
挑战 洛谷 P5708:三角形面积 题解 使用 double 完成带平方根的计算。