C语言中的流程控制语句
一.流程控制语句的分类:
1.顺序结构
概念:从上往下依次执行,也是程序默认的执行顺序
2.分支结构
概念:程序在执行的过程中出现了岔路(我们只能选择一条支线进行执行)
(1).if语句:
①:使用场景:在if语句内的代码只有在满足if内的条件之后才能执行
②:需要的能力:利用if语句对数据进行判断从而执行不同的代码
③:格式:
if (关系表达式) {语句体;
}
④:举例:
#include<stdio.h>
int main() {int a = 10;int b = 20;if (a > b) {printf("a>b");} //很显然这段程序最后的结果是什么都不会输出,因为10不大于20
}
注意:
①:在c语言中,如果判断的结果是一个数字,非0表示条件成立,0则表示条件不成立
②:如果大括号里面的语句体只有一行,那么大括号可以省略不写,如下:
#include<stdio.h>
int main() {int a = 10;int b = 20;if (a > b)printf("a>b");//很显然这段程序最后的结果是什么都不会输出,因为10不大于20
}
(2).if,else结构
在这种结构中,如果满足了if中的条件,那么就执行if中的语句,如果不满足if中的条件,那么就执行else中的语句
①:举例:
#include<stdio.h>
int main() {int a = 10;int b = 20;if (a > b)printf("a>b");else printf("b>a");//在没有写else语句时什么都不会输出,在写了else语句之后很明显会执行else中的语句,输出b>a
}
(3).if,else if,else格式
①:应用场景:需要用到多条件判断时
②:举例:
#include<stdio.h>
int main() {int score = 100;//其实聪明的你已经发现了,这段代码是有问题的,只要score小于60就为D,负数当然也包括在内,只要score不满足其他的三个条件就为A,但是没有限制数据的范围(只要大于等于90),在实际的开发中我们要尽量避免出现这样的情况 if (score < 60)printf("D");else if (score >= 60 && score < 80)printf("C");else if (score >= 80 && score < 90)printf("B");elseprintf("A");
}
在这段代码中我们需要注意的是:
①:从上往下依次进行判断
②:只要有一个判断成立那么就执行对应的语句体
③:如果所有的判断都不成立,那么就执行else的语句体
(4).switch语句
①:作用:把所有的选择一一列举出来,根据不同的条件任选其一
②:格式:
switch(表达式) {case 值1:语句体1;break;case 值2:语句体2;break;...default:语句体n;break;
}
③:执行流程:
首先计算表达式的值
依次和case后面的值进行比较,如果有对应的值,那么就会执行相应的语句,在执行的过程中,遇到break就会结束
如果所有的case后面的值和表达式的值都不匹配,那么就会执行default里面的语句体,然后结束整个switch语句
④:举例:
#include<stdio.h>
int main() {int week = 7;switch(week) {case 1:printf("1");break;case 2:printf("2");break;case 3:printf("3");break;case 4:printf("4");break;case 5:printf("5");break;case 6:printf("6");break;case 7:printf("7");break;default:printf("default");break;}
}
⑤:注意事项:
表达式的计算结果只能是字符或整数
case的值只能是字符或整数的字面量,不能是变量
case的值不允许重复
break表示中断,结束的意思,一旦执行了break语句就会直接结束switch语句
default是在所有情况都不匹配的时候才执行的内容
⑥:对比switch和if的使用场景:
switch一般适用于有限个case进行匹配的时候
if一般是对一个范围进行判断的时候使用
⑦:break的作用:
如果在执行的过程中遇到了break那么就会直接结束整个switch语句
但是如果没有遇到break,那么就会继续执行下面的case中的代码
直到遇到break,或者把整个switch语句中的代码都执行了才会结束
因此break都是和case连用的,如果不连用就会出现一直执行到完成整个switch语句才会停止的错误
3.循环结构
概念:重复地执行某件事
但是我们也不能设置一个无限循环的代码,那样除了浪费电脑的性能以外没有任何的意义,因此我们需要设置三个部分,分别为:开始条件(初始化语句),结束条件(条件判断语句),控制开关(条件控制语句)
(1).for循环:
①:结构:
for (初始化语句; 条件判断语句; 条件控制语句) {循环体;
}
②:举例:
#include<stdio.h>
int main() {//使用for循环语句打印了100遍我爱学习 for (int i = 1; i <= 100; i++) {printf("我爱学习\n");}
}
③:for循环的执行流程:
执行初始化语句
执行条件判断语句,如果条件成立,那么执行循环体语句,不成立则结束循环
执行条件控制语句
回到第二步继续执行条件判断语句
(2).while循环
①:结构:
while(条件判断语句) {循环体语句;条件控制语句;
}
②:while循环的执行流程:
首先进行条件判断,若满足条件,则依次执行循环体语句和条件控制语句一直到不满足条件为止
③:举例:
#include<stdio.h>
int main() {//使用while循环语句打印了100遍我爱学习 int i = 1;while(i <= 100) {printf("我爱学习\n");i++;}
}
(3).for循环,while循环对比:
相同点:
①:运行规则都是一样的
不同点:
①:for循环中控制循环的变量因为归属于for循环的语法结构中,因此在for循环结束后就不能再次被访问到
②:在while循环中控制循环的变量对于while循环来说不归属于其语法结构中,在while循环结束后,该变量还是可以继续使用
③:for循环中知道循环次数或者循环的范围
④:while循环中不知道循环的次数和范围,只知道循环的结束条件
(4).do...while循环
①:格式:
初始化语句;
do {循环体语句;条件控制语句;
} while(条件判断语句);
②:do...while循环的执行流程:
先执行后判断,循环体会至少执行一次,之后的流程就和while循环相同了
4.无限循环
正如它的名字,在这样的循环中,循环是永远停不下来的
三种循环都可以达成这样的效果:
for ( ; ; ) {循环体;
}
while(1) {循环体;
}
do {循环体;
} while (1);
那么这样的循环有没有实际的意义呢?
实际上,这样的循环是可以配合判断完成我们的需求的
举例:
#include<stdio.h>
int main() {int ans = 0;int plus = 16;int add = 8;while (1) {//如果ans+add的值和plus相等,那么就跳出这个无限循环 if (ans + add == plus)break;ans++;}printf("%d", ans);
}
5.跳转控制语句
(1).作用:在循环的过程中跳到其他语句上执行
(2).break语句:
break语句不能单独书写,只能写在switch或者循环中,表示结束,跳出的意思
(3).continue语句:
表示结束本次循环,继续下次循环
举例:
#include<stdio.h>
int main() {for (int i = 0; i <= 5; i++) {//使用continue语句跳过了i等于3的情况 if (i == 3) continue;printf("%d", i);}
}
6.循环嵌套
循环嵌套正如字面上的意思,我们可以在循环中嵌套循环,做到双循环,三循环,乃至更多的情况,在这里我只用一个九九乘法表的打印作为举例:
#include<stdio.h>
int main() {for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {printf("%d * %d = %d ", j, i, j * i);}//输出换行符 printf("\n");}
}
7.循环嵌套跳出的问题:
(1).break只会跳出当前自己所在的循环,也就是说,如果我们写了一个双重循环,把最上级的循环称为父循环,下一级的循环称为子循环,那么如果我们在子循环中写了一个break语句会怎样?
是的,只是会跳出子循环罢了,对父循环没有影响,我们使用break跳出循环时只需要记住break只是会跳出自己当前所在的循环即可
(2).goto语句:
goto语句一般都是结合标号使用的,可以跳到代码中的任何地方,一般我们只用于跳出循环嵌套
举例:
#include<stdio.h>
int main() {int i = 1;while (1) {printf("今日无事,好好学习\n");i++;if (i == 100) goto position;}
position:printf("休息一下,玩会儿游戏");
}相关文章:
C语言中的流程控制语句
一.流程控制语句的分类: 1.顺序结构 概念:从上往下依次执行,也是程序默认的执行顺序 2.分支结构 概念:程序在执行的过程中出现了岔路(我们只能选择一条支线进行执行) (1).if语句…...
linux常用基本指令汇总
文章目录 01. ls指令02. pwd指令03. cd指令04. touch指令05. mkdir指令06. rmdir指令07. rm指令08. man指令09. cp指令10. mv指令11. cat指令11. more指令12. less指令13. head指令14. tail指令15. time指令16. cal指令17. find指令18. grep指令19. zip/unzip指令20.tar指令21.…...
Python 与 JavaScript 交互及 Web 逆向分析全解析
一、引言 在当今数字化时代,软件开发的复杂性和多样性不断增加,不同编程语言之间的交互与协作变得愈发重要。Python 凭借其简洁易读的语法、丰富的库和强大的数据处理能力,在数据科学、自动化脚本编写等领域占据着重要地位。而 JavaScript 作为前端开发的核心语言,以其在网…...
Docker Desktop 安装与使用详解
目录 1. 前言2. Docker Desktop 安装2.1 下载及安装2.2 登录 Docker 账号2.3 进入 Docker Desktop 主界面 3. Docker 版本查看与环境检查3.1 查看 Docker Desktop 支持的 Docker 和 Kubernetes 版本3.2 检查 Docker 版本 4. Docker Hub 和常用镜像管理方式4.1 使用 Docker Hub4…...
鬼泣:移动系统3
能帮到你的话,就给个赞吧 😘 文章目录 run/Sprint混合空间输入:(leanAngle, maxWalkSpeed) 按布尔混合和选择的区别:自动生成过渡动画dead blending:惯性化节点疑问run/Sprint混合空间为什么速度为0时也设置奔跑动画为…...
解决 HTTP 请求中的编码问题:从乱码到正确传输
文章目录 解决 HTTP 请求中的编码问题:从乱码到正确传输1. **问题背景**2. **乱码问题的原因**2.1 **客户端编码问题**2.2 **请求头缺失**2.3 **服务器编码问题** 3. **解决方案**3.1 **明确指定请求体编码**3.2 **确保请求头正确**3.3 **动态获取响应编码** 4. **调…...
golang从入门到做牛马:第二十篇-Go语言接口:行为的“契约”
Go语言接口:行为的“契约” 在Go语言中,接口(interface)是一种非常强大的类型,用于定义行为的集合。接口通过描述类型必须实现的方法,规定了类型的行为契约。Go语言的接口设计简单而功能强大,是实现多态和解耦的重要工具。接下来,让我们一起深入了解Go语言中的接口。 …...
HTML5 Web SQL
HTML5 Web SQL 引言 随着互联网技术的飞速发展,HTML5 作为新一代的网页技术,已经逐渐成为网页开发的主流。在 HTML5 中,Web SQL 是一种轻量级的数据库存储技术,它允许开发者直接在网页中存储数据。本文将详细介绍 HTML5 Web SQL 的概念、特点、应用场景以及使用方法。 一…...
【品铂科技工业生产应用案例解析】
品铂科技(Pinpoint)在工业领域的高精度定位解决方案已广泛应用于电力、钢铁、仓储、化工、地铁等场景,以下为典型应用案例及技术方案: 一、电力行业:上海闵行电厂人员定位 白鹤滩水力发电站 项目需求&#x…...
pjsip dtmf发送和接收(pjsua)
DTMF(双音多频,Dual-Tone Multi-Frequency)是一种用于电话系统的信号技术,通过组合两个不同频率的音频信号来表示数字和符号。以下是DTMF的主要使用背景和应用场景: 电话拨号 DTMF最常见的用途是电话拨号。当用户按下电话键盘上的数字或符号时,电话会生成两个特定频率的音…...
【HarmonyOS Next】鸿蒙应用常规面试题和答辩思路参考
【HarmonyOS Next】鸿蒙应用常规面试题和答辩思路参考 一、充分了解岗位JD要求 根据招聘发布的岗位JD,进行自我匹配分析。了解基本要求和加分项,以及项目节奏和英文要求等。 技术不匹配的点,是否会影响应聘岗位加分项自己是否掌握…...
《计算机图形学》第二课笔记-----二维变换的推导
前言:为什么这么突兀的把这一节内容放在了第二课,第一是因为我急于求成,第二是因为这一章节太重要了,这几乎是二维三维变换的最核心的东西,理解了这一章节内容,后面的就会像打通了任督二脉一样,…...
无需微调的对齐方法URIAL
无需微调的对齐方法URIAL 研究背景与目的:LLMs的对齐调优通常采用监督微调(SFT)和强化学习从人类反馈(RLHF),但LIMA研究表明少量示例的SFT也能实现较好对齐,暗示对齐调优可能存在“表面性质”。本研究旨在探究对齐调优对基础LLMs的具体影响,并提出不依赖SFT或RLHF的对齐…...
机器学习(七)
一,监督学习和无监督学习聚类的数据集比较: 监督学习: 数据集包括输入的数据和与之对应的标签 无监督学习: 数据集仅含有输入的数据,要求算法自己通过所给的数据集来确定决策边界 二,聚类(Clustering): 聚…...
利用labelimg实现yolov8数据集的制作
我们在使用yolov8进行物体检测识别的时候,由于其内置的n,s,m等模型只包含90多种物体(很多其他物品并未包含在其中),导致我们无法直接使用其模型进行视频或者图片的检测识别。这个时候,我们就需要自己制作数据集进行训练…...
【0x80070666】-已安装另一个版本...(Tableau 安装失败)
第一种是之前安装过tableau相关软件,但是没卸载干净。 方法1:卸载旧版本 打开 控制面板 → 程序和功能(或 添加/删除程序)。查找 Tableau Desktop,如果已安装旧版本,卸载它。重新启动电脑后再尝试安装。 …...
在rv1106上部署vue3
创建vue3项目 $ npm create vuelatest Need to install the following packages: create-vue3.15.1 Ok to proceed? (y) y > npx > create-vue┌ Vue.js - The Progressive JavaScript Framework │ ◇ 请输入项目名称: │ ip_cam │ ◇ 请选择要包含的…...
海量数据查询加速:Presto、Trino、Apache Arrow
1. 引言 在大数据分析场景下,查询速度往往是影响业务决策效率的关键因素。随着数据量的增长,传统的行存储数据库难以满足低延迟的查询需求,因此,基于列式存储、向量化计算等技术的查询引擎应运而生。本篇文章将深入探讨 Presto、Trino、Apache Arrow 三种主流的查询优化工…...
Word填写窗口功能详解:如何让文档填写更高效?
在日常办公中,我们经常需要让他人填写一些固定格式的文档,比如合同、申请表、调查问卷等。如果直接使用普通文本编辑,填写时可能会破坏排版,甚至修改了不该改动的内容。这时候,Word的填写窗口(即“内容控件…...
Oracle数据库存储结构--逻辑存储结构
数据库存储结构:分为物理存储结构和逻辑存储结构。 物理存储结构:操作系统层面如何组织和管理数据 逻辑存储结构:Oracle数据库内部数据组织和管理数据,数据库管理系统层面如何组织和管理数据 Oracle逻辑存储结构 数据库的逻…...
kali之nmap
kali之nmap Nmap(Network Mapper)是 Kali Linux 中最著名的网络扫描工具之一,广泛用于网络发现、端口扫描、服务识别、操作系统检测等任务。它是一个功能强大且灵活的开源工具,适用于渗透测试、网络管理和安全审计。 1. Nmap 的主…...
Kubernetes学习笔记-移除Nacos迁移至K8s
项目服务的配置管理和服务注册发现由原先的Nacos全面迁移到Kubernetes上。 一、移除Nacos 移除Nacos组件依赖。 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <…...
简单创建一个Django项目并配置neo4j数据库
创建项目,项目的文件夹就是项目的名称 创建项目的基本框架 安装djangorestframework 单击运行 查看浏览器运行效果: 运行效果如下: 创建应用(假如说是创建一个名为myapp的应用): python manage.py startapp myapp创建之后的…...
java实现智能家居控制系统——入门版
文章目录 一、需求二、业务分析三、具体实现创建一个功能接口,实现设备的开关创建一个家电类,作为功能接口的实现类,定义名字和状态分别创建电视机、洗衣机、电灯的类,继承家电类Tv类WashMachine类Lamp类 定义智能控制系统类&…...
k8s基础架构介绍
k8s基础架构介绍 k8s 是对容器进行编排的一种工具。通过k8s可以实现对容器的编排、部署、更新等 学习k8s之前,先了解相关的一些使用和配置k8s的一些工具。 k8s的常用工具 在 kubernetes 中,主要有三个日常使用的工具,这些工具使用 kube 前…...
VSCode C/C++ 开发环境完整配置及常见问题(自用)
这里主要记录了一些与配置相关的内容。由于网上教程众多,部分解决方法并不能完全契合我遇到的问题,因此我选择以自己偏好的方式,对 VSCode 进行完整的配置,并记录在使用过程中遇到的问题及解决方案。后续内容也会持续更新和完善。…...
QGraphicsDropShadowEffect 的效果不能同时被多个控件使用
问题的原因是 QGraphicsDropShadowEffect 不能同时被多个控件共享。每个 QGraphicsDropShadowEffect 实例只能绑定到一个控件上。如果你将同一个 taskbarShadow 同时设置给 ui->filemanager_memeryArea 和 ui->workspaceWidget,只有最后一个设置会生效。 解决…...
实用小工具——快速获取数据库时间写法
最近我遇到了一个比较棘手的问题:在工作中,各个项目所使用的数据库类型各不相同。这导致我习惯性地使用Oracle的SQL语句进行编写,但每次完成后都会遇到报错,最终才意识到项目的数据库并非Oracle。为了避免这种情况,我需…...
回文字串(信息学奥赛一本通-2044)
【题目描述】 输入一串字符,字符个数不超过100,且以“.”结束。 判断它们是否构成回文。 【输入】 一行字符串。 【输出】 是否为回文串。是输出“Yes”,否输出“No。” 【输入样例】 abccb 【输出样例】 No 【题解代码】 #include<bits/stdc.h> using names…...
用Maven创建只有POM文件的项目
使用 mvn 创建一个仅包含 pom.xml 文件的父项目,可以借助 maven-archetype-quickstart 原型,然后移除不必要的文件,或者直接通过命令生成最简的 pom.xml 文件。以下是具体操作步骤: 一、方法一:使用原型创建后清理 1…...
