C++学习 程序控制结构

news2024/11/17 23:50:48

程序控制结构

以某种顺序执行的一系列动作,用于解决某个问题。包括 顺序结构、选择结构、循环结构。

顺序结构

按照顺序正常执行。前几篇文章的代码都是顺序结构的体现。

选择结构

执行满足条件的语句。

if 结构:if (表达式){}  表达式为真则执行,不为真则不执行

if-else 结构: if中表达式为真则执行if表达式后接的{}中内容,不为真则执行else{}中内容

if-elseif-else结构:f中表达式为真则执行if表达式后接的{}中内容,不为真继续向下判断下一个elseif,为真则执行elseif{}中内容,前面的都不满足,执行最后一个else{}中内容。

#include <iostream>
using namespace std;
int main()
{
    // 选择结构 if语句
    // 场景: 定义一个整型表示上班打卡时间,超过9点打卡视为迟到,9点前为未迟到。
    int time = 0;
    cout << "Please enter the clock in time:" << endl;
    cin >> time; //  第一次输入10  第二次输入8
    if (time > 9)   // 如果里面的表达式time > 9 返回真则执行他下面的{}中内容,如果为假则执行else后{}中内容
    {
        cout << "You're late!" << endl; // 第一次输出 You're late!
    }else{
         cout << "You're not late!" << endl; //第二次输出 You're not late!"
    }
    system("pause");
    return 0;
}

 

循环结构

满足循环条件,执行循环语句。

while循环

语法: while(循环条件){循环语句}

循环条件为真就执行循环语句。

#include <iostream>
using namespace std;
int main()
{
    // while 循环输出0-9
    int i = 0;
    while (i < 10)   // 输出9 表达式需要小于10 或者<=9
    {
        cout << i << endl;
        i++; // 进行+1操作然后判断i < 10 程序需要可中止,不能陷入死循环
    }
    system("pause");
}

do...while循环

满足循环条件,执行循环语句。

语法: do{循环语句}while{循环条件};

与while的区别为 do...while会先执行一次循环语句,再判断循环条件。也就是至少执行一次。

#include <iostream>
using namespace std;
int main()
{
    // while 循环输出0-9
    int i = 0;
    do
    {
        cout << i << endl;
        i++; // 进行+1操作然后判断i < 10 程序需要可中止,不能陷入死循环
    }  while (i< 10); // 正常输出0-10
    // 如果上面的条件换成while (i > 10); 那么显然i=0不满足,但是do...while是先执行一次do中内容 所以控制台还是会输出 0
    system("pause");
}

来个案例,体会一下  ,如果上面你没懂,你看看下面就明白了,初学者一定要多敲多练。

#include <iostream>
using namespace std;
int main()
{
    int i = 0;
    do
    {
        cout << i << endl;
        i++; 
    }  while (i); 
    system("pause");
}

 案例:水仙花

这个案例应该大学科班的都做过,大家可以看一下。

#include <iostream>
using namespace std;
int main()
{
    // 什么是水仙花数?
    // 水仙花数是指一个 n 位数(n ≥ 3),它的每个位上的数字的 n 次幂之和等于它本身。例如,153 是一个水仙花数,因为 1^3 + 5^3 + 3^3 = 153。
    // 换句话说,一个三位数的水仙花数是指满足以下条件的数字:
    // 如果将该数字的个位、十位和百位分别记为 a、b 和 c,则满足 a^3 + b^3 + c^3 = abc。
    int num = 100; // 100-999 水仙花数
    do
    {
        int j = 0;         // 个位数字
        int k = 0;         // 十位数字
        int l = 0;         // 百位数字
        j = num % 10;      // 获取个位数字
        k = num / 10 % 10; // 获取十位数字
        l = num / 100;     // 获取百位数字
        // 找水仙花数
        if (num == j * j * j + k * k * k + l * l * l)   // 这里判断是== 切记
        {
            cout <<num<<endl;
        }
        num++;
    } while (num < 1000);

    system("pause");
}

 

for循环语句

满足循环条件,执行循环语句。

语法:for(起始表达式;条件表达式;末尾循环体){循环语句;}

#include <iostream>
using namespace std;
int main()
{
    // for循环 语法:for(起始表达式;条件表达式;末尾循环体){循环语句;}
    // 从0打印到数字9
    for (int i = 0; i < 10; i++) // 执行顺序 ①int i= 0;②i<10 ③ cout << i << endl; ④i++ 然后继续循环 ②i<10 ③ cout << i << endl; ④i++直到 ②i<10已经不满足就退出了循环
    {
        cout << i << endl;
    }
    system("pause");
}

