[C++]02.选择结构与循环结构

news/2023/11/29 6:25:30

02.选择结构与循环结构

  • 一.程序流程结构
    • 1.选择结构
      • 1.1.if语句
      • 1.2.三目运算符
      • 1.3.switch语句
    • 2.循环结构
      • 2.1.while语句
      • 2.2.do-while语句
      • 2.3.for语句
      • 2.4.break语句
      • 2.5.continue语句
      • 2.6.goto语句

一.程序流程结构

  • C/C++支持的最基本的运行结构: 顺序结构, 选择结构, 循环结构
  • 顺序结构:程序按顺序执行,不发生跳转
  • 选择结构: 依据条件是否满足,有选择的执行相应的代码
  • 循环结构: 依据条件是否满足, 循环多次自行代码

1.选择结构

1.1.if语句

#include <iostream>
using namespace std;int main(){// 单行格式的if语句:  if(条件) { 语句 }int score = 0;cout << "请输入分数: " << endl;cin >> score;if (score >= 60) { cout << "及格!" << endl; }cout << "==============================" << endl;// if-else语句cout << "请输入分数: " << endl;cin >> score;if (score >= 60) {cout << "及格!" << endl;}else {cout << "不及格!" << endl;}// if-else-if语句cout << "请输入分数: " << endl;cin >> score;if (score >= 90) {cout << "优秀!" << endl;}else if (score >= 80) {cout << "良好!" << endl;}else if (score >= 60) {cout << "合格!" << endl;}else {cout << "不及格!" << endl;}system("pause");return 0;
}

案例: 三只小猪称重,要求依次输入三只小猪的体重,判断哪一只猪最重

#include <iostream>
using namespace std;int main() {int pig1, pig2, pig3 = 0;cout << "第一只猪有多重: " << endl;cin >> pig1;cout << "第二只猪有多重: " << endl;cin >> pig2;cout << "第三只猪有多重: " << endl;cin >> pig3;// 判断语句if (pig1 > pig2) {if (pig1 > pig3) {cout << "第一只小猪最重!" << endl;}else if (pig1 == pig3) {cout << "一,三小猪最重!他们一样重!" << endl;}else {cout << "第三只小猪最重!" << endl;}}else if (pig1 == pig2) {if (pig1 > pig3) {cout << "一,二小猪最重!他们一样重!" << endl;}else if (pig1 == pig3) {cout << "三只小猪一样重!" << endl;}else {cout << "第三只小猪最重!" << endl;}}else {if (pig2 > pig3) {cout << "第二只小猪最重!" << endl;}else if (pig2 == pig3) {cout << "二,三小猪最重!他们一样重!" << endl;}else {cout << "第三只小猪最重!" << endl;}}system("pause");return 0;
}

1.2.三目运算符

  • 可以实现较为简单的条件判断
  • 语法 表达式1 ? 表达式2 : 表达式3
    如果表达式1为真,那执行表达式2并返回结果,反之执行表达式3并返回结果
  • C++中三目运算符返回的是变量本身,是可以继续赋值的
int a = 10;
int b = 20;
int c = 0;c = (a > b ? a : b);  // c=b
(a > b ? a : b) == 100;  // b=100

1.3.switch语句

  • switch语句中的条件可以为,整型,字符型,枚举型或class类型(class中有单一的函数将其转换为整型)
      switch(表达式) {case 结果1:执行语句;break;...default:执行语句;break;}

2.循环结构

2.1.while语句

  • 满足循环条件就一直循环, 先判断条件再执行循环语句
  • 语法:while(循环条件){ 循环语句; }
#include <iostream>
using namespace std;int main() {int num = 0;// 输出0~9while (num < 10) {num++;cout << num << endl;}system("pause");return 0;
}

2.2.do-while语句

  • 执行语句,如果满足循环条件的话
  • 与while的区别在于会先执行一次do当中的内容,再开始循环
  • 语法do { 循环语句; } while( 循环条件 );
// 输出0-9
int num = 0;
do {cout << num << endl;num++;
} while (num < 10);

案例寻找水仙花数:


#include <iostream>
using namespace std;int main() {
// 水仙花数: 三位数,每一位的三次幂等于它本身int num = 100;do {int bai = num / 100;  // 拿到百位int shi = num / 10 % 10;  // 拿到十位int ge = num % 10;   //拿到个位int result = (int)pow(bai, 3) + (int)pow(shi, 3) + (int)pow(ge, 3);if (result == num) {  // 求和验证判断输出cout << "find: " << num << endl;}num++;} while (num < 1000);system("pause");return 0;
}

2.3.for语句

  • 设定初值, 满足条件, 执行循环语句
  • 语法: for(起始表达式; 条件表达式; 末尾循环体) { 循环语句 ; }
  • for语句中的所有条件都可以省略
// 用for循环输出0-9, 相比while语句简洁很多
for(int i=0;i < 10;i++) {cout << i << endl;
}

