关于控制结构知识点的详细讲解(从属GESP一级内容)

发布于:2025-06-23 ⋅ 阅读:(13) ⋅ 点赞:(0)

本章内容

顺序结构
选择结构
循环结构

控制结构知识点汇总

✅ 一、顺序结构(Sequential Structure)

项目

内容

定义

顺序结构是程序最基本的结构,各语句按书写顺序依次执行,从上到下、从左到右,无条件跳转。

语法特征

每条语句后面一般用分号 ; 结束,如赋值、输出等

常见语句

int a = 5;

cout << a; a = a + 1;

执行流程图

开始 → 语句1 → 语句2 → 语句3 → 结束

典型例题

Q

:执行下面代码输出?
int x=1;
x+=2;
cout << x;
A:3

常见错误

忘记分号;逻辑上依赖前一条语句但书写顺序错误

考试提示

通常作为多句组合出现在代码阅读题中,例如预测输出或判断执行顺序


✅ 二、选择结构(Branching Structure)

2.1 if 条件语句

项目

内容

语法格式

- 单分支:if (条件) 语句;
- 双分支:if (条件) 语句1; else 语句2;
- 多分支:if (...)...else if(...)...else...

执行逻辑

根据条件表达式的真假决定是否执行某个代码块

例题分析

Q

:执行下面代码输出?
if (3 < 5) cout << "Yes";
else cout << "No";
A:Yes

典型用途

判断输入是否合法、分类输出、处理分支情况

常见错误

- 忘记加花括号 {} 导致逻辑错误
- 条件表达式不加括号

2.2 switch-case 结构

项目

内容

语法格式

switch (变量) {


case 常量1: 语句1; break;
case 常量2: 语句2; break;
default: 默认语句;
}

执行逻辑

变量匹配 case 的值并执行对应代码,直到 break 结束

例题分析

Q

:x = 2,执行一下代码输出
switch(x) {
case 1: cout<<"A"; break;
case 2: cout<<"B";
}
A:B

常见错误

- 忘记写 break 导致“穿透”
- 变量不是整型/字符型

2.3 条件运算符(三目运算符)

项目

内容

语法格式

条件 ? 表达式1 : 表达式2

功能

类似 if-else,适用于简单判断

例题分析

int x = 3, y = 4; cout << (x > y ? x : y);

输出?→ 4


✅ 三、循环结构(Loop Structure)

类型

格式

特点

使用建议

for

循环

for(初始化; 条件; 更新)

常用于确定次数的循环

计数、区间遍历

while

循环

while(条件)

条件成立时继续循环

不确定循环次数

do-while

循环

do {语句} while(条件);

至少执行一次

如菜单循环

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 循环控制:breakcontinue

关键字

功能

break

跳出整个循环

continue

跳过当前循环,进入下一次判断

3.3 真题分析

  • 题型for (int i = 1; i <= 10; i += 2) 输出几次?(考察循环控制)
  • 判断题do...while 最少执行一次;continue 会导致死循环

✅ 汇总对比表

控制结构

关键词

应用场景

是否一定执行

顺序结构

程序默认执行流程

选择结构

if

, switch, ?:

条件判断

循环结构

for

, while, do-while

重复执行任务

do-while

✅,其余需满足条件

四、控制结构真题+模版


✅ 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 << " ";

❗ 七、控制结构常见错误对照表

错误类型

错误示例

正确写法

注释

比较写成赋值

if (x = 0)

if (x == 0)

表达式恒为假

忘记大括号

if (x > 0) cout<<x; cout<<y;

if(x>0){ cout<<x; cout<<y; }

y 永远输出

死循环

while (1) continue;

需添加退出条件

真题考过

for中写错更新

for (int i=0; i<10;)

i++

i+=1

没更新变量,死循环


五、真题解析

🧩 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题:条件表达式错误

题目:
以下哪一项不能用于判断变量 xy 都为 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支持charint 类型变量

答案: D
解析: switch 语句仅支持整数类型(如 intchar),不能用 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

if

条件语句必须使用 {} 包围执行语句。

❌ 错误

单条语句可不加大括号,但建议总是使用以防歧义。

3

while

循环体至少会执行一次。

❌ 错误

若条件初始不满足,则一次也不执行。

4

do...while

结构在条件不成立时也至少执行一次循环体。

✅ 正确

while 不同,它先执行后判断。

5

switch

中若省略 break,可能导致多个 case 被执行。

✅ 正确

这叫“穿透效应”,常见考点。

6

顺序结构中多条 cout 连续书写,会依次输出内容。

✅ 正确

顺序结构下会逐句执行,按顺序输出。

7

continue

会跳出当前循环,直接结束循环体。

❌ 错误

它跳过当前轮剩余语句,进入下一轮判断,不结束循环本身。

8

表达式 if (x = 0) 是合法的 C++ 条件判断语句。

✅ 正确(但逻辑错误)

是合法语法,赋值为0,结果为假,常见混淆误用。

9

for

循环不能替代 while 循环。

❌ 错误

两者可互换,功能一致,语法不同。

10

顺序结构不能包含选择或循环语句。

❌ 错误

顺序结构可以嵌套任意语句,只要按顺序执行即可。


✅ 4、编程题 (3 题)


✅ 编程题 1:奇偶计数器(选择结构)

题目描述:
输入两个整数 ab,判断它们分别是奇数还是偶数,并按行输出对应结果(“Odd” 或 “Even”)。

输入格式:
两个整数 ab(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;
}


网站公告

今日签到

点亮在社区的每一天
去签到