C语言分支循环语句详解

news2024/12/26 10:55:57

分支和循环语句是什么

在我们写程序的时候,总会遇到想一直循环执行某种语句的时候,这时候我们就要使用一种语句叫循环语句,或者带一些判断条件的语句,在C语言中提供了像这些的循环语句和分支语句

if else 语句

这是一种判断语句,他的格式如下

if(判断条件)
{
程序内容
}
 else if(判断条件)//另一种情况
{
程序内容
}
else//最后一种情况
{
程序内容
}

首先进入if语句如果条件为真那么就执行if语句里面的内容,如果为假就看看else if如果这里为真就执行else if里面的语句,如果这里为假就直接进入最后一种情况else语句里面

注意:如果if ,else if ,else下面只有一条语句则不用打括号,如果有2条以上的语句(包括两条)就必须要打大括号,但这里建议不管几条都可以打上大括号,这样也方便阅读代码行与行之间隔的更开。这里的第二个else 后面的if与最后一个else形成了一个嵌套if语句。有了嵌套if语句就可以完成我们更加复杂的条件判断

我们来举一个例子;

# define _CRT_SECURE_NO_WARNINGS
# include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 10)
	{
		printf("儿童\n");
	}
	else if (age < 18)
	{
		printf("青年\n");
	}
	else
	{
		printf("成年\n");
	}
	return 0;
}

这里就运用了判断条件来判断输入的年龄是儿童还是青年或者是成年

如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

下面来再来看一个代码

# include<stdio.h>
int main()
{
	int a = 3;
	if (a > 5)
	   if (a > 2)
		printf("hehe\n");
	else
		printf("hello\n");

	return 0;
}

这里我们会产生一个误解首先看第一个判断条件不成立,然后就看第二个else成立让后打印hello,但我们运行程序之后就会发现什么都没有打印出来,这是为什么呢,那是因为在这里我们排版的时候让else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印hello,但实际上但实际上 else 是和第⼆个 if进⾏匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。所以遇到这种情况我们可以这样记忆

如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

改成这样就行了

# include<stdio.h>
int main()
{
	int a = 3;
	if (a > 5)
	{
		if (a > 2)
		{
			printf("hehe\n");
		}
		else
		{
			printf("hello\n");
		}
	}
	return 0;
}

这里就也说明了打大括号的好处在哪里

switch选择语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。
他的格式是这样的

switch (expression) {
 case value1: statement
 case value2: statement
 default: statement
}

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀。
注意

switch 后的 expression 必须是整型表达式
•case 后的值,必须是整形常量表达式

我们写一个代码看看

# include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{
	case 1:
		printf("hehe\n");
		break;
	case 2:
		printf("haha\n");
		break;
	}
	return 0;
}

这里我们用switch来判断n输入的值,如果是1就打印hehe,如果是2就打印haha,如果我们不在每个case后面输入break会怎么样呢,下面来看看
在这里插入图片描述

最终会变成这个样子这是为什么呢?原因是
switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case 2 中的语句。
所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。
当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

#include <stdio.h>
int main()
{
 int day = 0;
 scanf("%d", &day);
 switch(day)
 {
 case 1case 2:
 case 3:
 case 4:
 case 5:
 printf("⼯作⽇\n");
 break;
 case 6:
 case 7:
 printf("休息⽇\n");
 break;
 }
 return 0;
 }

这段代码我们就没有在每个case后面使用break,照样完成我们判断日期是工作日还是休息日。
switch语句中的default
在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊default ⼦句。
格式是这样的

switch (expression) {
 case value1: statement
 case value2: statement
 default: statement
 }

switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏default ⼦句。
我们还是拿上面的代码来稍作调整

#include <stdio.h>
int main()
{
 int day = 0;
 scanf("%d", &day);
 switch(day)
 {
 case 1case 2:
 case 3:
 case 4:
 case 5:
 printf("⼯作⽇\n");
 break;
 case 6:
 case 7:
 printf("休息⽇\n");
 break;
 default:
 printf("输⼊错误,请重新输入\n");
 break;
 }
 return 0;
 }

