GESP C++ 1 级 · 知识点

基本数据类型

一级要求认识整型、浮点型、字符型和布尔型四类基本类型,并理解整数除法截断、字符与编码对应这些容易出错的地方。

对应知识域:基本数据类型(整型、浮点型、字符型、布尔型)相关真题 4 套

本页为本站原创整理,例题与解析均由本站编写,不取自任何题库原题;考试范围以 CCF 官方公布为准,本平台不是 GESP 官方平台。

考纲要求

  • 认识整型 int 用来存放整数,浮点型 double 用来存放带小数的数,字符型 char 用来存放单个字符,布尔型 bool 只有真和假两种取值。
  • 理解整数与整数相除,结果仍然是整数,小数部分被直接截断而不是四舍五入。
  • 知道字符在计算机内部以编码形式保存,常见字符的 ASCII 码需要认识,例如大写字母 A 是 65,小写字母 a 是 97,数字字符 0 是 48。
  • 理解不同类型参与运算时的类型转换,知道整数与浮点数混合运算会得到浮点结果。

典型题型

  • 给出表达式 7 / 2,判断结果是 3 还是 3.5。
  • 给出含字符与整数的混合表达式,要求写出输出结果。
  • 判断题:字符 'a' 与字符串 "a" 是同一个东西。

常见错误

  • 以为 7 / 2 等于 3.5。两个整数相除结果仍是整数,正确结果是 3;要得到 3.5 必须让至少一个操作数是浮点数。
  • 把字符 'a' 和字符串 "a" 混为一谈。前者是单个字符,用单引号;后者是字符序列,用双引号。
  • 以为 bool 变量输出时一定是 true 或 false。不加特殊设置时,cout 输出的是 1 和 0。
  • 忽略取值范围,把很大的数放进 int 导致溢出,得到负数或错误结果。
  • 把数字字符 '0' 和整数 0 当成同一个值,前者在内存中是编码 48。

深入理解

四种基本类型各管什么

  • int:整数,用来存人数、次数、编号这类不带小数的量。
  • double:双精度浮点数,用来存平均分、半径、面积这类可能带小数的量;float 精度较低,一级一般用 double 就够。
  • char:单个字符,用单引号包裹,例如 'A'。单引号是字符,双引号是字符串,写反是常见错误。
  • bool:只有 true 和 false 两个值,主要承接比较运算的结果。

选类型的原则是先看取值范围和是否需要小数,再看题目要求的精度,不要一律用 int,也不要把所有数都写成 double——整数题用浮点数会出现 5.000000 这种输出格式错误。

整数除法和取模为什么会「算错」

两个整数相除,结果仍然是整数,小数部分直接丢掉而不是四舍五入:7 / 2 得 3,1 / 2 得 0。很多「求平均分」的题因此全错。要得到小数,只需让参与运算的两个数至少有一个是浮点型:(double)sum / n 或 sum * 1.0 / n。

取模 % 求的是余数,只能用于整数:7 % 2 得 1。它的典型用途是判断奇偶(x % 2 == 0 为偶数)和取出末位数字(x % 10)。注意被除数为负数时,余数的符号跟随被除数,-7 % 2 得 -1。

字符其实也是数字

计算机里没有「字符」这种存储形式,char 本质上是一个小整数,存的是该字符在 ASCII 表中的编号。需要记住三个锚点:'0' 是 48,'A' 是 65,'a' 是 97。大写字母和小写字母的编号正好相差 32,所以 'a' - 'A' 等于 32。

这解释了几种常见题型:数字字符转数值要写 c - '0',而不是直接赋值;大小写转换要加减 32;cout << (int)c 输出的是编号而不是字符本身。反过来,cout << 'A' + 1 输出的是 66,因为加法已经把结果提升成 int 了。想要输出 B,必须写 cout << (char)('A' + 1)。

自编例题

求平均分为什么总是整数

读入两个整数成绩,输出它们的平均分。下面这段程序错在哪里?

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    int avg = (a + b) / 2;
    cout << avg << endl;
    return 0;
}

当两个成绩之和是奇数时,(a + b) / 2 会丢掉小数部分。例如 89 和 90 之和是 179,179 / 2 得到 89 而不是 89.5。原因是参与除法的两个操作数都是整数,结果按整数处理。修正方法是把结果声明为 double,并让除法中出现浮点数,例如 double avg = (a + b) / 2.0;,这样能得到带小数的平均值。

相关真题

这块内容在整条路线里的位置:GESP C++ 1 级备考路径。

READY TO START

开始练习

先做一套本级别测评,报告会指出哪些知识点需要重点补;再回到本页对照考纲要求逐条核对,把不确定的条目记下来集中练。

常见问题

7 / 2 的结果为什么不是 3.5?

因为 7 和 2 都是整数,C++ 对两个整数做除法时结果仍然是整数,小数部分直接舍去,所以结果是 3。写成 7 / 2.0 才会得到 3.5。

字符和整数能直接相加吗?

可以参与运算,此时字符按其编码值参与计算,例如 'A' + 1 得到 66。一级需要知道常见字符的 ASCII 码,以便理解这种运算的结果。

为什么 bool 输出是 1 和 0?

在 C++ 中 true 和 false 参与输出时会转换成整数 1 和 0。若需要输出文字形式,需要额外的格式设置;一级只需要知道默认输出是 1 和 0。

本级别其他知识点

官方依据