流程结构

news2024/12/23 16:14:51

章节目录:

    • 一、选择结构
      • 1.1 if 语句
      • 1.2 if...else 语句
      • 1.3 嵌套 if
      • 1.4 if...else if...else
      • 1.5 三目运算符
      • 1.6 switch 语句
    • 二、循环结构
      • 2.1 while 语句
      • 2.2 do...while 语句
      • 2.3 for 语句
      • 2.4 嵌套循环
    • 三、跳转语句
      • 3.1 break 语句
      • 3.2 continue 语句
      • 3.3 goto 语句
    • 四、结束语

一、选择结构

选择结构:依据条件是否满足,有选择的执行相应功能。

1.1 if 语句

一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。

  • 语法
if(boolean_expression)
{
   // 如果布尔表达式为真将执行的语句。
}
  • 示意图

  • 代码示例
#include <iostream>

int main() {

    int score = 0;

    std::cout << "请输入您的分数: " << std::endl;

    std::cin >> score;

    if (score > 60) {
        std::cout << "很好,及格了!" << std::endl;
        // 请输入您的分数: 
        // 61
        // 很好,及格了!
    }

    return 0;
}

1.2 if…else 语句

一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。

  • 语法
if (boolean_expression) {
  // 如果布尔表达式为真将执行的语句。
} else {
  // 如果布尔表达式为假将执行的语句。 
}
  • 示意图

  • 代码示例
#include <iostream>

int main() {

    int score = 0;

    std::cout << "请输入您的分数: " << std::endl;

    std::cin >> score;

    if (score > 600) {
        std::cout << "考上了不错的大学。" << std::endl;
        // 请输入您的分数: 
        // 650
        // 考上了不错的大学。
    } else {
        std::cout << "只考上了一般的大学。" << std::endl;
        // 请输入您的分数:
        // 480
        // 只考上了一般的大学。
    }

    return 0;
}

1.3 嵌套 if

if 语句中,可以嵌套使用 if 语句,达到更精确的条件判断。

  • 语法
if( boolean_expression 1)
{
   // 当布尔表达式 1 为 true 时执行。
   if(boolean_expression 2)
   {
      // 当布尔表达式 2 为 ture 时执行。
   }
}
  • 代码示例
#include <iostream>

int main() {

    int score = 0;

    std::cout << "请输入您的分数: " << std::endl;

    std::cin >> score;

    if (score > 0) {
        if (score < 60) {
            std::cout << "分数不及格。" << std::endl;
            // 请输入您的分数: 
            // 58
            // 分数不及格。
        } else {
            std::cout << "分数及格了。" << std::endl;
            // 请输入您的分数:
            // 60
            // 分数及格了。
        }
    } else {
        std::cout << "分数输入异常。" << std::endl;
        // 请输入您的分数:
        // -1
        // 分数输入异常
    }
    
    return 0;
}

1.4 if…else if…else

一个 if 语句后可跟一个可选的 else ifelse 语句,这可用于测试多种条件。

  • 语法
if (boolean_expression 1) {
  // 当布尔表达式 1 为 true 时执行。
} else if (boolean_expression 2) {
  // 当布尔表达式 2 为 true 时执行。
} else if (boolean_expression 3) {
  // 当布尔表达式 3 为 true 时执行。
} else {
  // 以上都不满足执行的语句。
}
  • 代码示例
#include <iostream>

int main() {

    int score = 0;

    std::cout << "请输入考试分数:" << std::endl;

    std::cin >> score;

    if (score > 600) {
        std::cout << "我考上了一本大学" << std::endl;
    } else if (score > 500) {
        std::cout << "我考上了二本大学" << std::endl;
    } else if (score > 400) {
        std::cout << "我考上了三本大学" << std::endl;
    } else {
        std::cout << "我未考上本科" << std::endl;
    }

    return 0;
}

1.5 三目运算符

三目运算符可以实现简单的判断。

  • 语法
// 表达式1 ? 表达式2 :表达式3
expression 1 ? expression 2 : expression 3

// 如果表达式1的值为真,执行表达式2,并返回表达式2的结果;
// 如果表达式1的值为假,执行表达式3,并返回表达式3的结果。  
  • 代码示例
#include <iostream>

int main() {

    int a = 100;
    int b = 200;
    int max = 0;

    max = a > b ? a : b;
    std::cout << max << std::endl;
    // 200

    return 0;
}
  • if 语句比较,三目运算符优点是短小整洁,缺点是如果用嵌套,结构不清晰,会增加理解的难度

1.6 switch 语句

用于执行多条件分支语句。

  • 语法
