第一章 答案解析
填空题
-  .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(去个位)。
- 数字的逆序生成方法:通过循环取余构建逆序数。
- 回文数的判断逻辑:逆序数与原数相等。
- 数位统计与重组:利用数组或变量存储各位数字后处理。
