C语言中的流程控制语句

news2025/3/15 12:56:45

一.流程控制语句的分类:

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");
	else
		printf("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("休息一下,玩会儿游戏");
}

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

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

相关文章

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.…

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…

【HarmonyOS Next】鸿蒙应用常规面试题和答辩思路参考

【HarmonyOS Next】鸿蒙应用常规面试题和答辩思路参考 一、充分了解岗位JD要求 根据招聘发布的岗位JD&#xff0c;进行自我匹配分析。了解基本要求和加分项&#xff0c;以及项目节奏和英文要求等。 技术不匹配的点&#xff0c;是否会影响应聘岗位加分项自己是否掌握&#xf…

《计算机图形学》第二课笔记-----二维变换的推导

前言&#xff1a;为什么这么突兀的把这一节内容放在了第二课&#xff0c;第一是因为我急于求成&#xff0c;第二是因为这一章节太重要了&#xff0c;这几乎是二维三维变换的最核心的东西&#xff0c;理解了这一章节内容&#xff0c;后面的就会像打通了任督二脉一样&#xff0c;…

机器学习(七)

一&#xff0c;监督学习和无监督学习聚类的数据集比较&#xff1a; 监督学习&#xff1a; 数据集包括输入的数据和与之对应的标签 无监督学习&#xff1a; 数据集仅含有输入的数据&#xff0c;要求算法自己通过所给的数据集来确定决策边界 二&#xff0c;聚类(Clustering): 聚…

利用labelimg实现yolov8数据集的制作

我们在使用yolov8进行物体检测识别的时候&#xff0c;由于其内置的n,s,m等模型只包含90多种物体&#xff08;很多其他物品并未包含在其中&#xff09;&#xff0c;导致我们无法直接使用其模型进行视频或者图片的检测识别。这个时候&#xff0c;我们就需要自己制作数据集进行训练…

【0x80070666】-已安装另一个版本...(Tableau 安装失败)

第一种是之前安装过tableau相关软件&#xff0c;但是没卸载干净。 方法1&#xff1a;卸载旧版本 打开 控制面板 → 程序和功能&#xff08;或 添加/删除程序&#xff09;。查找 Tableau Desktop&#xff0c;如果已安装旧版本&#xff0c;卸载它。重新启动电脑后再尝试安装。 …

Word填写窗口功能详解:如何让文档填写更高效?

在日常办公中&#xff0c;我们经常需要让他人填写一些固定格式的文档&#xff0c;比如合同、申请表、调查问卷等。如果直接使用普通文本编辑&#xff0c;填写时可能会破坏排版&#xff0c;甚至修改了不该改动的内容。这时候&#xff0c;Word的填写窗口&#xff08;即“内容控件…

Oracle数据库存储结构--逻辑存储结构

数据库存储结构&#xff1a;分为物理存储结构和逻辑存储结构。 物理存储结构&#xff1a;操作系统层面如何组织和管理数据 逻辑存储结构&#xff1a;Oracle数据库内部数据组织和管理数据&#xff0c;数据库管理系统层面如何组织和管理数据 Oracle逻辑存储结构 数据库的逻…

简单创建一个Django项目并配置neo4j数据库

创建项目&#xff0c;项目的文件夹就是项目的名称 创建项目的基本框架 安装djangorestframework 单击运行 查看浏览器运行效果&#xff1a; 运行效果如下&#xff1a; 创建应用(假如说是创建一个名为myapp的应用)&#xff1a; python manage.py startapp myapp创建之后的…

java实现智能家居控制系统——入门版

文章目录 一、需求二、业务分析三、具体实现创建一个功能接口&#xff0c;实现设备的开关创建一个家电类&#xff0c;作为功能接口的实现类&#xff0c;定义名字和状态分别创建电视机、洗衣机、电灯的类&#xff0c;继承家电类Tv类WashMachine类Lamp类 定义智能控制系统类&…

VSCode C/C++ 开发环境完整配置及常见问题(自用)

这里主要记录了一些与配置相关的内容。由于网上教程众多&#xff0c;部分解决方法并不能完全契合我遇到的问题&#xff0c;因此我选择以自己偏好的方式&#xff0c;对 VSCode 进行完整的配置&#xff0c;并记录在使用过程中遇到的问题及解决方案。后续内容也会持续更新和完善。…

实用小工具——快速获取数据库时间写法

最近我遇到了一个比较棘手的问题&#xff1a;在工作中&#xff0c;各个项目所使用的数据库类型各不相同。这导致我习惯性地使用Oracle的SQL语句进行编写&#xff0c;但每次完成后都会遇到报错&#xff0c;最终才意识到项目的数据库并非Oracle。为了避免这种情况&#xff0c;我需…

基于ssm的宠物医院信息管理系统(全套)

一、系统架构 前端&#xff1a;html | layui | vue | element-ui 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | tomcat | idea | nodejs 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页…

从 YOLOv1 到 YOLOv2:目标检测的进化之路

引言 你有没有想过&#xff0c;当你用手机拍一张照片&#xff0c;里面的人、车、狗是怎么被自动识别出来的&#xff1f;这背后靠的就是目标检测技术。目标检测是计算机视觉中的一个重要领域&#xff0c;它不仅要回答“图片里有什么”&#xff0c;还要告诉你“这些东西在哪里”…

RTDETR融合[CVPR205]ARConv中的自适应矩阵卷积

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Adaptive Rectangular Convolution for Remote Sensing Pansharpening》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/pdf/2503.00467 代码链接&#xff1a;https:/…

项目-个人博客测试报告

目录 一、项目背景 二、项目功能 三、测试计划 &#xff08;1&#xff09;功能测试 &#xff08;2&#xff09;自动化测试 &#xff08;3&#xff09;性能测试 一、项目背景 1、个人博客系统是一个操作简单的基于Spring前后端分离的项目&#xff0c;同时使用MySQL数据库来进…

软考计算机知识-流水线

计算机流水线类似工业生产过程的流水线&#xff0c;在同一时间&#xff0c;m个部件进行不同的操作&#xff0c;完成对不同对象的处理。 理解重叠&#xff1a;让不同的指令在时间上重叠地解释。在解释第k条指令的操作完成之前&#xff0c;就可以开始解释第k1条指令。 题1&#…

Linux驱动开发实战(五):Qt应用程序点RGB灯(保姆级快速入门!)

Linux驱动开发实战&#xff08;五&#xff09;&#xff1a;Qt应用程序点RGB灯&#xff08;保姆级快速入门&#xff01;&#xff09; 文章目录 Linux驱动开发实战&#xff08;五&#xff09;&#xff1a;Qt应用程序点RGB灯&#xff08;保姆级快速入门&#xff01;&#xff09;前…

前端登录鉴权全解析:主流方案对比与实现指南

文章目录 一、常见登录鉴权方式概览1.1 主流方案对比1.2 技术特性对比 二、Session/Cookie方案2.1 实现原理2.2 代码实现2.3 优缺点分析 三、JWT方案3.1 实现原理3.2 代码实现3.3 优缺点分析 四、OAuth方案4.1 实现原理4.2 代码实现4.3 优缺点分析 五、SSO方案5.1 实现原理5.2 …