switch(expression){
    
    case constant-expression  :
       statement(s);
       break; // 可选的
    
    case constant-expression  :
       statement(s);
       break; // 可选的
  
    // 您可以有任意数量的 case 语句
    default : // 可选的
       statement(s);
}
  • 代码示例
#include <iostream>

int main() {
    int score = 0;
    std::cout << "请输入电影评分(满分10分):" << std::endl;
    std::cin >> score;
    
    switch (score) {
        case 10:
        case 9:
            std::cout << "优秀。" << std::endl;
            break;
        case 8:
        case 7:
            std::cout << "还不错" << std::endl;
            break;
        case 6:
        case 5:
            std::cout << "一般" << std::endl;
            break;
        default:
            std::cout << "不怎么样" << std::endl;
            break;
    }

    return 0;
}
  • 注意事项
    • switch 语句中表达式类型只能是整型或者字符型。
    • case 里如果没有 break,那么程序会一直向下执行
  • 总结:与 if 语句比,对于多条件判断时,switch结构清晰,执行效率高,缺点是 switch 不可以判断区间

二、循环结构

2.1 while 语句

只要给定的条件为真,while 循环语句会重复执行一个目标语句。

  • 语法
while(condition)
{
   statement(s);
}
  • 代码示例
#include <iostream>
#include <random>

int main() {

    // 创建一个 1~ 10 的随机数。
    // 使用随机设备作为种子
    std::random_device rd;
    // 使用 Mersenne Twister 引擎。
    std::mt19937 gen(rd());
    // 定义要生成随机数的范围。
    std::uniform_int_distribution<int> dis(1, 10);
    // 生成随机数。
    int system_num = dis(gen);

    // 接收用户输入。
    int input_number = 0;
    while (input_number != system_num) {
        std::cout << "请输入一个数(10以内):" << std::endl;
        std::cin >> input_number;
        if (input_number == system_num) {
            std::cout << "恭喜你,猜对啦!" << std::endl;
        } else {
            std::cout << "差一点点,请继续猜数!" << std::endl;
        }
        std::cout << "\n" << std::endl;
    }

    return 0;
}
  • 注意:在执行循环语句时候,程序必须提供跳出循环的出口,否则出现死循环。

2.2 do…while 语句

不像 forwhile 循环,它们是在循环头部测试循环条件。do...while 循环是在循环的尾部检查它的条件。

do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。

  • 语法
do
{
   statement(s);

}while( condition );
  • 代码示例
#include <iostream>

int main() {

    int num = 0;

    do {
        
        std::cout << num << std::endl;
        // 0
        // 1
        // 2
        // 3
        // 4
        // 5
        // 6
        // 7
        // 8
        // 9
        num++;

    } while (num < 10);

    return 0;
}

2.3 for 语句

for 循环允许编写一个执行特定次数的循环的重复控制结构。

  • 语法
for ( init; condition; increment )
{
   statement(s);
}
  • init 会首先被执行,且只会执行一次。这一步可以声明并初始化任何循环控制变量。也可以不在这里写任何语句,只要有一个分号出现即可。
  • 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  • 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句可以更新循环控制变量。也可以留空,只要在条件后有一个分号出现即可。
  • 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。
  • 代码示例
#include <iostream>

int main() {

    for (int i = 0; i < 5; i++) {
        std::cout << i << std::endl;
        // 0
        // 1
        // 2
        // 3
        // 4
    }
    
    return 0;
}

2.4 嵌套循环

一个循环内可以嵌套另一个循环。

  • 嵌套 for
for ( init; condition; increment )
{
   for ( init; condition; increment )
   {
      statement(s);
   }
   statement(s); 
  // 可以放置更多的语句。
}
  • 嵌套 while
while(condition)
{
   while(condition)
   {
      statement(s);
   }
   statement(s); // 可以放置更多的语句
}
  • 代码示例
#include <iostream>

int main() {

    // 利用嵌套 for 打印星形矩阵。
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            std::cout << "*" << " ";
            // * * *
            // * * *
            // * * *
        }
        std::cout << std::endl;
    }

    return 0;
}

三、跳转语句

3.1 break 语句

关键字 break 用于跳出选择结构或者循环结构。

  • 用法

    • break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。
    • 它可用于终止 switch 语句中的一个 case
    • 出现在嵌套循环中,可跳出最近的内层循环语句。
  • 代码示例

#include <iostream>

int main() {

    int n = 0;
    while (true) {
        std::cout << "n=" << n << std::endl;
        // n=0
        // n=1
        // n=2
        // n=3
        // n=4
        // n=5
        if (n == 5) {
            // n 等于 5 的时候跳出循环。
            break;
        }
        n += 1;
    }

    return 0;
}

