🏆 C3-10 阶段测试
本节课我们将综合复习C3阶段学过的所有知识,通过阶段测试检验学习成果!
📋 本节课内容
- 📦 数组基础回顾
- 🔄 循环与枚举法回顾
- 🔐 凯撒密码回顾
- 📦 自定义函数回顾
- 🔀 排序回顾
- ✏️ 4道选择题 + 3道编程题
💡 准备好你的大脑和键盘,我们开始吧!
📦 回顾一:数组基础
数组声明与下标
int a[100]; // 创建100个int空间
// 下标从0开始!a[0]是第一个,a[99]是最后一个
// 最大下标 = 长度 - 1 = 99
字符数组 vs 整数数组
char s[20];
cin >> s; // ✅ 字符数组可以整体输入!
int a[100];
// cin >> a; // ❌ int数组不能这样!必须逐个cin >> a[i];
⚠️ 易错:int a[100]的最大下标是99,不是100!越界访问会导致程序崩溃。
🔄 回顾二:循环与枚举
for循环三要素
for(初始化; 条件; 更新) {
// 循环体
}
// 输出1到100:
for(int i = 1; i <= 100; i++) { // ★ <= 包含100
cout << i << endl;
}
枚举法判断倍数/因数
// 判断i是m的倍数:
if(i % m == 0) { ... } // ★ == 是判断,不是=
// 公因数:两个都要整除
if(a % i == 0 && b % i == 0) { ... }
💡 打擂台法求最大最小值:先设第一个为擂主,后面逐个挑战,赢了换擂主。
🔐 回顾三:凯撒密码
字母加密(26个字母)
// 小写字母向后移k位:
c = (c - 'a' + k) % 26 + 'a';
// 大写字母:
c = (c - 'A' + k) % 26 + 'A';
数字加密(10个数字)
// ★ 数字只有0~9共10个!用%10不是%26!
c = (c - '0' + k) % 10 + '0';
⚠️ 最易错点:字母用%26(26个字母),数字用%10(10个数字),别搞混!
📦 回顾四:自定义函数
函数定义格式
返回值类型 函数名(参数列表) {
// 函数体
return 返回值;
}
// 示例:求两数之和
int add(int a, int b) {
return a + b;
}
调用函数
int result = add(3, 5); // 调用,结果存入result
cout << result << endl; // 输出8
💡 void函数没有return值,用来执行操作不返回结果。
🔀 回顾五:排序
sort函数基础
#include
// ★ 头文件
sort(a, a + n); // 默认升序(从小到大)
降序排序(自定义cmp)
bool cmp(int a, int b) {
return a > b; // ★ 从大到小
}
sort(a, a + n, cmp);
⚠️ sort一定要加#include <algorithm>,否则编译错误!
✏️ 选择题 1/4:数组下标
我们声明了数组 int a[100],这个数组的最大下标是多少?
A. 98
B. 99
C. 100
D. 101
💡 解析:C++数组下标从0开始。int a[100]有100个元素,下标是0,1,2,...,99。所以最大下标是99,不是100!这是最高频的易错点。
✏️ 选择题 2/4:for循环输出
下面哪个for循环可以正确输出1到100的所有整数?
A. for(int i=1; i<100; i++)
B. for(int i=1; i<=100; i++)
C. for(int i=0; i<=100; i++)
D. for(int i=0; i<100; i++)
💡 解析:要输出1到100:起始i=1(不从0开始),条件i<=100(必须包含100,不能用<100否则漏掉100),每次i++。选项B完全正确。
✏️ 选择题 3/4:凯撒密码数字
凯撒密码中,对数字字符加密应该用哪个公式?
A. (ming-'0'+k)%26+'0'
B. (ming-'0'+k)%10+'0'
C. (ming-'a'+k)%10+'a'
D. (ming-'A'+k)%26+'A'
💡 解析:数字只有0~9共10个,所以取模应该是10(%10),不是26。字母才是26个用%26。这是凯撒密码最容易搞混的地方。
✏️ 选择题 4/4:数组与字符数组
关于数组,以下哪个说法是正确的?
A. int a[5]; 可以用 cin >> a; 整体输入
B. char s[20]; 可以用 cin >> s; 整体输入
C. 数组初始化的元素个数可以超过声明长度
D. for(int i=0; i<=5; i++) 可以遍历a[5]的全部元素
💡 解析:字符数组可以用cin>>s整体输入字符串。但int数组不能这样,必须逐元素cin>>a[i]。遍历数组时i<n不是i<=n(否则越界)。
💻 编程题 1/3:m的倍数
📝 题目描述
输入两个正整数n和m,请输出1到n之间所有是m的倍数的数,每行一个。
📥 输入输出
- 输入:两个正整数n和m
- 输出:所有满足条件的数,从小到大每行一个
样例输入:
10 3
样例输出:
3
6
9
💡 思路提示
用for循环遍历1到n,判断i%m==0,是就输出。注意==是两个等号!
💻 编程题 2/3:公因数之和
📝 题目描述
输入两个正整数a和b,请求出它们的所有公因数之和。
📥 输入输出
样例输入:
12 18
样例输出:
12
💡 思路提示
枚举i从1到a,判断a%i==0 && b%i==0,满足就累加到sum。两个条件缺一不可!
💻 编程题 3/3:最大跨度值
📝 题目描述
输入n个整数,请求出这些数中最大值与最小值的差(最大跨度值)。
📥 输入输出
- 输入:第一行n,第二行n个整数
- 输出:最大值减最小值的结果
样例输入:
5
3 7 2 9 1
样例输出:
8
💡 思路提示
打擂台法:先设第一个数同时为max和min,遍历更新,最后输出max-min。
🎉 课程结束!
恭喜你完成了C3-10阶段测试的课程内容!
📌 课后任务
- ✅ 完成随堂练习(5选择+3判断)
- ✅ 完成知识大闯关5个关卡
- ✅ 完成OJ平台15道练习题
- ✅ 查看拓展解析(问妈妈要密码)
💪 C3阶段圆满结束!接下来我们将进入C4的学习——循环嵌套与枚举!