本讲定位:一级最容易被低估的一讲。官方大纲把整型、实数型、字符型、布尔型四类逐条列出,还点名了具体的类型名(
int、long long、float、double、char、bool)——这说明要考到类型名和取值范围的细节。更要命的是,数据类型选错是编程题失分的隐形杀手:算法完全正确、样例也过了,提交上去只得一半分,原因往往就是int存不下。对应官方大纲:一级知识块 7「基本数据类型」——整数型:
int、long long;实数型:float、double;字符型:char;布尔型:bool。前置知识:一级第 02 讲(输入输出)、第 03 讲(变量与常量)。
代码说明:本讲所有代码均已用 g++ 11.5(
-std=c++11,64 位 Linux)编译运行验证,输出结果即为文中标注结果。字节数与取值范围在主流的 64 位 Windows/Linux + g++ 环境下一致,GESP 考场即按此标准。
输入两个整数 $a, b$($1 \le a, b \le 100000$),输出 $a \times b$。
学生几乎都会这么写:
#include<iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a * b << endl;
return 0;
}
输入 100000 100000 时的实际输出:
1410065408
正确答案应该是 $10^{10} = 10000000000$。
样例里给的小数据全对,交上去却只得一部分测试点的分——这就是类型溢出。这一讲就是为了让你永远不再踩这个坑。
变量是个盒子。类型决定了这个盒子有多大、能装什么形状的东西。
int a; // 一个能装整数的中号盒子
double b; // 一个能装小数的盒子
char c; // 一个只能装一个字符的小盒子
盒子越大越费内存,所以不能一律用最大的;盒子太小又装不下。选类型 = 在”够用”和”省内存”之间做选择。
查看盒子有多大,用 sizeof(它是关键字,返回字节数):
#include<iostream>
using namespace std;
int main() {
cout << sizeof(int) << endl;
cout << sizeof(long long) << endl;
cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
cout << sizeof(char) << endl;
cout << sizeof(bool) << endl;
return 0;
}
输出:
4
8
4
8
1
1