3.2 continue 语句

在循环语句中,continue 用于跳过本次循环中余下尚未执行的语句,继续执行下一次循环。

  • 代码示例
#include <iostream>

int main() {

    for (int a = 10; a > 0; a--) {
        // 跳过偶数。
        if (a % 2 == 0) {
            continue;
        }
        std::cout << a << std::endl;
        // 9
        // 7
        // 5
        // 3
        // 1
    }

    return 0;
}
  • 注意continue 并没有使整个循环终止,而 break 会跳出循环。

3.3 goto 语句

语句允许把控制无条件转移到同一函数内的被标记的语句。

  • 注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改
  • 任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法。
  • 语法
goto label;
..
.
label: statement;

  • 代码示例
#include <iostream>

int main() {

    std::cout << "1" << std::endl;
    // 1

    goto FLAG;

    std::cout << "2" << std::endl;
    std::cout << "3" << std::endl;
    std::cout << "4" << std::endl;

    FLAG:

    std::cout << "5" << std::endl;
    // 5

    return 0;
}
  • goto 语句一个很好的作用是退出深嵌套:
for(...) {
   for(...) {
      while(...) {
         if(...) goto stop;
         .
         .
         .
      }
   }
}
stop:
std::cout << "Error";

四、结束语


“-------怕什么真理无穷,进一寸有一寸的欢喜。”

微信公众号搜索:饺子泡牛奶

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1453037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenAI 发布 Sora,可快速生成视频

作者&#xff1a;苍何&#xff0c;前大厂高级 Java 工程师&#xff0c;阿里云专家博主&#xff0c;CSDN 2023 年 实力新星&#xff0c;土木转码&#xff0c;现任部门技术 leader&#xff0c;专注于互联网技术分享&#xff0c;职场经验分享。 &#x1f525;热门文章推荐&#xf…

点亮代码之灯,程序员的夜与电脑

在科技的海洋里&#xff0c;程序员是那些驾驶着代码船只&#xff0c;穿梭于虚拟世界的探险家。他们手中的键盘是航行的舵&#xff0c;而那台始终不愿关闭的电脑&#xff0c;便是他们眼中永不熄灭的灯塔。有人说&#xff0c;程序员不喜欢关电脑&#xff0c;这究竟是为什么呢&…

Rust 学习笔记 - 注释全解

前言 和其他编程语言一样&#xff0c;Rust 也提供了代码注释的功能&#xff0c;注释用于解释代码的作用和目的&#xff0c;帮助开发者理解代码的行为&#xff0c;编译器在编译时会忽略它们。 单行注释 单行注释以两个斜杠 (//) 开始&#xff0c;只影响它们后面直到行末的内容…

阿里云服务器租用价格 2024年新版活动报价及租用收费标准

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

模拟电子技术——同相比例运算放大电路、反向运算比例放大电路、反向加法器电路、差分减法器电路

文章目录 一、同相比例运算放大电路什么是比例运算放大电路线性区与非线性区电压跟随器 二、反向运算比例放大电路什么是反比例运算放大器电路及特点 三、反向加法器电路什么是反向加法器电路及特点及参数计算电路及特点及参数计算 四、差分减法器电路什么是差动减法器 总结 提…

备战蓝桥杯---图论之建图基础

话不多说&#xff0c;直接看题&#xff1a; 首先&#xff0c;这个不是按照字典序的顺序&#xff0c;而是以只要1先做&#xff0c;在满足后让2先做。。。。 就是让数字小的放前面做拓扑排序。 我们可以先做1&#xff0c;看看它的前驱。 举个例子&#xff1a; 我们肯定要把1放…

BIOS and UEFI

BIOS : Basic Input/Output System UEFI: Unified Extensible Firmware Interface Notes: 1. 两者都是主板上的firmware. 2. 两者的作用都包括开机后检查硬件&#xff0c;从硬盘上寻找bootloader(用于加载操作系统&#xff0c;例如GRUB). # 操作系统的启动过程&#xff1a…

VS2022创建控制台应用程序后没有Main了,该如何解决?

用VS2022创建一个控制台应用后&#xff0c;没有名称空间和Main函数了&#xff0c;只有一个WriteLine&#xff0c;如下所示。 // See https://aka.ms/new-console-template for more information Console.WriteLine("Hello, World!");首先说明一下原因&#xff0c;在…

sqlserver对已有的表插入列

现有如下的一个表&#xff1b; 现在要插入一个 人员id 列&#xff1b;如下图在设计视图的行首单击&#xff0c;选择 插入列&#xff1b; 然后添加一个 人员id 列&#xff1b; 保存&#xff0c;出现下图提示&#xff0c;不能保存设计&#xff1b; 这就直接使用sql语句更改&#…