案例练习:敲桌子,1-100的数,如果含有7或者是7的倍数打印‘敲桌子’其余数字直接输出。

#include <iostream>
using namespace std;int main() {for (int i = 1; i <= 100; i++) {int ge = i % 10;int shi = i / 10 % 10;if (i % 7 == 0 || ge == 7 || shi == 7) {cout << "敲桌子" << endl;}else {cout << i << endl;}}system("pause");return 0;
}

案例练习:打印九九乘法表

#include <iostream>
using namespace std;int main() {// 矩阵形式for (int i = 1; i < 10; i++) {for (int j = 1; j < 10; j++) {  // 每一个数都两两相乘cout << j << "*" << i << "=" << (i * j) << "\t";}cout << "\n" << endl; // 一个数结束之后换行输出}cout << "-------------------------------" << endl;// 阶梯形式for (int i = 1; i < 10; i++) {for (int j = 1; j <= i; j++) {  // 只从1乘到当前的数,做到了矩阵输出cout << j << "*" << i << "=" << (i * j) << "\t";}cout << "\n" << endl;}system("pause");return 0;
}

2.4.break语句

  • 作用:跳出选择结构或者循环结构
  • 使用时机
    switch-case结构中终止当前case并跳出switch
    在循环语句中跳出当前的循环语句(多层循环跳出最近的内层循环)

打印阶梯乘法表的时候,也能通过break语句实现

	// 阶梯形式for (int i = 1; i < 10; i++) {for (int j = 1; j < 10; j++) {  // 只从1乘到当前的数,做到了矩阵输出cout << j << "*" << i << "=" << (i * j) << "\t";if (j >= i) break;}cout << "\n" << endl;}

2.5.continue语句

  • 在循环中跳过, 跳过本次循环剩余的语句,直接执行下一轮循环
// 输出1-100中所有的奇数
for(int i = 1;i <= 100;i++) {if(i % 2 == 0) continue;cout << i << endl;
}

