【C语言初阶】循环语句

在这里插入图片描述
在这里插入图片描述

文章目录

  • 💐专栏导读
  • 💐文章导读
  • 🌷什么是循环
  • 🌷while循环
  • 🌷do while循环
  • 🌷for循环
  • 🌷循环结构中的break与continue
    • 🌺break
    • 🌺continue
  • 🌷goto语句

💐专栏导读

🌸作者简介:花想云,在读本科生一枚,致力于 C/C++、Linux 学习。

🌸专栏简介:本文收录于 C语言初阶专栏,本专栏主要内容为C语言的初阶知识的全套讲解,包含初识C语言、函数、数组、分支与循环、操作符、指针初阶的讲解。

🌸相关专栏推荐:C语言进阶系列数据结构与算法

💐文章导读

本篇文章主要内容为学习C语言中的循环结构,并掌握whiledo whilefor三种形式的循环,并认识关键字breakcontinue以及goto语句。


🌷什么是循环

什么是循环?简单定义,循环就是不断地重复做一件事情。在一段程序中,同样也能实现循环。C语言为我们提供了三个关键字来实现三种不同形式的循环:

  • while
  • for
  • do while

虽然有三种不同形式的循环,但它们也仅仅是长的样子不同罢了。不管是哪一种循环方式,都是由两个基本结构组成的:

  • 循环的内容
  • 进入循环的条件

首先来看看while循环。

🌷while循环

while的语法结构很简单:

while(表达式)
{
	...//循环语句
}
  • 表达式:进入循环的条件若表达式的结果为真,则执行循环语句;若为假,则不执行
  • 循环语句: 循环的内容

举个例子,若是我们需要在屏幕上打印 0—9 的数字,只需这样写:

int main()
{
    int i = 0;
    while (i < 10)
    {
        printf("%d ", i);
        i=i+1;
    }
    return 0;
}

运行结果
这段代码的运行逻辑是:

  • 判断表达式是否为真,若为真,则进入循环,执行循环语句
  • 执行完循环语句,再次判断表达式是否为真,若为真,就继续执行循环语句,如此往复

再来看看while循环的兄弟——do while。

🌷do while循环

do while循环的语法结构是这样的:

do
{
	//...(循环语句)
}while(表达式);
  • 表达式:进入循环的条件若表达式的结果为真,则执行循环语句;若为假,则不执行
  • 循环语句: 循环的内容

do while循环与while循环非常相似,只有一点不同:

  • while先判断表达式,再执行循环语句
  • do while先执行循环语句,再判断表达式

若我们还想在屏幕上打印 0—9 ,则需要这样写:

int main()
{
    int i = 0;
    do
    {
        printf("%d ", i);
        i = i + 1;
    } while (i < 10);
    return 0;
}

运行结果

再来认识一下for循环。

🌷for循环

for循环的语法结构:

for(表达式1; 表达式2; 表达式3)
{
	...//循环语句;
}
  • 表达式1:用于初始化循环变量
  • 表达式2:用于判断进入循环的条件是否为真
  • 表达式3:用于控制循环遍历

什么是循环变量

  • 用于控制循环的变量,例如上面两个例子中的变量i;

for循环所说与while循环长相差异有点大。但是对比一下就会发现相似的地方:

  • while循环的循环变量定义在{}的外面,for循环可以定义在()外面,也可以定义在()里面。
  • 1,2两种写法其实并没有本质区别,只不过第一种写法是C99标准才支持的。
1.定义在里面(C99支持)
for (int i = 0; i < 10; i++);
2.定义在外面
int i = 0;
for (i = 0; i < 10; i++);
  • while循环的判断是否进入循环的表达式在()中,for循环的判断为表达式2
  • while循环控制循环变量的语句{}内,for循环中为表达式3

利用for循环在屏幕上打印 0—9 的数字,应该这样写:

for (int i = 0; i < 10; i++)
{
    printf("%d ", i);
}

运行结果

🌷循环结构中的break与continue

为了好的控制循环,C语言还为我们提供了两个关键字breakcontinue,以适应各种复杂的情况。

🌺break

这里的break与上一章分支语句中的switch语句中的break作用相似。

break的作用:

  • 在循环结构中当程序执行到break时,就立即停止循环并彻底结束循环

用法示例:

在打印0—9的过程中,加入break语句,看看是什么效果:

int main()
{
    int i = 0;
    while (i<10)
    {
        if (i == 5)
        {
            break;
        }

        printf("%d ", i);
        i = i + 1;
    }
    return 0;
}