嵌套循环

循环体内再嵌套一层循环。

案例:九九乘法表 

#include <iostream>
using namespace std;
int main()
// 九九乘法表 列数*行数 = 计算结果
{
    for (int i = 1; i <= 9; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            cout << j << " * " << i << " = " << j * i<<"\t"; // \t转义字符 增加个缩进,更加美观
        }
        cout << endl;
    }

    system("pause");
}

三目运算符

通过运算符进行简单判断。

语法:表达式1?表达式2:表达式3。

表达式1为真则执行表达式2,表达式1不为真则执行表达式3。

#include <iostream>
using namespace std;
int main()
{
    // 需求 比较a、b、c中最大的数 如果这个你可以看懂 你的三目运算应该问题不大了 
    int a = 5;
    int b = 10;
    int c = 17;
    // 拆解
    // 1.首先判断(a>b)?a:b 找出最大的值
    // 由于我们一条写完 就直接拿他和c比较,如果c大输出c,否则输出(a>b)?a:b ->a、b中的更大的值。
    cout<< (((a>b)?a:b)>c?((a>b)?a:b):c);   
    system("pause");
    return 0;
}

switch语句

执行多条件分支语句。

语法:

switch(表达式)

{

case 结果1:  执行语句;break;

case 结果2:  执行语句;break;

...

default: 执行语句;break;

}

#include <iostream>
using namespace std;
int main()
{
    // 给电影评分 10~9 非常好; 8~7 好 ;6~5 一般; <5 差;
    int score=0;
    // 请输入评价分
     cout<<"Please enter the score for the evaluation"<<endl;
    cin>>score;
    switch (score)
    {
    case 10:
    case 9:
       cout<<"very good"<<endl;
        break;
    case 8:
    case 7:
       cout<<"good"<<endl;
        break;   
    case 6:
    case 5:
       cout<<"normal"<<endl;
        break;
    default:
    cout<<"bad"<<endl;
    break;
    }
    system("pause");
    return 0;
}

 swiitch语句中表达式类型是整型或字符型

case中没有break,程序会继续向下执行,不终止。

跳转语句

break语句

跳出选择结构或者循环结构。 

什么时候使用?

1. switch语句中,作用为终止case并跳出switch语句。

2. 循环语句中,跳出当前的循环语句。

3. 嵌套循环语句中,跳出最近的内层循环语句。

#include <iostream>
using namespace std;
int main()
// break

// 1. switch语句中,作用为终止case并跳出switch语句。
{
    // // 给电影评分 10~9 非常好; 8~7 好 ;6~5 一般; <5 差;
    // int score=0;
    // // 请输入评价分
    //  cout<<"Please enter the score for the evaluation"<<endl;
    // cin>>score;
    // switch (score)
    // {
    // case 10:
    // case 9:
    //    cout<<"very good"<<endl;
    //     break;
    // case 8:
    // case 7:
    //    cout<<"good"<<endl;
    //     break;
    // case 6:
    // case 5:
    //    cout<<"normal"<<endl;
    //     break;
    // default:
    // cout<<"bad"<<endl;
    // break;
    // }
    //----------------------------------------------------------------------------//

    // 2. 循环语句中,跳出当前的循环语句。
    // // 输入数字,输入为5时退出,最多输入100次

    // for (int i = 0; i < 100; i++)
    // {
    //     cout << "Enter a num" << endl;
    //     cin >> i;
    //     if (i == 5)
    //     {
    //         cout << "ok" << endl;
    //         break;
    //     }
    // }
    //----------------------------------------------------------------------------//

    // 3. 嵌套循环语句中,跳出最近的内层循环语句。
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            if (j >= 5)
            {
                break; // 正常情况下我们是画了一个10行10列的矩形* 现在加了判断 内层次j>=5就会跳出内层for循环开始i=1的内层循环遍历。
                       // 最终结果就会打印出一个5列10行的矩形*
            }

            cout << "*";
        }
        cout << endl;
    }

    system("pause");
    return 0;
}

其他的可以把代码注释放开去跑,最好是自己手敲。

continue

continue 跳出本次循环

break与continue的区别:

  • break 用于完全终止循环,跳出循环体。
  • continue 用于跳过当前迭代的剩余代码,开始下一次迭代。