switch语句中的case和default的顺序问题
在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。不过我们通常是把 default ⼦句放在最后处理的。根据个人情况来看

while循环

和前面两个语句相比这个就不一样了这个就不是选择语句而是循环语句了C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句,while 语句的语法结构和 if 语句⾮常相似。

while(表达式)
 语句;//如果循环体想包含更多的语句,可以加上⼤括号

我们来看看while语句到底是怎么用的,来画一个图看看
在这里插入图片描述

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语
句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
下面我们来写一个程序看看;

# include<stdio.h>
int main()
{
	int n = 0;
	while (n <= 10)
	{
		printf("%d ", n);
		n++;
    }
	return 0;
}

这里我们用while循环来打印出0到10的数字
同样我们也可以写一个判断一个数是几位数的程序

#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 while(n)//当n不等于0时
  {
 printf("%d ", n%10);
 n /= 10;
 }
 return 0;
 }

for循环

他的语句是这样的

 for(表达式1; 表达式2; 表达式3)
 语句;//如果循环体想包含更多的语句,可以加上⼤括号

表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整

下面我们画个图看看
在这里插入图片描述
⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果
==0(为假),则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环
我们来实践一下

# include<stdio.h>
int main()
{
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

while和for的比较
for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部
分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形
式上 for 循环要更优⼀些。

do while 循环

在循环语句中 do while 语句的使⽤最少,它的语法如下:

do
 语句;
while(表达式)

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;
⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
在这里插入图片描述
在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的
结果是真!,则继续循环,执⾏循环语句;判断表达式的结果为假,则循环结束。所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。
我们来试试看
在屏幕上打印出0到10的值

#include <stdio.h>
int main()
{
 int i = 1;
 do
 {
 printf("%d ", i);
 i = i + 1;
 }while(i<=10);
 
 return 0;
 }

break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中
提供了 break 和 continue 两个关键字,就是应该到循环中的。
1,break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。
2, continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。

while循环中的break和continue

break举例

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 9)
			break;//当i等于9后,就执⾏break,循环就终⽌了就打印到8就结束了.
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

在这里插入图片描述
打印了1,2,3,4,5,6,7,8后,当i等于9的时候,循环正 break 的地⽅终⽌,不再打印,不再循环。
所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。
那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。
continue运用举例
continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏
下⼀次循环的判断。
上⾯的代码,如果把 break 换成 continue 会是什么结果呢?

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 9)
			continue;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

这点的continue当i = 9时就会跳过后面的i+1部分直接又来判断i==9又为真有跳过后面的内容这样i+1就一直到不了,就会陷入死循环。

for循环中的break和continue

break举例

#include <stdio.h>
int main()
{
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 6)
 break;
 printf("%d ", i);
 }
 return 0;
 }

在这里插入图片描述
continue举例

#include <stdio.h>
int main()
{
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 6)
 continue;
 printf("%d ", i);
 }
 return 0;
 }

在这里插入图片描述
这里我们发现这里和while的情况截然不同,那是由于我们while是无法进入到循环调整部分,而for却可以。

所以在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调
整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现。

do while循环中的break和continue

这里的使用情况和while里面是一模一样的,可以自行调用上面的while程序进行调试看看。

#include <stdio.h>
int main()
{
 int i = 1;
 do
 {
 if(i == 7)
 break;
 printf("%d ", i);
 i = i + 1;
 }while(i<=10);
 return 0;
 }
#include <stdio.h>
int main()
{
 int i = 1;
 do
 {
 if(i == 7)
 continue;
 printf("%d ", i);
 i = i + 1;
 }while(i<=10);
 return 0;
 }

通过上面的循环讲解,我们要学会合理的使用他这样可以达到事半功倍的效果!
如果本文有错误,欢迎指正!

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

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

相关文章

Model-Free Q-Learning for the Tracking Problem of Linear Discrete-Time Systems