2.6.goto语句

  • 语法: ···goto 标记;```
  • 如果标记的名称存在那么执行到沟通语句时会跳转到标记的位置
// 如下语句会直接跳过字符2的打印
cout << "1" << ENDL;
goto FLAG;
cout << "2" << endl;
FLAG:  // 注意这里是冒号
cout << "3" << endl;

学习笔记与课程计划
B站视频链接


http://www.ppmy.cn/news/1009524.html

相关文章

Grafana集成prometheus(4.Grafana添加预警)

上文已经完成了grafana对prometheus的集成及数据导入&#xff0c;本文主要记录grafana的预警功能&#xff08;以内存为例&#xff09; 添加预警 添加入口&#xff08;2个&#xff09; databorard面板点击edit&#xff0c;下方有个Alert的tab&#xff0c;创建Alert rules依赖…

ROS添加发布者和订阅者机制实现

一. ROS的节点和包 ✨Node&#xff1a; ROS的基本单位&#xff0c;实现某个功能的节点。比如实现超声波传感器就是一个节点&#xff0c;雷达传感器就可以是一个节点 ✨Package&#xff1a; 多个有联系的节点组成的单位&#xff0c;比如你要控制无人机姿态&#xff0c;可能需要…

mysql8查看执行sql历史日志,配置开启sql历史日志general_log

0.本博客sql总结 -- 1.查看 -- 下面两个参数只能是global的&#xff0c;global可以省略。 SHOW global VARIABLES LIKE general_log%; SHOW global VARIABLES LIKE log_output;-- 2.设置 -- global级别 -- SET GLOBAL general_log ON; -- SET GLOBAL log_output TABLE; -…

ruoyi-cloud-notes01

1、Maven中的dependencyManagement Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息&#xff0c;那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找…

C++中实现多线程的三种方式

目录 1 背景2 方法 1 背景 力扣1116题 打印零和奇偶数。 2 方法 方法1&#xff1a;原子操作 class ZeroEvenOdd { private:int n;atomic<int> flag 0; public:ZeroEvenOdd(int n) {this->n n;}// printNumber(x) outputs "x", where x is an integer.…

【Linux】进程信号中的 core dump 标记位

进程信号中的 core dump 标记位 一、什么是core dump二、core dump的使用1、开启core dump2、生成core file文件3、验证进程退出码里面的core dump标志位 三、 core dump的应用 一、什么是core dump 我们知道所有的程序最终运行起来&#xff0c;都会变成进程&#xff0c;进程在…

解决github打不开的方法

解决github打不开的方法 本文参考文章&#xff1a;解决可ping通但无法访问github网站的问题 一、确定域名github.com的ip地址 进入网址 IP/服务器github.com的信息 - 站长工具 (chinaz.com)&#xff0c;查看 ip 地址。 20.205.243.166 github.com二、确定域名github.global.…

CentOS 搭建 Harbor 镜像仓库(图文详解)

本文目录 1. 下载 Harbor 安装包2. 解压3. 修改配置文件4. 安装 Harbor5. 修改 docker 配置6. docker 登录方式7. 访问 Harbor Web 界面8. 创建证书9. 生成证书10. 更新配置11. 网页登录 说明&#xff1a;在搭建 Harbor 镜像仓库之前&#xff0c;虚拟机要先安装 docker 和 dock…

Linux运维工程师面试常用知识点总结

Linux运维工程师面试常用知识点总结 一、Linux基础命令部分1.查看某进程所打开的所有文件2.添加一条静态路由3.打包一个目录下文件,除了该目录下某个文件4.提取本地网卡ip地址5.如何在某个文本的每行前面添加#字符6.centos7系统调优7.查询Linux的默认网关8.查找某个文件9.列出…

基于Azure OpenAI Service 的知识库搭建实验⼿册

1.概要 介绍如何使⽤Azure OpenAI Service 的嵌⼊技术&#xff0c;创建知识库&#xff1b;以及创建必要的资源组和资源&#xff0c;包括 Form Recognizer 资源和 Azure 翻译器资源。在创建问答机器⼈服务时&#xff0c;需要使⽤已部署模型的 Azure OpenAI 资源、已存在的…

文件编辑(vi/vim)

在所有的命令执行前&#xff0c;先按Esc 1、vi的基本概念   基本上vi可以分为三种状态&#xff0c;分别是命令模式&#xff08;command mode&#xff09;、插入模式&#xff08;Insert mode&#xff09;和底行模式&#xff08;last line mode&#xff09;&#xff0c;各模式…

MySQL 的事件调度器

MySQL 的事件调度器可以通过以下方式进行管理&#xff1a; 1】查看事件调度器的状态 SHOW VARIABLES LIKE event_scheduler;2】启用/禁用事件调度器 SET GLOBAL event_scheduler ON;SET GLOBAL event_scheduler OFF; 注意&#xff1a;启用/禁用事件调度器需要具有 SUPE…

linux gcc __attribute__

__attribute__ 1. 函数属性1.1 __attribute__((noreturn))1.2 __attribute__((format))1.3 __attribute__((const)) 2. 变量属性2.1. __attribute__((aligned))2.2. __attribute__((packed)) 3. 类型属性 __attribute__ 是 GCC 编译器提供的一种特殊语法&#xff0c;它可以用于…

MySQL的innoDB存储引擎如何解决幻读的问题?

MySQL的innoDB存储引擎如何解决幻读的问题 基本情况 MySQL有四种事务隔离级别&#xff0c;这四种隔离级别代表当存在多个事务并发冲突时&#xff0c;可能出现的脏读、不可重复读、幻读的问题InnoDB 在 RR 的隔离级别下 &#xff0c;解决了幻读的问题幻读是指在同一个事务中&a…

通俗理解大模型的各大微调方法:从LoRA、QLoRA到P-Tuning V1/V2

前言 PEFT 方法仅微调少量(额外)模型参数&#xff0c;同时冻结预训练 LLM 的大部分参数 第一部分 高效参数微调的发展史 1.1 Google之Adapter Tuning&#xff1a;嵌入在transformer里 原有参数不变 只微调新增的Adapter 谷歌的研究人员于2019年在论文《Parameter-Efficient …

vue中transition动画的使用

1.vue文件 说明&#xff1a;加name属性 <transition name"sort"><div class"sort" v-show"show"><div class"all-sort-list2" click"goSearch"><div class"item bo" v-for"(item1, in…

python推理小游戏bagels

python推理小游戏bagels bagels是一个推理小游戏&#xff0c;你的朋友想到一个随机的、没有重复的3位数字&#xff0c;你尝试去猜测它是什么。每次猜测之后&#xff0c;朋友就会给出3中类型的线索&#xff1a; Bagels: 你猜测的3个数都不在神秘数字中&#xff1b;Pico&#x…

【flink】开启savepoint

先启动一个任务 flink run -c com.yang.flink.CDCJob test-cdc.jar开启savepoint 命令&#xff1a; flink savepoint JobID 文件地址 flink savepoint e929a11d79bdc5e6f140f2cfb92e1335 file:///workspace/flinkSavepoints/backend这样就开启好了 操作中的错误 详细信…

关于VScode解析leveldb的namespace报错

发现 VScode 读取 leveldb 的代码&#xff0c;其中 port 命名空间始终解析不了…然后试了很多 include 方法都没有效果 最终去找其头文件port. 发现是需要进行宏定义…

JVM入门到精通

一、JVM概念 1.1、什么是JVM Java Virtual Machine&#xff1a;Java虚拟机&#xff0c;用来保证Java语言跨平台 Java虚拟机可以看做是一台抽象的计算机&#xff0c;如同真实的计算机那样&#xff0c;它有自己的指令集以及各种运行时内存区域 Java虚拟机与Java语言并没有必然…
最新文章