#include <iostream>
using namespace std;
int main()
{
    // continue
    //  // 打印 1 到 10 之间的奇数
    for (int i = 0; i <= 10; i++)
    {
        if (i % 2 == 0) // 为偶数直接跳过本次for 开始下一次循环
        {
            continue;
        }
        cout << i << endl;
    }
    system("pause");
    return 0;
}

 

goto

无条件跳转语句。

语法:goto 标记;

如果标记名称存在,执行goto语句会跳转到标记的位置。

#include <iostream>
using namespace std;
int main()
{
// goto
cout<<"1"<<endl;
goto flag; // 跳转到标记位置
cout<<"2"<<endl;
flag:    // 标记在此位置
cout<<"3"<<endl;
cout<<"4"<<endl;
    system("pause");
    return 0;
}

 注意:在程序中尽量不要使用goto语句,以免造成程序流程的混乱。

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

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

相关文章

Linux历史及环境搭建(VMware搭建CentOS7环境)

Linux历史及环境搭建 1.Linux历史1.1 UNIX发展的历史1.2 Linux发展历史1.2.1 开源1.2.2 官网1.2.3 发行版本 2.VMware配置CentOS7环境2.1 CentOS下载2.2 配置环境2.3 切换国内阿里源2.4 无图形化界面开机 结语 1.Linux历史 在这里简要介绍Linux的发展史。要说 Linux&#xff0…

机器学习李宏毅学习笔记36

文章目录 前言Meta learning应用总结 前言 Meta learning&#xff08;二&#xff09;应用方向 Meta learning应用 回顾gradient descen Θ0&#xff08;initial的参数&#xff09;是可以训练的&#xff0c;一个好的初始化参数和普通的是有很大差距的。可以通过一些训练的任务…

Python通过私信消息提取博主的赠书活动地址

文章目录 前言背景设计开发1.引入模块2.获取私信内容3.根据文本提取url的方法4.获取包含‘书’的url5.程序入口 效果总结最后 前言 博主空空star主页空空star的主页 大家好&#xff0c;我是空空star&#xff0c;本篇给大家分享一下《通过私信消息提取博主的赠书活动地址》。 背…

通用策略04丨ORB魔改框架+自适应动量过滤模板

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 大家好&#xff0c;今天我们分享2023年度第4期通用策略——ORB魔改框架自适应动量过滤模板。 本期策略是2023年通用系列第4篇。本期主要内容有对ORB原版的逻辑魔改&#xff0c;其次我们将跨日周期均线过…

现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?

停机迁移方案 最 low 的方案&#xff0c;就是很简单&#xff0c;大家伙儿凌晨 12 点开始运维&#xff0c;网站或者 app 挂 个公告&#xff0c;说 0 点到早上 6 点进行运维&#xff0c;无法访问。 接着到 0 点停机&#xff0c;系统停掉&#xff0c;没有流量写入了&#xff0c;…

设计一个高流量高并发的系统需要关注哪些点

1、设计原则 1.1、系统设计原则 在设计一个系统之前&#xff0c;我们先要有一个统一且清晰的认知&#xff1a;不要想着一下就能设计出完美的系统&#xff0c;好的系统是迭代出来的。不要复杂化&#xff0c;要先解决核心问题。但是要有先行的规划&#xff0c;对现有的问题有方…

字符与代表数据的转化

目的 在与设备交互当中&#xff0c;大都以十六进制的数进行交互。 而显示给用户时&#xff0c;是以字符的形式显示。 这中间就需要字符与其所代表的数值的转化&#xff0c;比如&#xff1a; ‘0F’---->0x0F 这怎么实现呢&#xff0c;一个是字符&#xff0c;另一个是数字&a…

Apache seatunnel集群部署

跳转到安装目录 cd /opt/soft/seatunnel 1.设置环境变量 export SEATUNNEL_HOME/opt/soft/seatunnel export PATH$PATH:$SEATUNNEL_HOME/bin 启动服务端 ./bin/seatunnel-cluster.sh -d 启动客户端 ./bin/seatunnel.sh --config ./config/kafka2gbase_udf.conf 这样就启…

Vue3 数字滚动插件 vue-countup-v3

