第一章 答案解析
填空题
-
.cpp 知识点:C++ 源文件的命名规范
-
main () 知识点:C++ 程序的入口函数
-
// ,/* */ 知识点:C++ 注释的两种形式
-
int a; 知识点:变量声明的语法
-
cout 知识点:输出语句的关键字
判断题
-
√ 知识点:C++ 是大小写敏感的语言
-
× 知识点:C++ 程序必须有一个 main 函数
-
× 知识点:注释不会被编译,不影响程序运行速度
-
√ 知识点:变量使用前必须声明
-
√ 知识点:输出语句中可以使用转义字符如 \n
选择题
-
C 知识点:标识符的命名规则(以字母或下划线开头,由字母、数字、下划线组成)
-
A 知识点:cout 输出语句的正确用法
-
A 知识点:变量声明可以放在作用域内的任何位置
-
D 知识点:abc 不是 C++ 关键字
-
C 知识点:C++ 语句以分号结束
编程题
1.
\#include \<iostream> using namespace std; int main() {   cout << "Hello, C++!" << endl;   return 0; }
知识点:基本的输入输出语句和程序结构
1.
\#include \<iostream> using namespace std; int main() {   int a = 10, b = 20;   cout << a + b << endl;   return 0; }
知识点:变量声明、赋值和算术运算
1.
\#include \<iostream> using namespace std; int main() {   char c;   cin >> c;   cout << "字符:" << c << ",ASCII码值:" << int(c) << endl;   return 0; }
知识点:字符型数据的输入输出及 ASCII 码值的获取
1.
\#include \<iostream> using namespace std; int main() {   int sum = 0;   for (int i = 1; i <= 100; i++) {   sum += i;   }   cout << sum << endl;   return 0; }
知识点:for 循环的使用和累加运算
1.
\#include \<iostream> using namespace std; int main() {   double x, y;   cin >> x >> y;   double avg = (x + y) / 2;   cout << avg << endl;   return 0; }
知识点:浮点型数据的输入输出和平均值计算
第一章 知识点和重点考点
知识点
-
C++ 程序的基本结构,包括头文件、命名空间、main 函数
-
变量的声明和初始化,数据类型(整型、字符型等)
-
输入输出语句(cout 和 cin)的使用
-
注释的两种形式
-
标识符的命名规则
重点考点
-
main 函数的作用和程序执行流程
-
变量声明的语法和作用域
-
输入输出语句的正确格式
-
标识符的合法性判断
第二章 答案解析
一、填空题
- 布尔型
知识点:C++ 基本数据类型包括int
(整型)、float
/double
(浮点型)、char
(字符型)、bool
(布尔型)。 - short
知识点:短整型关键字为short
,通常占用 2 字节内存。 - ASCII 码值
知识点:字符型数据在内存中存储的是对应字符的 ASCII 编码(整数)。 - 使变量值加 1
知识点:++
是自增运算符,分前置(++a
)和后置(a++
),均使变量值加 1。 - bool
知识点:关系运算符(如>
、==
)的结果为布尔类型(true
或false
)。
二、判断题
- √
知识点:C++ 支持整型和浮点型混合运算,低精度类型会自动转换为高精度类型。 - ×
知识点:取模运算符%
的操作数必须为整型,浮点型会导致编译错误。 - √
知识点:算术运算符(如+
、*
)优先级高于赋值运算符(如=
、+=
)。 - √
知识点:逻辑运算符优先级:&&
(与)高于||
(或),如a && b || c
等价于(a && b) || c
。 - √
知识点:++
只能作用于变量(如a++
),不能用于常量或表达式(如5++
、(a+b)++
)。
三、选择题
- B. short int
知识点:常见数据类型内存占用(32 位系统):short
(2 字节)、int
(4 字节)、long
(4 字节)、float
(4 字节),最小为short int
。 - A. +=
知识点:+=
是复合赋值运算符(等价于a = a + b
),==
(等于)、!=
(不等于)是关系运算符,>>
是输入流运算符或右移运算符。 - B. 2
知识点:整数除法会舍去小数部分,5 / 2
结果为 2(整型运算),若需浮点结果需强制转换(如5.0 / 2
)。 - D. 以上说法都正确
知识点:- A:自动转换由编译器完成(如
int
转double
); - B:强制转换可能丢失精度(如
int a = (int)3.9;
结果为 3); - C:字符型可自动转为整型(如
char c = 'A'; int i = c;
,i
的值为 65)。
- A:自动转换由编译器完成(如
- A. a = a + b
知识点:复合赋值运算符a += b
等价于a = a + b
,其他选项不符合运算逻辑。
四、编程题
-
判断奇数偶数
cpp
#include <iostream> using namespace std; int main() { int n; cin >> n; if (n % 2 == 0) cout << n << " 是偶数" << endl; else cout << n << " 是奇数" << endl; return 0; }
知识点:通过
n % 2
判断余数,0 为偶数,1 为奇数。 -
输出三个整数的最大值
cpp
#include <iostream> using namespace std; int main() { int a, b, c; cin >> a >> b >> c; int max_val = a; if (b > max_val) max_val = b; if (c > max_val) max_val = c; cout << "最大值:" << max_val << endl; return 0; }
知识点:逐次比较,先假设第一个数最大,再与后续数比较更新最大值。
-
计算实数的平方和立方
cpp
#include <iostream> using namespace std; int main() { double x; cin >> x; double square = x * x; double cube = x * x * x; cout << x << " 的平方:" << square << ",立方:" << cube << endl; return 0; }
知识点:直接进行算术运算,注意使用浮点型变量存储结果。
-
判断是否为大写字母
cpp
#include <iostream> using namespace std; int main() { char c; cin >> c; if (c >= 'A' && c <= 'Z') cout << c << " 是大写字母" << endl; else cout << c << " 不是大写字母" << endl; return 0; }
知识点:大写字母的 ASCII 范围是
'A'
(65)到'Z'
(90),通过字符比较判断。 -
交换两个整数的值
cpp
#include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; cout << "交换前:a=" << a << ", b=" << b << endl; int temp = a; // 使用临时变量交换 a = b; b = temp; cout << "交换后:a=" << a << ", b=" << b << endl; return 0; }
知识点:借助临时变量实现值交换,避免直接赋值导致数据丢失。
第二章 知识点和重点考点
知识点
- 基本数据类型:整型(
int
、short
、long
)、浮点型(float
、double
)、字符型(char
)、布尔型(bool
)的定义及内存占用。 - 运算符分类:
- 算术运算符(
+
、-
、*
、/
、%
、++
、--
); - 关系运算符(
>
、<
、==
、!=
); - 逻辑运算符(
&&
、||
、!
); - 赋值运算符(
=
、+=
、-=
等复合赋值)。
- 算术运算符(
- 数据类型转换:自动转换(隐式)和强制转换(显式)的规则,如字符型与整型的转换、整型与浮点型的混合运算。
重点考点
- 运算符优先级与结合性:如
++
的优先级高于算术运算符,赋值运算符为右结合性。 - 取模运算的限制:操作数必须为整型,负数取模结果符号与被除数一致(如
-5 % 3
结果为-2
)。 - 自增 / 自减运算符的副作用:前置运算(
++a
)先修改值再使用,后置运算(a++
)先使用再修改值。 - 布尔表达式的短路特性:
a && b
中若a
为false
,则b
不再计算;a || b
中若a
为true
,则b
不再计算。
第五章 答案解析
填空题
-
一维数组 知识点:二维数组的逻辑结构
-
int a [3][4]; 知识点:二维数组的声明语法
-
行下标,列下标 知识点:二维数组元素的下标含义
-
行,列 知识点:二维数组的初始化方式
-
行优先 知识点:二维数组在内存中的存储顺序
判断题
-
√ 知识点:二维数组的行数和列数必须是常量
-
√ 知识点:通过两个下标访问二维数组元素
-
√ 知识点:未初始化的元素默认初始化为 0(整型数组)
-
√ 知识点:二维数组名是指向第一行的指针
-
√ 知识点:二维数组作为函数参数时需指定列数
选择题
-
A 知识点:二维数组初始化时可以省略行数,但不能省略列数
-
D 知识点:二维数组元素个数 = 行数 × 列数
-
B 知识点:二维数组元素的访问方式
-
A 知识点:二维数组的每一行是一个一维数组
-
B 知识点:遍历二维数组需要嵌套循环
编程题
1.
\#include \<iostream> using namespace std; int main() {   int a\[3]\[3];   for (int i = 0; i < 3; i++) {   for (int j = 0; j < 3; j++) {   cin >> a\[i]\[j];   }   }   for (int i = 0; i < 3; i++) {   for (int j = 0; j < 3; j++) {   cout << a\[i]\[j] << " ";   }   cout << endl;   }   return 0; }
知识点:二维数组的输入输出和嵌套循环的使用
1.
\#include \<iostream> using namespace std; int main() {   int a\[3]\[4], sum = 0;   for (int i = 0; i < 3; i++) {   for (int j = 0; j < 4; j++) {   cin >> a\[i]\[j];   sum += a\[i]\[j];   }   }   cout << sum << endl;   return 0; }
知识点:二维数组元素的累加
1.
\#include \<iostream> using namespace std; int main() {   int a\[3]\[3], sum = 0;   for (int i = 0; i < 3; i++) {   sum += a\[i]\[i];   }   cout << sum << endl;   return 0; }
知识点:二维数组主对角线元素的访问
1.
\#include \<iostream> using namespace std; int main() {   int a\[2]\[3] = {{1, 2, 3}, {4, 5, 6}};   int b\[3]\[2];   for (int i = 0; i < 2; i++) {   for (int j = 0; j < 3; j++) {   b\[j]\[i] = a\[i]\[j];   }   }   for (int i = 0; i < 3; i++) {   for (int j = 0; j < 2; j++) {   cout << b\[i]\[j] << " ";   }   cout << endl;   }   return 0; }
知识点:二维数组的转置操作
1.
\#include \<iostream> using namespace std; int main() {   int a\[3]\[3], b\[3]\[3], c\[3]\[3];   for (int i = 0; i < 3; i++) {   for (int j = 0; j < 3; j++) {   cin >> a\[i]\[j];   }   }   for (int i = 0; i < 3; i++) {   for (int j = 0; j < 3; j++) {   cin >> b\[i]\[j];   c\[i]\[j] = a\[i]\[j] + b\[i]\[j];   }   }   for (int i = 0; i < 3; i++) {   for (int j = 0; j < 3; j++) {   cout << c\[i]\[j] << " ";   }   cout << endl;   }   return 0; }
知识点:二维数组的加法运算和嵌套循环的应用
第五章 知识点和重点考点
知识点
-
二维数组的声明和初始化方式(按行、按列初始化)
-
二维数组元素的访问方式(行下标和列下标)
-
二维数组在内存中的存储顺序(行优先)
-
嵌套循环在二维数组操作中的应用(遍历、求和、转置等)
重点考点
-
二维数组的声明语法,特别是行数可省略但列数必须明确
-
二维数组元素的正确访问,避免下标越界
-
嵌套循环的逻辑和执行顺序
-
二维数组常见操作(求和、转置、矩阵运算等)的算法实现
第六章 穷举法 答案解析
填空题
- 解(或 “情况”)
知识点:穷举法的核心是枚举所有可能解。 - 枚举范围、验证条件
知识点:明确范围和条件是穷举法的基础。 - 循环
知识点:循环结构(for/while)是实现穷举的主要方式。 - m^n
知识点:多变量穷举的总次数计算。 - 缩小范围、提前终止
知识点:优化穷举法的常用策略。
判断题
- √
知识点:穷举法适用于解空间有限的问题。 - ×
知识点:穷举法可通过优化减少枚举次数。 - √
知识点:鸡兔同笼是典型的穷举法应用场景。 - √
知识点:枚举顺序不影响结果,但可能影响效率。 - √
知识点:穷举法常用于简单问题的暴力求解。
选择题
- C
知识点:斐波那契数列第 100 项需递推,不适合穷举。 - D
知识点:递归替代循环不影响枚举次数,非优化策略。 - C
知识点:偶数的判断条件是能被 2 整除。 - B
知识点:时间复杂度由枚举次数决定。 - D
知识点:穷举法逻辑简单,易于实现。
编程题
cpp
运行
#include <iostream>
using namespace std;
int main() { for (int i = 100; i <= 999; i++) { int a = i / 100, b = i / 10 % 10, c = i % 10; if (a*a*a + b*b*b + c*c*c == i) { cout << i << " "; } } return 0;
}
知识点:枚举 100-999,拆分各位后验证条件。
cpp
运行
#include <iostream>
using namespace std;
int main() { for (int x = 0; x <= 20; x++) { for (int y = 0; y <= 33; y++) { int z = 100 - x - y; if (5*x + 3*y + z/3 == 100 && z % 3 == 0) { cout << "鸡翁:" << x << " 鸡母:" << y << " 鸡雏:" << z << endl; } } } return 0;
}
知识点:双重循环枚举鸡翁和鸡母数量,验证总钱数和总数量。
cpp
运行
#include <iostream>
using namespace std;
int main() { int n, is_prime = 1; cin >> n; if (n <= 1) is_prime = 0; else { for (int i = 2; i*i <= n; i++) { // 优化:只需枚举到√n if (n % i == 0) { is_prime = 0; break; } } } cout << (is_prime ? "是素数" : "不是素数") << endl; return 0;
}
知识点:枚举 2 到√n 的因数,判断是否为素数。
cpp
运行
#include <iostream>
using namespace std;
int main() { int count = 0; for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) { for (int k = 1; k <= 3; k++) { if (i != j && j != k && i != k) { cout << i << j << k << " "; count++; } } } } cout << "\n总共有" << count << "个组合" << endl; return 0;
}
知识点:三重循环枚举所有排列,去重后输出。
cpp
运行
#include <iostream>
using namespace std;
int main() { for (int i = 10; i <= 99; i++) { int a = i / 10, b = i % 10; if (a + b == 8 && a - b == 2) { cout << "密码可能是:" << i << endl; } } return 0;
}
知识点:枚举所有两位数,验证十位和个位的和与差。
第六章 知识点和重点考点
知识点
- 穷举法的定义与适用场景(解空间有限、可枚举)。
- 枚举范围的确定(如百钱买百鸡中鸡翁数量≤20)。
- 循环结构的嵌套使用(双重循环、三重循环)。
- 穷举法的优化技巧(缩小范围、提前终止、数学推导减少变量)。
重点考点
- 设计合理的枚举范围,避免无效计算。
- 多重循环的逻辑嵌套与去重处理。
- 素数判断、组合生成等经典穷举问题的实现。
第七章 数位拆分 答案解析
填空题
- 数位(或 “位”)
知识点:数位拆分针对个位、十位、百位等位置。 - n % 10、n / 10 % 10
知识点:取余得低位,整除后取余得高位。 - 位数
知识点:确定位数可通过循环除以 10 统计。 - %、/
知识点:取余和整除是数位拆分的核心运算。 - 绝对值
知识点:负数需先转为正数再拆分。
判断题
- ×
知识点:可先处理符号,再拆分绝对值部分。 - √
知识点:1234 拆分后为 1、2、3、4。 - ×
知识点:n % 10 从低位开始提取,如 1234%10=4(个位)。 - √
知识点:回文数判断需比较对称数位是否相等。 - √
知识点:如拆分 123 为 1、2、3,可重组为 321。
选择题
- A
知识点:n/10=56,56%10=6(十位数字)。 - B
知识点:n/10 去掉最后一位,如 567/10=56。 - C
知识点:求和无需排序,直接累加各位数字。 - C
知识点:回文数的定义是左右对称。 - A
知识点:4321 拆分后逆序为 1、2、3、4,组成 1234。
编程题
cpp
运行
#include <iostream>
using namespace std;
int main() { int n, sum = 0; cin >> n; while (n > 0) { sum += n % 10; n = n / 10; } cout << "各位数字之和:" << sum << endl; return 0;
}
知识点:循环取余累加,直到 n 为 0。
cpp
运行
#include <iostream>
using namespace std;
int main() { int n, temp, reverse = 0; cin >> n; temp = n; while (temp > 0) { reverse = reverse * 10 + temp % 10; temp = temp / 10; } cout << (n == reverse ? "是回文数" : "不是回文数") << endl; return 0;
}
知识点:生成逆序数后与原数比较,判断是否回文。
cpp
运行
#include <iostream>
using namespace std;
int main() { int n, reverse = 0; cin >> n; while (n > 0) { reverse = reverse * 10 + n % 10; n = n / 10; } cout << "逆序数:" << reverse << endl; return 0;
}
知识点:通过取余和乘 10 操作生成逆序数。
cpp
运行
#include <iostream>
using namespace std;
int main() { int n, d, count = 0; cin >> n >> d; while (n > 0) { if (n % 10 == d) count++; n = n / 10; } cout << d << "出现的次数:" << count << endl; return 0;
}
知识点:遍历各位数字,统计目标数字出现次数。
cpp
运行
#include <iostream>
using namespace std;
int main() { int n, a, b, c; cin >> n; a = n / 100; b = n / 10 % 10; c = n % 10; int max1 = max(a, max(b, c)); int min1 = min(a, min(b, c)); int mid = a + b + c - max1 - min1; cout << "最大重组数:" << max1 * 100 + mid * 10 + min1 << endl; return 0;
}
知识点:拆分后排序,重新组合成最大数(降序排列)。
第七章 知识点和重点考点
知识点
- 数位拆分的核心运算:
n % 10
(取个位)、n / 10
(去个位)。 - 数字的逆序生成方法:通过循环取余构建逆序数。
- 回文数的判断逻辑:逆序数与原数相等。
- 数位统计与重组:利用数组或变量存储各位数字后处理。