使用 Coze 搭建 TiDB 助手

导读 本文介绍了使用 Coze 平台搭建 TiDB 文档助手的过程。通过比较不同 AI Bot 平台&#xff0c;突出了 Coze 在插件能力和易用性方面的优势。文章深入讨论了实现原理&#xff0c;包括知识库、function call、embedding 模型等关键概念&#xff0c;最后成功演示了如何在 Coze…

wayland(xdg_wm_base) client 使用 dmabuf 最简实例

文章目录 前言一、zwp_linux_dmabuf_v1 协议二、wayland client 使用 zwp_linux_dmabuf_v1 协议传递dma-buf代码实例1. wayland_dmabuf.c 代码实例2. xdg-shell-protocol.c 和 xdg-shell-client-protocol.h3. linux-dmabuf-unstable-v1-client-protocol.h 和 linux-dmabuf-unst…

清华AutoGPT:掀起AI新浪潮,与GPT4.0一较高下

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域迎来了一个又一个突破。最近&#xff0c;清华大学研发的AutoGPT成为了业界的焦点。这款AI模型以其出色的性能&#xff0c;展现了中国在AI领域的强大实力。 目录 引言&…

SQL32 截取出年龄(substring_index函数的用法)

代码 select substring_index(substring_index(profile,,,3),,,-1) as age ,count(device_id) from user_submit group by age知识点 substring_index(FIELD, sep, n)可以将字段FIELD按照sep分隔&#xff1a; (1).当n大于0时取第n个分隔符(n从1开始)之前的全部内容&#xff1…

高速列车的空气动力学问题概述

1 高速铁路定义 高速铁路目前尚无全球统一的标准&#xff0c;普遍认定标准为新建线路上列车速度可达 250 km/h&#xff0c;或者既有线改造后可达 200 km/h 即可视为高速铁路。由于车辆、轨道、桥隧、调度、安全等多方面原因&#xff0c;当前没有用于货运用途的高速铁路&#x…

前端秘法进阶篇----这还是我们熟悉的浏览器吗?(浏览器的渲染原理)

目录 一.浏览器渲染原理 二.渲染时间点 三.渲染流水线 1.解析html(Parse HTML) 1.1解析成DOM树(document object model) 1.2解析成CSSOM树(css object model) 2.样式计算(Recalculate Style) 3.布局(Layout) 4.分层(Layer) 5. 绘制(Paint) 6.分块(Tiling) 7. 光栅化…

Leetcode1423.可获得的最大点数

文章目录 题目原题链接思路&#xff08;逆向思维&#xff09; 题目 原题链接 Leetcode1423.可获得的最大点数 思路&#xff08;逆向思维&#xff09; 由题目可知&#xff0c;从两侧选k张&#xff0c;总数为n张&#xff0c;即从中间选n - k张 nums总和固定&#xff0c;要选k张最…

深度学习基础之《TensorFlow框架(4)—Operation》

一、常见的OP 1、举例 类型实例标量运算add&#xff0c;sub&#xff0c;mul&#xff0c;div&#xff0c;exp&#xff0c;log&#xff0c;greater&#xff0c;less&#xff0c;equal向量运算concat&#xff0c;slice&#xff0c;splot&#xff0c;canstant&#xff0c;rank&am…

【TC3xx芯片】TC3xx芯片SMU模块详解

目录 前言 正文 1.SMU功能概述 1.1 SMU架构 1.2 SMU_core 1.3 SMU_stdby 2. SMU功能详述 2.1 SMU_core 2.1.1 Reset类型 2.1.2 接口&#xff08;Interfaces&#xff09;概述 2.1.2.1 SMU_core到SCU的接口 2.1.2.2 SMU_core到IR的接口 2.1.2.3 SMU_core到Ports(Err…

ClickHouse--06--其他扩展MergeTree系列表引擎

其他扩展MergeTree系列 MergeTree 系列表引擎 --种类 MergeTree 系 列 表 引 擎 包 含 &#xff1a; MergeTreeReplacingMergeTreeSummingMergeTree&#xff08;汇总求和功能&#xff09;AggregatingMergeTree&#xff08;聚合功能&#xff09;CollapsingMergeTree&#xff08…

Stable Diffusion webui安装详细教程

上一篇文章介绍了sd主流的ui&#xff0c;相信大家已经有所了解&#xff0c;下面为大家介绍sd-webui的安装详细教程 文章目录 一、 安装包说明二、对电脑的要求三、安装文件介绍四、安装步骤五、电脑问题与云主机六、界面简要说明及通用反向提示词 一、 安装包说明 通常我们使…