Model-Free Q-Learning for the Tracking Problem of Linear Discrete-Time Systems&#xff0c;2024&#xff0c; Chun Li , Jinliang Ding , Senior Member, IEEE, Frank L. Lewis , Life Fellow, IEEE, and Tianyou Chai , Life Fellow, IEEE 对完全未知动力学的线性离散时…

远程桌面连接弹出“出现身份验证错误,要求的函数不受支持”解决办法

windows远程桌面连接,出现如图所示“出现身份验证错误&#xff0c;要求的函数不受支持”错误&#xff0c;无法连接。 解决办法&#xff1a; 打开本地组策略编辑器&#xff0c;按winr组合键输入gpedit.msc命令打开。 选择“计算机配置”--“管理模板”--“系统”--“凭据分配”…

OpenHarmony实战开发-Web组件的使用

介绍 本篇Codelab使用ArkTS语言实现一个简单的免登录过程&#xff0c;向大家介绍基本的cookie管理操作。主要包含以下功能&#xff1a; 获取指定url对应的cookie的值。设置cookie。清除所有cookie。免登录访问账户中心。 原理说明 本应用旨在说明Web组件中cookie的管理操作。…

【正点原子FreeRTOS学习笔记】————(7)任务调度

这里写目录标题 一、开启任务调度器&#xff08;熟悉&#xff09;二、启动第一个任务&#xff08;熟悉&#xff09;2.1&#xff0c;prvStartFirstTask () /* 开启第一个任务 */2.2&#xff0c;vPortSVCHandler () /* SVC中断服务函数 */ 三、任务切换&#xff08;掌握&#xff…

Deconstructing Denoising Diffusion Models for Self-Supervised Learning解读(超详细)

论文题目&#xff1a;Deconstructing Denoising Diffusion Models for Self-Supervised Learning 原文链接&#xff1a;https://arxiv.org/html/2401.14404v1 本文是对何凯明老师的新作进行的详细解读&#xff0c;其中穿插了一些思考&#xff0c;将从以下四个方面对这篇工作进…

波奇学Linux:http协议

2 个简单预备知识 https://www.baidu.com/ -域名-字符串-域名解析--ip地址 http请求和响应 格式画出来&#xff0c;两个工具见一见 https协议绑定端口号443 http协议绑定端口号 80 url 统一资源定位符 所有网络的资源都可以用唯一的一个字符串标识&#xff0c;并且可以获取…

八种顺序读写函数的介绍(fput/getc;fput/gets;fscanf,fprintf;fwrite,fread)

一&#xff1a;读写的含义的解释&#xff1a; 读&#xff08;读出&#xff09;&#xff1a;即从文件里面读出数据----------->和scanf从键盘里面读出数据类似 写&#xff08;写入&#xff09;&#xff1a;即把数据写入文件里面----------->和printf把数据写入到屏幕上类…

13.Java能干什么?以及Java的三大平台

文章目录 一、JavaSE二、JavaME三、JavaEE JAVA从95年以来&#xff0c;已经问世了20多年了&#xff0c;可能比部分同学的年龄还大。 Java到底能干嘛呢&#xff0c;此时就需要讲到Java的三大平台&#xff0c;其实也就是它的三个分类&#xff1a;JavaSE、JavaME、JavaEE。 一、Ja…

PDFgear:一款免费的PDF编辑、格式转化软件

日常办公中&#xff0c;很多朋友都会接触到PDF文件。把文件转化成PDF是保留文件格式、防范别人修改常用的方法。但是很多人会为PDF文件的生成、压缩、编辑和格式转化而头疼&#xff0c;还有人为了能把PDF转化成Word还购买了不少付费的软件。 为了解决大家这个痛点&#xff0c;…

ES6 学习(三)-- es特性

文章目录 1. Symbol1.1 使用Symbol 作为对象属性名1.2 使用Symbol 作为常量 2. Iterator 迭代器2.1 for...of循环2.2 原生默认具备Interator 接口的对象2.3 给对象添加Iterator 迭代器2.4 ... 解构赋值 3. Set 结构3.1 初识 Set3.2 Set 实例属性和方法3.3 遍历3.4 相关面试题 4…