运行结果
这段程序的运行逻辑是:

  • 在循环的过程中,当 i 的值为5时。满足进入if的条件,执行break,循环就不会在往下执行
  • 注意,这时i的值是5.屏幕上打印1—4

break在三种循环中的作用都是相同的,这里就不再一一举例。

🌺continue

continue的作用:

  • 在循环结构中,当程序执行到continue语句时,不再执行本次循环,直接进入下一次循环。注意,不是彻底结束循环,而仅仅是结束本次循环

用法示例:

打印 0—9 的数字时,不想打印5:

int main()
{
    int i = 0;
    for (int i = 0; i < 10; i++)
    {
        if (i == 5)
        {
            continue;
        }
        printf("%d ", i);
    }

    return 0;
}

在这里插入图片描述

🌷goto语句

C语言中提供了可以随意滥用的 goto 语句和标记跳转的标号。从理论上 goto 语句是没有必要的,实践中没有 goto 语句也可以很容易的写出代码。

但是某些场合下 goto 语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

  • 例如,一次跳出两层或多层循环

多层循环这种情况使用 break 是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto 语言真正适合的场景如下:

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
     ...// 处理错误情况

如上,程序中不管嵌套了多少层循环,只要遇到goto语句,就会跳到goto语句标记(例如error)的地方并继续向下执行。
在这里插入图片描述

点击下方个人名片,可添加博主的个人QQ,交流会更方便哦~
*** ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓***

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5G将在五方面彻底改变制造业

想象一下这样一个未来&#xff0c;智能机器人通过在工厂车间重新配置自己&#xff0c;从多条生产线上组装产品。安全无人机处理着从监视入侵者到确认员工停车等繁琐的任务。自动驾驶汽车不仅可以在建筑物之间运输零部件&#xff0c;还可以在全国各地运输。工厂检查可以在千里之…

java基于SSH框架的超市管理系统mvc

目 录 1、引言 4 1.1 研究现状 4 1.2 主要研究的目的及内容 5 1.3 研究方法及设计思路 5 1.3.1 研究方法 5 1.3.2 设计思路 6 2、应用需求分析与可行性分析 6 2.1 应用需求分析 7 2.2 运行需求分析 8 2.3 其他需求分析 8 2.4 可行性分析 8 2.…

SpringBoot实战(十三)集成 Admin

目录一、简介二、搭建 springboot-admin 管理服务1.Maven 依赖2.application.yml3.添加 EnableAdminServer4.启动服务&#xff0c;查看页面三、搭建 springboot-admin-client 客户端服务1.Maven 依赖2.application.yml3.启动服务&#xff0c;查看页面四、搭配 Eureka 使用1.搭建…

二叉树的顺序存储与手撕数据结构—堆

TIPS树的话是一种非线性的数据结构&#xff0c;他实际上就是具有一定层次关系的数据集合&#xff0c;并且在树形结构当中&#xff0c;子树之间不能有任何的交集&#xff0c;否则就不是树形结构。然后对于树而言的话&#xff0c;在实际应用当中并不是特别多&#xff0c;在实际应…

Linux防火墙——SNAT、DNAT

目录 NAT 一、SNAT策略及作用 1、概述 SNAT应用环境 SNAT原理 SNAT转换前提条件 1、临时打开 2、永久打开 3、SNAT转换1&#xff1a;固定的公网IP地址 4、SNAT转换2&#xff1a;非固定的公网IP地址&#xff08;共享动态IP地址&#xff09; 二、SNAT实验 配置web服务…

力扣-银行账户概要 II

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1587. 银行账户概要 II二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果前言 …

css总结12(盒子模型外篇)

前言 主要补充一下和盒子模型相关的一些样式属性&#xff1a;box-sizing、resize和outline box-sizing 可选值 ## (1) content-box 默认值&#xff0c;内容盒子&#xff0c;盒子的大小会随着内容(盒子模型的content)尺寸的变化而变化 ## (2) border-box边框盒子&#xff0c;与…

leetcode究极刷题笔记(16~20)

&#xff08;16&#xff09;最接近的三数之和&#xff08;中等&#xff09; 实现思路&#xff1a; 本题与前文讲的三数之和有相同之处&#xff0c;但是本题求的是最接近的三数之和&#xff0c;所以我们这里可以使用键值对来映射对应的差值与值的关系&#xff0c;从而达到目的。…

系统集成路由器OSPF动态、综合路由配置

