学习笔记大纲
一、预习部分:数组基础
(一)核心知识点
- 数组的创建:掌握一维数组的声明方式,如int arr[5];(创建一个包含 5 个整数的数组)。重点在于理解数组长度需为常量,且在声明时确定。
- 数组的初始化:学会为数组赋值,例如int arr[] = {1, 2, 3};,可省略数组长度,编译器根据初始化值自动确定。
- 数组元素的访问:通过索引访问数组元素,索引从 0 开始,如arr[1]表示访问数组arr的第二个元素。
(二)重点考点
- 数组声明时长度的正确设定。
- 数组初始化的不同方式及适用场景。
- 数组元素索引的正确使用。
(三)难点易错点
- 数组索引越界问题,如访问arr[5](数组长度为 5 时,最大索引为 4)。
- 错误地将变量作为数组长度进行声明,例如int n = 5; int arr[n];(C++ 中这种写法在部分编译器不支持)。
(四)预习练习题
1. 填空题
(1) 声明一个包含 10 个浮点数的数组,正确写法是______。
(2) 初始化一个数组arr,包含元素 3、5、7,写法为______。
(3) 若int arr[] = {1, 2, 3, 4, 5},访问数组中第 4 个元素的表达式是______。
2. 选择题
(1) 以下数组声明正确的是( )
A. int arr;
B. int arr [ ];
C. int n = 10; int arr [n];
D. int arr [10];
(2) 若int arr[] = {1, 2, 3},则数组arr的长度为( )
A. 1
B. 2
C. 3
D. 不确定
(3) 访问数组int arr[5]的最后一个元素,正确的是( )
A. arr [5]
B. arr [4]
C. arr [6]
D. arr [-1]
3. 判断题
(1) 数组索引可以从 1 开始。( )
(2) 声明数组时,长度必须在编译时确定。( )
(3) 初始化数组时,必须指定数组长度。( )
4. 编程题
(1) 声明并初始化一个包含 5 个整数的数组,然后输出数组中的所有元素。
(2) 创建一个数组,存储 5 个学生的成绩,计算并输出这些成绩的平均值。
(3) 编写程序,交换数组中第一个元素和最后一个元素的值,并输出交换后的数组。
(4) 声明一个数组,接收用户输入的 10 个整数,找出其中的最大值并输出。
(5) 初始化一个数组,包含 10 个随机整数,统计数组中偶数的个数并输出。
(6) 编写程序,判断数组中是否存在某个特定的整数(用户输入),若存在则输出其索引,否则输出 - 1。
(7) 创建一个数组,存储一周 7 天的温度,找出温度最高的一天并输出是第几天。
(8) 声明一个数组,将数组中的元素逆序存储(例如原数组为 {1, 2, 3},逆序后为 {3, 2, 1}),并输出逆序后的数组。
(9) 初始化一个数组,包含 8 个字符,判断这些字符组成的字符串是否为回文串(正读和反读都一样),并输出判断结果。
(10) 编写程序,创建一个数组,接收用户输入的 8 个整数,将数组中所有奇数移到数组的前面,偶数移到数组的后面,并输出调整后的数组。
二、复习部分:循环与判断语句
(一)核心知识点
- 累加器公式:
- 初始化累加器变量,如int sum = 0;。
- 在循环中执行累加操作,如sum = sum + i;(i为循环变量)。
- 循环结束后,sum即为累加结果。
- 循环语句:
- for 循环:掌握其语法结构for (初始化表达式; 条件表达式; 更新表达式) { 循环体; },常用于已知循环次数的场景。重点是理解三个表达式的作用及执行顺序。
- while 循环:语法为while (条件表达式) { 循环体; },条件为真时执行循环体。
- 判断语句:
- if - else if - else:用于多条件判断,如判断奇数和偶数。
- switch - case:适用于多个固定值的判断,如根据输入数字判断是否上编程课。
(二)重点考点
- 累加器的正确使用及在循环中的位置。
- for 循环和 while 循环的条件判断与循环体执行逻辑。
- if - else if - else 和 switch - case 语句的适用场景及语法规则。
(三)难点易错点
- 循环条件设置不当导致死循环或循环次数错误。
- 在 switch - case 语句中忘记使用break,导致穿透执行。
- 累加器初始化位置错误,或在错误的循环中使用累加器。
(四)复习练习题
1. 填空题
(1) for 循环中,若要计算 1 到 100 的和,初始化表达式为int i = 1;,条件表达式为______,更新表达式为______。
(2) 在 if 语句中,判断一个数num为偶数的条件表达式是______。
(3) switch 语句中,每个 case 分支后通常需要添加______语句,以防止穿透执行。
2. 选择题
(1) 以下 for 循环的循环次数是( )
for (int i = 0; i < 10; i += 2) {
// 循环体
}
A. 5
B. 10
C. 20
D. 无限次
(2) 若要判断一个数是否在 1 到 100 之间,以下 if 语句正确的是( )
A. if (num > 1 && num < 100) {... }
B. if (num >= 1 || num <= 100) {... }
C. if (num >= 1 && num <= 100) {... }
D. if (num > 1 || num < 100) {... }
(3) 在 switch - case 语句中,若没有匹配的 case,执行( )
A. 第一个 case 分支
B. 最后一个 case 分支
C. default 分支(如果存在)
D. 不执行任何分支
3. 判断题
(1) while 循环中,只要条件表达式为真,循环体就会一直执行。( )
(2) 在 for 循环中,初始化表达式只能初始化一个变量。( )
(3) if - else if - else 语句中,最多只能有一个 else if 分支。( )
4. 编程题
(1) 使用 for 循环计算 1 到 200 中所有能被 3 整除的数的和。
(2) 输入一个整数,使用 while 循环输出 1 到该整数的所有偶数。
(3) 编写程序,使用 if - else if - else 语句判断一个年份是否为闰年(闰年的条件:能被 4 整除但不能被 100 整除,或者能被 400 整除)。
(4) 使用 switch - case 语句,根据用户输入的 1 - 7 的数字,输出对应的星期几(如输入 1,输出 “星期一”)。
(5) 计算 1 到 1000 中,能被 6 和 7 整除的数的和,并输出这些数字(用空格分开),最后输出数字的个数。
(6) 输入一个整数,判断它是正数、负数还是零,使用 if - else 语句实现,并输出判断结果。
(7) 使用 for 循环输出 1 到 100 之间所有能被 5 整除但不能被 3 整除的数。
(8) 编写程序,接收用户输入的 5 个整数,使用 switch - case 语句对这 5 个数进行排序(简单选择排序,通过多次比较和交换实现),并输出排序后的结果。
(9) 利用 while 循环,计算用户输入的一组数字(以 - 1 作为结束标志)的平均值,并输出结果。
(10) 编写程序,判断一个字符串(用户输入)中是否包含特定字符(用户输入),使用 for 循环遍历字符串,若包含则输出该字符在字符串中的位置,否则输出 “未找到”。
1. 填空题
(1) float arr[10];
解析:声明数组需指定类型(float
)、数组名(arr
)和元素个数(10
),方括号内为常量表达式。
(2) int arr[] = {3, 5, 7};
解析:初始化时若提供全部元素值,可省略数组大小,编译器自动推断长度为 3,元素类型为整型(int
)。
(3) arr[3]
解析:C++ 数组下标从 0 开始,第 4 个元素对应下标 3,值为 4。
2. 选择题
(1) D. int arr [10];
解析:
- A 错误:未指定数组大小。
- B 错误:声明数组时必须指定大小(初始化时可省略)。
- C 错误:C++ 不支持用变量声明数组大小(需为常量表达式)。
(2) C. 3
解析:初始化列表中有 3 个元素,数组长度为 3。
(3) B. arr [4]
解析:数组int arr[5]
的下标范围为 0~4,最后一个元素为arr[4]
。
3. 判断题
(1) ×
解析:C++ 数组索引必须从 0 开始,不能从 1 开始。
(2) √
解析:静态数组的长度需在编译时确定(动态数组需用new
或vector
)。
(3) ×
解析:初始化时若提供全部元素值,可省略数组长度(如int arr[] = {1,2,3};
)。
4. 编程题
(1) 声明、初始化并输出数组
cpp
运行
#include <iostream>
using namespace std;
int main() {int arr[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {cout << arr[i] << " ";}return 0;
}
解析:用for
循环遍历数组并输出元素。
(2) 计算成绩平均值
cpp
运行
#include <iostream>
using namespace std;
int main() {int scores[5] = {85, 90, 75, 80, 95};int sum = 0;for (int i = 0; i < 5; i++) {sum += scores[i];}double avg = (double)sum / 5;cout << "平均值:" << avg << endl;return 0;
}
解析:累加元素后除以 5,用double
避免整数除法截断。
(3) 交换首尾元素
cpp
运行
#include <iostream>
using namespace std;
int main() {int arr[5] = {10, 20, 30, 40, 50};int temp = arr[0];arr[0] = arr[4];arr[4] = temp;for (int i = 0; i < 5; i++) {cout << arr[i] << " ";}return 0;
}
解析:用临时变量temp
暂存首元素,避免直接赋值导致数据丢失。
(4) 找最大值
cpp
运行
#include <iostream>
using namespace std;
int main() {int arr[10];for (int i = 0; i < 10; i++) {cin >> arr[i];}int max_val = arr[0];for (int i = 1; i < 10; i++) {if (arr[i] > max_val) {max_val = arr[i];}}cout << "最大值:" << max_val << endl;return 0;
}
解析:先假设第一个元素为最大值,再遍历更新max_val
。
(5) 统计偶数个数
cpp
运行
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {srand(time(0)); // 初始化随机数种子int arr[10];int even_count = 0;for (int i = 0; i < 10; i++) {arr[i] = rand() % 100; // 生成0~99的随机数if (arr[i] % 2 == 0) {even_count++;}}cout << "偶数个数:" << even_count << endl;return 0;
}
解析:用rand()%100
生成随机数,arr[i]%2==0
判断偶数。
(6) 查找特定整数
cpp
运行
#include <iostream>
using namespace std;
int main() {int arr[7] = {12, 34, 56, 78, 90, 11, 22};int target;cin >> target;int index = -1;for (int i = 0; i < 7; i++) {if (arr[i] == target) {index = i;break;}}cout << index << endl;return 0;
}
解析:遍历数组,找到目标值后记录下标并跳出循环。
(7) 找温度最高的一天
cpp
运行
#include <iostream>
using namespace std;
int main() {int temp[7] = {25, 28, 26, 30, 27, 29, 28};int max_temp = temp[0];int max_day = 1;for (int i = 1; i < 7; i++) {if (temp[i] > max_temp) {max_temp = temp[i];max_day = i + 1; // 天数从1开始}}cout << "第" << max_day << "天温度最高(" << max_temp << "℃)" << endl;return 0;
}
解析:遍历数组时记录最大值及其下标(转换为天数需 + 1)。
(8) 数组逆序
cpp
运行
#include <iostream>
using namespace std;
int main() {int arr[3] = {1, 2, 3};for (int i = 0; i < 1; i++) { // 循环次数为长度/2int temp = arr[i];arr[i] = arr[2 - i];arr[2 - i] = temp;}for (int i = 0; i < 3; i++) {cout << arr[i] << " ";}return 0;
}
解析:交换首尾对称元素,循环次数为length/2
(3 个元素只需交换 1 次)。
(9) 判断回文串
cpp
运行
#include <iostream>
using namespace std;
int main() {char str[8] = {'a', 'b', 'c', 'd', 'd', 'c', 'b', 'a'};bool is_palindrome = true;for (int i = 0; i < 4; i++) {if (str[i] != str[7 - i]) {is_palindrome = false;break;}}cout << (is_palindrome ? "是回文串" : "不是回文串") << endl;return 0;
}
解析:比较对称位置的字符(如第 i 个与第 7-i 个),全部相等则为回文。
(10) 奇偶元素分区
cpp
运行
#include <iostream>
using namespace std;
int main() {int arr[8];for (int i = 0; i < 8; i++) {cin >> arr[i];}int temp[8], odd_idx = 0, even_idx = 0;// 先存奇数for (int i = 0; i < 8; i++) {if (arr[i] % 2 != 0) {temp[odd_idx++] = arr[i];}}// 再存偶数for (int i = 0; i < 8; i++) {if (arr[i] % 2 == 0) {temp[odd_idx++] = arr[i];}}// 复制回原数组并输出for (int i = 0; i < 8; i++) {arr[i] = temp[i];cout << arr[i] << " ";}return 0;
}
解析:用临时数组先存奇数,再存偶数,最后复制回原数组。