如何着手写一个自己的网站管理客户端

WebHole 项目地址 https://gitee.com/yiyefangzhou24/web-hole 是什么&#xff1f;能干什么&#xff1f; WebHole是一款网站管理软件&#xff0c;类似但不同于菜刀、冰蝎、蚁剑&#xff0c;能通过C/S的工作模式&#xff0c;方便的管理服务器的文件、数据库&#xff0c;并执…

Redis命令介绍

一、redis启动&#xff1a; 本地启动&#xff1a;redis-cli 远程启动&#xff1a;redis-cli -h host -p port -a password Redis 连接命令 1 AUTH password 验证密码是否正确 2 ECHO message 打印字符串 3 PING 查看服务是否运行 4 QUIT 关闭当前连接 5 SELECT index 切换…

VS2022 使用ClaudiaIDE设置自定义图片背景

ClaudiaIDE的下载 第一步&#xff0c;如下图所示&#xff0c;点击&#xff1a;扩展——管理扩展。 第二步&#xff0c;如下图所示&#xff0c;点击&#xff1a;联机——右上角输入ClaudiaIDE搜索——点击下载。 下载后关闭所有VS窗口&#xff0c;然后等待弹出一个安装窗口&…

商密测评必知:国密算法的重要性与应用

国密算法是指由中国国家密码管理局发布的密码算法标准&#xff0c;旨在保障国家信息安全。目前&#xff0c;国家密码管理局已发布了一系列国产商用密码标准算法&#xff0c;包括SM1&#xff08;SCB2&#xff09;、SM2、SM3、SM4、SM7、SM9以及祖冲之密码算法&#xff08;ZUC)等…

P4317 花神的数论题(数位DP)

数组别太小&#xff0c;注意取模的数 #include<bits/stdc.h> using namespace std; using ll long long; using pii pair<int,int>; #define int long long const int N 1e510; const int inf 0x3f3f3f3f; const int mod 1e77; int gcd(int a,int b){return b…

华为OD七日集训第5期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、七日集训第 3 期五、精心挑选21道高频经典题目&#xff0c;作为入门。第1天、逻辑分析第2天、双指针第3天、数据结构第4天、滑动窗口第5天、并查集第6天、贪心思维第7天、二分查找 大家好&#xff0c;我是哪吒。 最近一直在…

肖恩带你拿捏结构体!

先赞后看&#xff0c;养成习惯&#xff08;&#x1f601;&#xff09;&#xff0c;几天不见&#xff0c;甚是想念&#xff0c;今天肖恩带大家拿捏结构体~~~ 1. 结构体类型的声明 那首先&#xff0c;什么是结构体呢&#xff1f; C语⾔已经提供了内置类型&#xff0c;如&#…

皮肤科医生护肤误区揭秘:不洗脸变美的真相?

在信息过剩的社会&#xff0c;大家不断被各种护肤秘籍、美容宝典所包围。最近&#xff0c;“一周不洗脸皮肤变好”的话题引起热议&#xff0c;而紧随其后关于“女子为护肤一个月不洗脸&#xff0c;结果脸上结满痂痕险严重毁容”的新闻再次引发广泛关注。这让大家纷纷产生了疑惑…

对象存储服务MinIO快速入门

对象存储服务MinIO快速入门 MinIO简介开箱使用快速入门封装MinIO为starter1 创建模块heima-file-starter2 配置类3 封装操作minIO类4 对外加入自动配置5 其他微服务使用 MinIO简介 官网文档 开箱使用 docker run -p 9000:9000 --name minio -d --restartalways -e "MINIO…

“李子园”上榜中国民营企业社会责任优秀案例

日前&#xff0c;由浙江省工商联、浙江工商大学主办&#xff0c;杭州市工商联协办的2024浙江民营企业社会责任暨浙商ESG研讨会在杭州召开&#xff0c;探索民营企业履行社会责任的方法路径和趋势。会上公布了2023年中国民营企业社会责任优秀案例&#xff08;浙江入选企业&#x…