实验任务&#xff1a;动态路由协议RIP、OSPF协议的内容和特点动态路由RIP、OSPF实验&#xff0c;建立拓扑pc1>>R1>>R2>>R3>>pc2&#xff0c;使pc1与pc2能相互通信&#xff0c;并配置PC端静默接口。熟悉配置vlan间路由技术&#xff1a;多层交换机虚拟接…

JavaScript到底如何存储数据?

1.var的迷幻操作 普遍的观点&#xff1a;JavaScript中的基本数据类型是保存在栈空间&#xff0c;而引用数据类型则是保存在堆空间里, 是否正确&#xff1f; 浏览器环境下JavaScript变量类型的运行实践结果: var a 10;console.log(a);console.log(window.a); console.log(wind…

【云原生】Linux进程控制(进程程序替换)

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Good judgment comes from experience, and a lot of that comes from bad jud…

keepalived配置使用

keepalived安装tar -zxvf ***yum install -y gcc gcc-c wget popt-devel openssl openssl-devel yum install -y libnl libnl-devel libnl3 libnl3-devel yum install -y libnfnetlink-devel ./configure --sysconf/etc make make installmaster1 编辑keepalived的配置文件keep…

【C++】科普:C++中的浮点数怎么在计算机中表示?

这里我们以8.25这个数为例说明计算机时如何存取float类型的数据的&#xff1a; float a 8.25;引言 1. 所占位数 首先&#xff0c;明确一个概念&#xff0c;float类型的数据在常规计算机中通常占4个字节&#xff0c;也就是32位。其内存分布如图&#xff1a; 位字段说明所占位…

【pytorch源码剖析系列】优化器

写在前言&#xff1a;pyotrch优化器从源码的角度带你理解优化器的由来&#xff0c;实现&#xff0c;作用。pytorch的优化器&#xff1a;管理并更新模型中可学习参数的值&#xff0c;使得模型输出更接近真是标签。导数&#xff1a;函数在指定坐标轴上的变化率方向导数&#xff1…

ChatGPT来了你慌了吗?

文章目录一、ChatGPT是什么&#xff1f;一、ChatGPT到底多强大&#xff1f;三、各平台集成了ChatGPT插件&#xff1a;四、ChatGPT能否取代程序员&#xff1f;一、ChatGPT是什么&#xff1f; ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&…

快速上手vue elementUI好看的登录界面

这是一个非常非常适合新手的vue登录界面&#xff0c;总体来说美观大气&#xff0c;axios那部分没有发&#xff0c;有需要的大家可以自己进行二次开发&#xff0c;继续编写。 用到了技术栈有 vue/cli 5.07 element-ui 2.15.9 适合入门级新手&#xff0c;展示下页面 emmm验证码…

【Spring Cloud Alibaba】2.服务注册与发现(Nacos安装)

文章目录环境要求简介安装Nacos源码安装Docker安装数据库配置访问服务我们要搭建一个Spring Cloud Alibaba项目就绕不开Nacos&#xff0c;阿里巴巴提供的Nacos组件&#xff0c;可以提供服务注册与发现和分布式配置服务&#xff0c;拥有着淘宝双十一十几年的流量经验&#xff0c…

关于docker mysql 请求速度慢的问题

一&#xff0c;问题描述&#xff1a; 请求mysql 数据库&#xff0c;请求速度很慢&#xff0c;需要六七秒&#xff0c;数据量也不大。使用的是docker 容器启动的mysql 二&#xff0c;问题原因&#xff1a; 网上说的是因为MySQL的dns导致&#xff0c;我实测也是有效果的&#xf…

Linux:主机USB设备驱动简析

文章目录1. 前言2. 分析背景3. USB 总线硬件拓扑4. USB 协议栈概览4.1 Linux USB 子系统概览4.2 USB外设(如U盘)固件基础5. Linux USB 子系统初始化6. Linux USB 主机控制器(HCD) 驱动6.1 USB 主机控制器驱动初始化6.2 USB 主机控制器设备对象注册和驱动加载7. Linux USB 设备驱…

【亲测搭建成功】模拟无网络情况下安装K8S集群和相关组件

目录标题 前言准备工作:k8s集群:先构思网络拓扑图划分网络资源服务器开始搭建服务器操作系统初始化1.关闭防火墙2. 关闭selinux3. 修改网卡配置5.系统模块配置nacos 高可用mysql双主+双从rockemq 集群nginx高可用(双主)Redis 双主、双从minio分布式文件存储前言 最近项目上…