本章内容
顺序结构
选择结构
循环结构
控制结构知识点汇总
✅ 一、顺序结构(Sequential Structure)
项目 |
内容 |
定义 |
顺序结构是程序最基本的结构,各语句按书写顺序依次执行,从上到下、从左到右,无条件跳转。 |
语法特征 |
每条语句后面一般用分号 |
常见语句 |
|
执行流程图 |
开始 → 语句1 → 语句2 → 语句3 → 结束 |
典型例题 |
Q :执行下面代码输出? |
常见错误 |
忘记分号;逻辑上依赖前一条语句但书写顺序错误 |
考试提示 |
通常作为多句组合出现在代码阅读题中,例如预测输出或判断执行顺序 |
✅ 二、选择结构(Branching Structure)
2.1 if
条件语句
项目 |
内容 |
语法格式 |
- 单分支: |
执行逻辑 |
根据条件表达式的真假决定是否执行某个代码块 |
例题分析 |
Q :执行下面代码输出? |
典型用途 |
判断输入是否合法、分类输出、处理分支情况 |
常见错误 |
- 忘记加花括号 |
2.2 switch-case
结构
项目 |
内容 |
语法格式 |
|
执行逻辑 |
变量匹配 |
例题分析 |
Q :x = 2,执行一下代码输出 |
常见错误 |
- 忘记写 |
2.3 条件运算符(三目运算符)
项目 |
内容 |
语法格式 |
|
功能 |
类似 |
例题分析 |
输出?→ 4 |
✅ 三、循环结构(Loop Structure)
类型 |
格式 |
特点 |
使用建议 |
循环 |
|
常用于确定次数的循环 |
计数、区间遍历 |
循环 |
|
条件成立时继续循环 |
不确定循环次数 |
循环 |
|
至少执行一次 |
如菜单循环 |
3.1 示例对比
for (int i = 0; i < 5; i++) cout << i; // 输出01234
int i = 0; while (i < 5) cout << i++; // 同上
int j = 0; do { cout << j; j++; } while (j < 5); // 同上,至少执行一次
3.2 循环控制:break
和 continue
关键字 |
功能 |
|
跳出整个循环 |
|
跳过当前循环,进入下一次判断 |
3.3 真题分析
- • 题型:
for (int i = 1; i <= 10; i += 2)
输出几次?(考察循环控制) - • 判断题:
do...while
最少执行一次;continue
会导致死循环
✅ 汇总对比表
控制结构 |
关键词 |
应用场景 |
是否一定执行 |
顺序结构 |
无 |
程序默认执行流程 |
✅ |
选择结构 |
, |
条件判断 |
❌ |
循环结构 |
, |
重复执行任务 |
✅,其余需满足条件 |
四、控制结构真题+模版
✅ 1、顺序结构
📘 经典语句示例:
int a = 10;
int b = 20;
int c = a + b;
cout << "a + b = " << c << endl;
🎯 流程图:
开始 → 变量定义 → 赋值运算 → 输出结果 → 结束
✅ 真题示例
- • 题型(2023年9月):执行
int x = 1; x += 2; cout << x;
的输出是?
答案:3(属于顺序结构的逐句执行)
✅ 2、选择结构
📘 模板代码
if - else
示例:
int score;
cin >> score;
if (score >= 60)
cout << "Pass";
else
cout << "Fail";
switch
示例:
int day;
cin >> day;
switch(day) {
case 1: cout << "Monday"; break;
case 2: cout << "Tuesday"; break;
default: cout << "Invalid"; break;
}
🎯 流程图:
开始 → 判断条件 → 是 → 执行语句1 → 结束
否 → 执行语句2 → 结束
✅ 真题讲解:
- • 判断题(2024年6月):表达式
(a == b == 0)
能否判断 a、b 都为 0?
解析:错误。应使用(a == 0) && (b == 0)
- • 选择结构常错点:
-
- • 使用
=
替代==
比较(赋值错写成判断) - • 忘记
break
导致switch
穿透 - •
if-else
逻辑嵌套混乱不加花括号
- • 使用
✅ 3、循环结构
📘 模板代码汇总:
for
循环:
for (int i = 0; i < 5; i++) {
cout << i << " ";
}
while
循环:
int i = 0;
while (i < 5) {
cout << i << " ";
i++;
}
do...while
循环:
int i = 0;
do {
cout << i << " ";
i++;
} while (i < 5);
带 break/continue
示例:
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) continue; // 跳过偶数
cout << i << " ";
}
🎯 流程图(以 while 为例):
开始 → 判断条件
↓是 ↓否
执行语句 → 返回判断 结束
✅ 真题讲解:
- • 判断题(2023年9月):
do...while
至少执行一次 — 正确 ✅ - • 题目:输出从1到10之间所有奇数
for (int i = 1; i <= 10; i += 2)
cout << i << " ";
❗ 七、控制结构常见错误对照表
错误类型 |
错误示例 |
正确写法 |
注释 |
比较写成赋值 |
|
|
表达式恒为假 |
忘记大括号 |
|
|
y 永远输出 |
死循环 |
|
需添加退出条件 |
真题考过 |
for中写错更新 |
|
或 |
没更新变量,死循环 |
五、真题解析
🧩 1、顺序结构:10道真题 + 解析
第1题:变量赋值顺序
题目:
以下代码输出结果为:
int a = 2;
int b = 3;
cout << a + b;
A. 23
B. 5
C. 2+3
D. 编译错误
答案: B
解析: 顺序结构:依次执行变量定义、加法运算和输出,输出 5。
第2题:表达式求值顺序
题目:
表达式 5 + 3 * 2
的计算结果为:
A. 11
B. 16
C. 13
D. 8
答案: A
解析: 顺序结构遵循表达式优先级:先乘后加,3×2=6,5+6=11。
第3题:多个语句顺序执行
题目:
以下程序的输出是:
int x = 1;
x = x + 2;
cout << x;
A. 1
B. 2
C. 3
D. 编译错误
答案: C
解析: 依次执行变量初始化、加法赋值和输出,结果为 3。
第4题:顺序执行多个输出语句
题目:
执行以下代码,输出结果为:
cout << "Hello";
cout << "World";
A. Hello World
B. HelloWorld
C. Hello\nWorld
D. 编译错误
答案: B
解析: 没有换行符,两个字符串连着输出,结果为 HelloWorld。
第5题:运算赋值语句执行
题目:
以下程序执行后,变量 x
的值为:
int x = 4;
x *= 2 + 1;
A. 12
B. 8
C. 6
D. 5
答案: A
解析: 表达式等价于 x = x * (2+1)
= 4×3 = 12。
第6题:输出顺序
题目:
以下代码输出为:
int x = 10;
cout << x;
x += 5;
cout << x;
A. 1015
B. 15
C. 1010
D. 510
答案: A
解析: 顺序输出 x=10,然后 x 加 5 得 15,共输出 1015。
第7题:变量间依赖顺序
题目:
以下代码输出结果是:
int a = 4;
int b = a * 2;
cout << b;
A. 8
B. 4
C. 2
D. 6
答案: A
解析: 顺序结构确保 a 先被赋值为 4,然后 b=4×2=8。
第8题:表达式执行顺序
题目:
若 int a = 2, b = 3;
,下列语句执行顺序正确的是:
A. a+b → cout → return
B. a赋值 → b赋值 → 输出
C. 输出 → 变量定义
D. return → cout
答案: B
解析: 定义顺序决定执行顺序,变量定义赋值后才能使用。
第9题:顺序结构语法判断
题目:
以下关于顺序结构的描述正确的是:
A. 每条语句必须用 if
包裹
B. 顺序结构中可以无语句
C. 所有语句依照代码顺序依次执行
D. 所有语句必须是循环体内部的
答案: C
解析: 顺序结构定义就是“逐句依次执行”,符合选项 C。
第10题:表达式嵌套
题目:
以下程序输出是:
int a = 1 + 2 * 3;
cout << a;
A. 9
B. 7
C. 5
D. 6
答案: B
解析: 运算优先级先乘法后加法:2×3=6,1+6=7。
🧩 2、选择结构:10道真题 + 解析
第1题:基本条件判断
题目:
以下代码的输出结果是:
int a = 10;
if (a > 5)
cout << "Big";
else
cout << "Small";
A. Big
B. Small
C. 编译错误
D. 无输出
答案: A
解析: a > 5
成立,因此执行 cout << "Big";
。
第2题:条件表达式错误
题目:
以下哪一项不能用于判断变量 x
和 y
都为 0?
A. x == 0 && y == 0
B. (x == 0) && (y == 0)
C. !(x != 0 || y != 0)
D. x = 0 && y = 0
答案: D
解析: D 中使用的是赋值运算符 =
, 会将 x 与 y 赋值为 0,不是逻辑判断,应使用 ==
。
第3题:switch 用法
题目:
以下关于 switch
语句的说法正确的是:
A. switch
支持浮点类型变量
B.case
后面可以是表达式
C.switch
中必须有default
分支
D.switch
支持char
和int
类型变量
答案: D
解析: switch
语句仅支持整数类型(如 int
、char
),不能用 float 或表达式。
第4题:if 嵌套结构
题目:
执行以下代码,输出结果是:
int x = 5;
if (x > 3)
if (x < 10)
cout << "OK";
else
cout << "Wrong";
A. OK
B. Wrong
C. 编译错误
D. 无输出
答案: A
解析: x > 3 和 x < 10 都为真,进入内层 if,输出 OK。
第5题:三目运算符判断
题目:
以下代码的输出为:
int x = 3, y = 5;
cout << (x > y ? x : y);
A. 3
B. 5
C. x
D. y
答案: B
解析: 因为 x > y 为假,所以输出 y,即 5。
第6题:错误使用赋值
题目:
以下语句的功能是判断 a
是否等于 0,但哪一项写法错误?
A. if (a == 0)
B. if (!(a != 0))
C. if (a = 0)
D. if (a <= 0 && a >= 0)
答案: C
解析: C 为赋值语句,返回 0 视为假,不是判断;正确写法应为 a == 0
。
第7题:switch 穿透现象
题目:
以下代码输出是?
int day = 2;
switch(day) {
case 1: cout << "Mon";
case 2: cout << "Tue";
case 3: cout << "Wed";
}
A. Tue
B. TueWed
C. MonTueWed
D. 无输出
答案: B
解析: 因为 case 2 匹配成功,但没有 break
,会“穿透”到 case 3。
第8题:条件结构输出
题目:
以下代码的输出结果是?
int a = 0;
if (a)
cout << "True";
else
cout << "False";
A. True
B. False
C. 编译错误
D. 无输出
答案: B
解析: a
为 0,即假,执行 else 分支。
第9题:三目嵌套使用
题目:
以下代码的输出为?
int x = 2, y = 3, z = 1;
cout << (x > y ? x : (y > z ? y : z));
A. 2
B. 3
C. 1
D. 编译错误
答案: B
解析: x > y 为假,进入 y > z ? y : z
,即 3 > 1
为真,输出 y,即 3。
第10题:选择结构的应用场景
题目:
选择结构主要用于以下哪类问题?
A. 重复执行某项操作
B. 按顺序执行指令
C. 判断并分支执行不同语句
D. 读取外部文件内容
答案: C
解析: A 是循环结构,B 是顺序结构,C 是选择结构的本质用途。
🔁 3、循环结构:10道真题 + 解析
第1题:for 循环基础
题目:
以下代码输出结果为:
for (int i = 0; i < 3; i++)
cout << i;
A. 123
B. 012
C. 345
D. 013
答案: B
解析: i 从 0 开始,每次 +1,输出 0、1、2,共三次。
第2题:while 循环执行
题目:
以下代码输出结果为:
int i = 0;
while (i < 2) {
cout << i;
i++;
}
A. 0 1
B. 1 2
C. 0 1 2
D. 01
答案: D
解析: i=0、1 时满足条件输出,连在一起为 01。
第3题:do...while 至少执行一次
题目:
以下代码的输出结果是:
int i = 10;
do {
cout << "Hi";
} while (i < 5);
A. Hi
B. 无输出
C. 编译错误
D. 死循环
答案: A
解析: do...while
结构即使条件不成立也会执行一次。
第4题:死循环判断
题目:
以下哪个循环语句会导致死循环?
A. for (int i = 1; i < 5; i++)
B. while (false)
C. while (1)
D. do { break; } while (1);
答案: C
解析: 条件永远为真,且无退出机制,会无限循环。
第5题:continue 跳过循环体
题目:
执行以下代码输出是?
for (int i = 0; i < 5; i++) {
if (i == 2) continue;
cout << i;
}
A. 01234
B. 01234(换行)
C. 0134
D. 1234
答案: C
解析: 当 i==2 时跳过 cout << i;
,所以输出 0、1、3、4。
第6题:break 用法
题目:
以下代码输出为:
for (int i = 1; i <= 5; i++) {
if (i == 3) break;
cout << i;
}
A. 12345
B. 12
C. 3
D. 1245
答案: B
解析: i==3 时执行 break
跳出循环,输出了 1 和 2。
第7题:while 执行 0 次
题目:
以下代码会输出几次?
int i = 10;
while (i < 5) {
cout << i;
i++;
}
A. 无限次
B. 0 次
C. 1 次
D. 编译错误
答案: B
解析: 初始 i=10 不满足 i<5,直接跳过循环。
第8题:求和 for 循环
题目:
以下代码的输出结果是:
int sum = 0;
for (int i = 1; i <= 3; i++) {
sum += i;
}
cout << sum;
A. 3
B. 6
C. 10
D. 7
答案: B
解析: 1+2+3=6,循环三次累计求和。
第9题:多重循环
题目:
以下嵌套循环会打印多少个 * 号?
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
cout << "*";
A. 2
B. 3
C. 6
D. 5
答案: C
解析: 外层循环2次,内层3次,共 2×3 = 6。
第10题:循环变量更新遗漏
题目:
以下代码为什么会死循环?
int i = 0;
while (i < 5) {
cout << i;
}
A. i 未初始化
B. 条件错误
C. 没有更新 i
D. cout 写错
答案: C
解析: 循环体中未修改 i,i 一直为 0,导致条件恒真。
✅ 4、控制结构综合判断题(共10题)
题号 |
判断题内容 |
正确/错误 |
解析 |
1 |
在顺序结构中,程序语句从上到下依次执行。 |
✅ 正确 |
顺序结构本质就是“无跳转、逐句执行”。 |
2 |
条件语句必须使用 |
❌ 错误 |
单条语句可不加大括号,但建议总是使用以防歧义。 |
3 |
循环体至少会执行一次。 |
❌ 错误 |
若条件初始不满足,则一次也不执行。 |
4 |
结构在条件不成立时也至少执行一次循环体。 |
✅ 正确 |
与 |
5 |
中若省略 |
✅ 正确 |
这叫“穿透效应”,常见考点。 |
6 |
顺序结构中多条 |
✅ 正确 |
顺序结构下会逐句执行,按顺序输出。 |
7 |
会跳出当前循环,直接结束循环体。 |
❌ 错误 |
它跳过当前轮剩余语句,进入下一轮判断,不结束循环本身。 |
8 |
表达式 |
✅ 正确(但逻辑错误) |
是合法语法,赋值为0,结果为假,常见混淆误用。 |
9 |
循环不能替代 |
❌ 错误 |
两者可互换,功能一致,语法不同。 |
10 |
顺序结构不能包含选择或循环语句。 |
❌ 错误 |
顺序结构可以嵌套任意语句,只要按顺序执行即可。 |
✅ 4、编程题 (3 题)
✅ 编程题 1:奇偶计数器(选择结构)
题目描述:
输入两个整数 a
和 b
,判断它们分别是奇数还是偶数,并按行输出对应结果(“Odd” 或 “Even”)。
输入格式:
两个整数 a
和 b
(0 ≤ a, b ≤ 1000)
输出格式:
每行一个结果,共两行。第一行判断 a,第二行判断 b。
样例输入:
6 13
样例输出:
Even
Odd
参考考点: 使用 if...else
分支结构,涉及取模 %
运算。
参考代码:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if (a % 2 == 0) cout << "Even" << endl;
else cout << "Odd" << endl;
if (b % 2 == 0) cout << "Even" << endl;
else cout << "Odd" << endl;
return 0;
}
✅ 编程题 2:阶乘和(循环结构)
题目描述:
输入一个正整数 N,计算 1 到 N 的阶乘总和,即:
1! + 2! + 3! + ... + N!
输入格式:
一个整数 N(1 ≤ N ≤ 10)
输出格式:
一个整数,表示总和
样例输入:
3
样例输出:
9
参考考点: 使用 for
循环嵌套结构,考查变量累乘与循环嵌套。
参考代码:
#include <iostream>
usingnamespace std;
int main() {
int N;
cin >> N;
int sum = 0;
for (int i = 1; i <= N; i++) {
int fac = 1;
for (int j = 1; j <= i; j++) {
fac *= j;
}
sum += fac;
}
cout << sum;
return0;
}
✅ 编程题 3:成绩输出器(顺序 + 选择结构)
题目描述:
输入学生姓名和成绩(浮点数),如果成绩大于等于 60,输出“[姓名] passed”,否则输出 “[姓名] failed”。
输入格式:
一个字符串(不含空格)和一个浮点数,表示姓名和成绩。
例如:Tom 85.5
输出格式:
一行字符串,形式如 Tom passed
样例输入:
Alice 59.5
样例输出:
Alice failed
参考考点: 字符串输入、顺序读入与判断语句结合。
参考代码:
#include <iostream>
using namespace std;
int main() {
string name;
double score;
cin >> name >> score;
if (score >= 60)
cout << name << " passed";
else
cout << name << " failed";
return 0;
}