文章目录 介绍效果安装属性事件配置项完整样例 介绍 vue-countup-v3 插件是一个基于 Vue3 的数字动画插件&#xff0c;用于在网站或应用程序中创建带有数字动画效果的计数器。通过该插件&#xff0c;我们可以轻松地实现数字的递增或递减动画&#xff0c;并自定义其样式和动画效…

软件测试职业发展的7个阶段,哪个都吃香!

首先谈谈我在软件测试行业的亲身经历&#xff1a;我的一位同事曾经很认真地问过我一个问题&#xff0c;他说他现在从事软件测试工作已经4年了&#xff0c;但是他不知道现在的工作和自己在工作3年时有什么不同&#xff0c;他想旁观者清&#xff0c;也许我能回答他的问题。此外他…

手写vue-diff算法(一)

Vue初始化流程 1.Vue流程图 Vue流程图&#xff1a; Vue的初始化流程&#xff0c;默认会创建一个Vue实例&#xff0c;执行初始化、挂载、模板编译操作&#xff0c;模板被编译成为render函数&#xff1b;在render函数初始化时会执行取值操作&#xff0c;从而进入getter方法对当…

【科研入门】会议、期刊、出版社、文献数据库、引文数据库、SCI分区、影响因子等基础科研必备知识

大家好&#xff0c;我是洲洲&#xff0c;欢迎关注&#xff0c;一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我&#xff01; 本文目录 一、会议与期刊二、如何辨别是否…

【UE5 Cesium】07-Cesium for Unreal 从一个地点飞行到另一个地点(下)

UE版本&#xff1a;5.1 介绍 本文以在基督城&#xff08;新西兰&#xff09;和悉尼&#xff08;澳大利亚&#xff09;这两个城市间为例&#xff0c;在上一篇文章&#xff08;【UE5 Cesium】06-Cesium for Unreal 从一个地点飞行到另一个地点&#xff08;上&#xff09;&#…

vant-weapp源码解析---Tab标签页

这个标签栏&#xff0c;属于一个很常见的组件&#xff0c;一般我不用这个组件&#xff0c;自己手写一个scroll-view以及样式&#xff0c;更加轻便。但是我写的最简单的标签页没有滚动效果&#xff0c;以及选中标签动画效果。因此根据标签栏滚动学习下&#xff0c;并且自己手写一…

动态规划的入门

https://www.bilibili.com/video/BV13Q4y197Wg/ 动态规划解题步骤 —— carl 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由…

Postman 最被低估的功能,自动化接口测试效率简直无敌!

目录 该篇文章针对已经掌握 Postman 基本用法的读者&#xff0c;即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求的操作。 接口结果判断 功能区 脚本相关 代码模板 集合(批量)测试 批量执行 变化的参数数据 请求依赖问题 接口执行顺序 数据传递 解决依…

系统出错。发生系统错误 1067。进程意外终止。

问题描述 使用管理员cmd&#xff0c;任务管理器均无法启动mysql。 报错提示信息&#xff1a;系统出错。发生系统错误 1067。进程意外终止。 错误排查 1.检查3306端口是否被占用 在cmd输入netstat -aon|findstr 3306&#xff0c;结果如下&#xff1a; 如果你发现是端口被占用…

OpenAI 又赢麻了谷歌 DeepMind 创始人刚称 Gemini 能碾压 GPT-4

整理 | 褚杏娟&#xff0c;核子可乐 谷歌在上个月的开发者大会上公布了一系列 AI 新项目&#xff0c;当时首次亮相的 Gemini 曾受到不少嘲讽。但近日&#xff0c;DeepMind 联合创始人兼 CEO Demis Hassabis 自曝&#xff0c;工程师们正在使用 AlphaGo 的技术来开发 Gemini&…

Java框架之spring 的 AOP 和 IOC

写在前面 本文一起看下spring aop 和 IOC相关的内容。 1&#xff1a;spring bean核心原理 1.1&#xff1a;spring bean的生命周期 spring bean生命周期&#xff0c;参考下图&#xff1a; 我们来一步步的看下。 1 其中1构造函数就是执行类的构造函数完成对象的创建&#x…

【Java】Java核心 79:Git 教程(2)Git 安装

文章目录 目标内容总结 上一篇我们讲到&#xff1a;Git是一个分布式版本控制系统&#xff0c;常用于协同开发和版本管理的工具。它可以跟踪文件的修改、记录历史版本&#xff0c;并支持多人协同工作。通过Git&#xff0c;你可以轻松地创建和切换分支、合并代码、回滚修改等操作…