考纲要求
- 认识整型 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。
