C++小学组
2026-09-12 21:55:59
发布于:广东
核心考点汇总
- 数据类型与运算
1)整数除法与异常:整数相除时,若除数为0,会导致程序运行时错误(崩溃/报错),而非输出0。
2)数据类型溢出:两个 int 变量相乘,结果仍保存在 int 范围中,可能会发生溢出(结果超出 int 最大表示范围),需要转 long long。
3)逻辑运算:&&(逻辑与)需两边都为真,结果才为 true;非零整数在逻辑表达式中默认代表 true。
4)位运算:了解左移 << 运算,如 1 << 0 的值为 1。
💡 复习建议:掌握基础数据类型存储范围,区分“运算逻辑”与“底层存储”。 - 字符串与数组
1)C风格字符串:strlen 统计字符串长度时不包含结束符 \0。
2)字符串函数与类型:strcpy 只能用于 C 风格字符数组(char[]),不能用于 C++ 的 string 类型。
3)二维数组存储方式:C++ 中二维数组是按行优先连续存储的,而非按列优先。
💡 复习建议:区分 C 风格字符串(char数组)与 C++ string 类,了解数组在内存中的存储原理。 - 控制结构与指针
1)switch 语句:case 后面只能跟常量,不能是变量。
2)指针运算:两个指针指向同一数组时,p - q 表示两个指针之间相差的元素个数。
💡 复习建议:理解指针的本质(地址的运算),注意 switch 的语法要求。 - 编程题专项
1)区间判断(动物园参观):考察 if-else 多分支结构,注意左闭右开区间逻辑 8 <= t < 10。
2)二维数组与图形输出(棋盘格子):考察二维数组的行、列、对角线(左上到右下、左下到右上)的坐标规律和循环遍历。
3)质因数分解(找较大质数):考察基本数论、循环枚举、判断质数。注意 n 的范围可达 2×10^9,需要优化循环(枚举到 sqrt(n))。
💡 复习建议:加强循环嵌套和逻辑条件的训练,掌握基础数学题(质数、因数)的代码实现。
C++小学组练习答案:
F T F T F F F T F T
- 动物园参观
#include <iostream>
using namespace std;
int main() {
int t; // t 表示参观时间,单位可以理解为“小时”
cin >> t; // 输入一个时间 t
// 如果 t 在 [8, 10) 之间,也就是 8、9 点,看熊猫
if (t >= 8 && t < 10) {
cout << "熊猫" << endl;
}
// 否则如果 t 在 [10, 12) 之间,也就是 10、11 点,看猴子
else if (t >= 10 && t < 12) {
cout << "猴子" << endl;
}
// 否则如果 t 在 [12, 15) 之间,也就是 12、13、14 点,看大象
else if (t >= 12 && t < 15) {
cout << "大象" << endl;
}
// 否则如果 t 在 [15, 18) 之间,也就是 15、16、17 点,看老虎
else if (t >= 15 && t < 18) {
cout << "老虎" << endl;
}
// 其他时间都不开放,动物园已关闭
else {
cout << "动物园已关闭" << endl;
}
return 0; // 程序正常结束
}
- 棋盘同行、同列、对角线
#include <iostream>
using namespace std;
int main() {
int n, i, j;
// n 表示棋盘大小,棋盘行列编号都是 1 到 n
// i 表示指定格子的行号
// j 表示指定格子的列号
cin >> n >> i >> j;
// ================= 同一行 =================
// 固定行号为 i,列号 y 从 1 变到 n
for (int y = 1; y <= n; y++) {
// 第一个输出前不加空格,后面的输出前加空格
if (y > 1) cout << ' ';
// 输出同一行上的格子坐标:(i, y)
cout << '(' << i << ',' << y << ')';
}
cout << endl; // 同一行输出结束后换行
// ================= 同一列 =================
// 固定列号为 j,行号 x 从 1 变到 n
for (int x = 1; x <= n; x++) {
// 第一个输出前不加空格,后面的输出前加空格
if (x > 1) cout << ' ';
// 输出同一列上的格子坐标:(x, j)
cout << '(' << x << ',' << j << ')';
}
cout << endl; // 同一列输出结束后换行
// ============ 左上到右下对角线 ============
// 从 (i, j) 开始,向左上方走,找到这条对角线的最左上角起点
int sx = i, sy = j;
while (sx > 1 && sy > 1) {
sx--; // 行号减 1
sy--; // 列号减 1
}
bool first = true; // first 用来控制空格:第一个坐标前不加空格
// 从左上角起点开始,向右下方走,行、列同时加 1
for (int x = sx, y = sy; x <= n && y <= n; x++, y++) {
if (!first) cout << ' '; // 不是第一个坐标,就先输出空格
cout << '(' << x << ',' << y << ')';
first = false; // 已经输出过第一个坐标了
}
cout << endl; // 左上到右下对角线输出结束后换行
// ============ 左下到右上对角线 ============
// 重新从 (i, j) 开始,向左下方走,找到这条对角线的最左下角起点
sx = i;
sy = j;
while (sx < n && sy > 1) {
sx++; // 行号加 1,向下走
sy--; // 列号减 1,向左走
}
first = true; // 重新设置为 true,控制新一行的空格
// 从左下角起点开始,向右上方走,行号减 1,列号加 1
for (int x = sx, y = sy; x >= 1 && y <= n; x--, y++) {
if (!first) cout << ' '; // 不是第一个坐标,就先输出空格
cout << '(' << x << ',' << y << ')';
first = false; // 已经输出过第一个坐标了
}
cout << endl; // 左下到右上对角线输出结束后换行
return 0; // 程序正常结束
}
- 求较大的质数
#include <iostream>
#include <algorithm> // 使用 max 函数需要包含这个头文件
using namespace std;
int main() {
long long n;
// n 用 long long 存储,因为数字可能比较大
cin >> n; // 输入 n
// 从 2 开始找 n 的因子
// 只需要找到 i * i <= n,也就是 i <= sqrt(n) 即可
for (long long i = 2; i * i <= n; i++) {
// 如果 i 能整除 n,说明 i 是 n 的一个因子
if (n % i == 0) {
long long j = n / i; // 另一个因子就是 n / i
// 输出两个因子中较大的那个
// 如果题目保证 n 是两个质数的乘积,
// 那么较大的因子就是较大的质数
cout << max(i, j) << endl;
return 0; // 已经找到并输出,程序直接结束
}
}
// 特别强调一点:
// 如果循环结束还没有找到因子,说明 n 可能是质数
// 这段原代码在这种情况下不会输出任何内容
// 如果题目需要处理 n 本身是质数的情况,需要额外补充输出
return 0;
}
这里空空如也















有帮助,赞一个