【C语言初阶】分支语句If与switch的具体用法,有这篇博客就够了

news2025/1/10 1:41:22

在这里插入图片描述

君兮_的个人主页

勤时当勉励 岁月不待人

C/C++ 游戏开发


Hello,这里是君兮_,今天又来给大家更新0基础学习C语言中的文章啦!
今天带来的是对分支语句的详解,初学者建议先看看总集哦,
这里是链接:

【C语言初阶】万字解析,带你0基础快速入门C语言(上)
【C语言初阶】万字解析,带你0基础快速入门C语言(下)

分支语句与循环语句

  • 一.什么是语句?
  • 二.分支语句(选择结构)
    • 1.If语句
      • If语句的嵌套使用
      • If语句中一些需要注意的小细节
    • 2.switch语句
      • 在switch语句中的 break
      • Switch语句中的default
      • switch的嵌套使用
  • 总结

一.什么是语句?

就像英语有语法语句一样,C语言也同样有语法语句

  • C语句可分为五类:
    在这里插入图片描述

  • 咱们今天要讲的就是这五种语句中的控制语句
  • 控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
    可分成以下三类:
  • 1. 条件判断语句也叫分支语句:if语句、switch语句;
  • 2. 循环执行语句:do while语句、while语句、for语句;
  • 3. 转向语句:break语句、goto语句、continue语句、return语句。

二.分支语句(选择结构)

人生中有有各种各样的选择,每个选择都会走向不同的道路,但是一旦选择了,就没有回头路可走了,我希望在看这篇博客的你,能够慎重的进行人生中的每一个选择

  • 不扯远了,画个图让大家理解一下选择语句:

在这里插入图片描述

  • 这就是选择!!!
  • 免责声明:博主不是尬黑原神,博主自己就是开服60级老履刑者
    在这里插入图片描述

1.If语句

  • if语句最最基础的选择语句
  • 下面是具体的语法结构

if(表达式)

语句;

if(表达式)
语句1;

else
语句2;

多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;

  • 代码演示

//代码1
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("未成年\n");
	}
}
//代码2

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("未成年\n");
	}
	else
	{
		printf("成年\n");
	}
}
//代码3

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("少年\n");
	}
	else if (age >= 18 && age < 30)
	{
		printf("青年\n");
	}
	else if (age >= 30 && age < 50)
	{
		
			printf("中年\n");
	}
	else if (age >= 50 && age < 80)
	{
		printf("老年\n");
	}
	else
	{
		printf("老寿星\n");
	}

}

C语言规定:
在C语言中,0为假,非0为真

  • if后的括号中是判断是否进入if的条件。如果判断表达式中的结果为真,就执行语句中的内容。
  • 其中,当if中的条件不满足时,当有else if就会进入else if进行第二次判断,如果else if的条件也不满足,才会进入最终的else中。

If语句的嵌套使用

  • 其实没什么难以理解的,就是在if语句中再套一层或者几层if语句实现我们更加精准的选择
int main()
{
	int m = 1;
	int n = 2;
	if (m == 1)
	{
		if (n == 2)
		{
			printf("Hello\n");
		}
		else
		{
			printf("你好\n");
		}
	}
	return 0;
}

If语句中一些需要注意的小细节

  • 1.上面代码中的else都是与最近的if匹配的,可不要在嵌套if中搞错了else匹配的对象。
  • 2.注意哦,在if语句中,后面的“{}”是可以省略的,就像这样:
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
		else
			printf("haha\n");
	}
	return 0;
}
  • 但是这里博主墙裂不推荐这么写哦,这里指出是防止以后你看到某些代码中没加"{}"以为它是一个错误

  • 不推荐原因:

  • 1)注意这里的if语句只能控制下一行代码的执行,如果你错误的输入了几行代码,就会像这样
    在这里插入图片描述
    看到了嘛,我们的b明明不等于2还是打印了gg,当我们的代码一多起来,就很容易因为不注意这里未加“{}”而写出bug

  • 2)作为一名合格的程序猿,好的代码风格是非常重要的,咱们的代码不仅要让自己看懂,还得让别人看懂。当你写出1)中的代码时,其实就不算一个非常好的代码风格,同时也十分容易出bug。

  • 3.一些好的代码风格分享
    比如以下代码就有非常好的代码风格:

int num = 1;
if(5 == num)
{
  printf("hehe\n");
  • 我相信你也出现过这种错误,明明判断某个变量是否等于某个值,但是一不小心少写了一个“=”,变成了把某个值直接赋给了某个变量
  • 以上代码出现这种情况时就会直接报错提醒你哦
    在这里插入图片描述
  • 这种即能让我们看懂又能帮助我们找bug的代码风格就是非常好的代码风格!!!

2.switch语句

switch语句也是一种分支语句。
常常用于多分支的情况

  • 比如:
    输入1,输出星期一
    输入2,输出星期二
    输入3,输出星期三
    输入4,输出星期四
    输入5,输出星期五
    输入6,输出星期六
    输入7,输出星期日
  • 如果此时咱们还是写成if else的语句形式当然也可以实现,但是由于咱们的选择分支过多使用if语句是不是有点太复杂了?这时候switch就闪亮登场啦!!!
  • switch语句的基本语法结构

switch(整型表达式)
{
语句项;
}

  • 什么是语句项呢?
  • 是一些case语句
    如下格式:

case 整形常量表达式:
语句;

在switch语句中的 break

  • 在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支
  • 示例代码如下:
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
			printf("星期一\n");
			break;
	case 2:
			printf("星期二\n");
			break;
	case 3:
			printf("星期三\n");
			break;
	case 4:
			printf("星期四\n");
			break;
	case 5:
			printf("星期五\n");
			break;
	case 6:
			printf("星期六\n");
			break;
	case 7:
			printf("星期天\n");
			break;
	}
	return 0;
}

有时候我们的需求变了:
1. 输入1-5,输出的是“weekday”;
2. 输入6-7,输出“weekend”

  • 代码如下:
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
		break;
	}
	return 0;
}

在这里插入图片描述

  • 也就是说在switch-break语句中,不碰到break是不会停下的,我们可以通过以上这种用法来实现几个分支结果的合并。

编程好习惯:
在最后一个 case 语句的后面加上一条 break语句。
(之所以这么写是可以避免出现在以前的case 语句后面忘了添加 break语句最终导致switch语句停不下来的情况)

Switch语句中的default

如果表达值与所有的case标签的值都不匹配怎么办?
其实也没什么,结果就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

  • 你可以在语句列表中增加一条default子句,把下面的标签
    "default:"写在任何一个 case 标签可以出现的位置。
  • 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
    因此,每个switch语句中只能出现一条default子句。
  • 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

  • 上面的讲解可能有点抽象,我们还是看代码来理解一下吧
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
		break;
	default:
	    printf("选择错误,请重新输入");
	    break;
	}
	return 0;
}
  • 注意到以上两个代码的不同了吗?由于一个星期只有7天,当我们在最后加上default后,输入不满足1~7的数就会报错,这就是default的作用。
    在这里插入图片描述

switch的嵌套使用

  • 与If语句一样,switch语句也能嵌套使用达到多分支精准选择的作用
  • 话不多说,用代码解释
int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:
		m++;
	case 2:
		n++;
	case 3:
		switch (n)//switch嵌套使用
		{
		case 1:
			n++;
			break;//注意,switch嵌套中的break只会跳出一层switch
		case 2:
			m++;
			n++;
			break;
		}
	case 4:
		m++;
		break;
	default:
		break;
	}
	printf("m = %d, n = %d\n", m, n);
	return 0;
}

在这里插入图片描述

  • 这里输出结果对于很多人来说都很容易理解就不多解释了。如果你没看懂,一步步结合我上面讲解的知识再试着看看,还是看不懂可以在评论区提出你的疑问或者私信我哦,对于初学者刚开始实在理解不了没啥好丢人的,毕竟博主最开始看的时候也没看懂。。。
    在这里插入图片描述

总结

  • 以上就是今天要讲的所有内容了,这么听下来是不是感觉分支选择语句也没啥难的?
  • 其实在实际应用中只要你注意到我上文提到的那些小细节以及养成好的编程风格,那么分支语句这部分就难不倒你
  • 最后,如果你对文章的内容有任何疑问欢迎在评论区提出或者私信我哦。

创作不易,如果感觉文章内容对你有帮助的话,不妨点个三连再走呗。
你们的支持就是我创作的动力,再次感谢大家的支持,下次再见啦!

(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧!)

在这里插入图片描述

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

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

相关文章

图片转excel表格算法之霍夫变换法原理浅析

大家伙都知道&#xff0c;图片转excel表格是金鸣识别中一项非常重要的功能&#xff0c;金鸣识别的OCR在识别图片中的表格时&#xff0c;会用到一种叫霍夫变换法的算法&#xff0c;那这个算法到底是怎么回事&#xff1f;它的原理又是什么呢&#xff1f; 一、霍夫变换法的概念 …

深入了解模板知识(c++)

前言 在c中模板是很重的&#xff0c;泛型编程就是模板最好的体现&#xff0c;模板的出现就是为了更好的复用代码&#xff0c;有了它&#xff0c;我们不必写各种逻辑相同只是逻辑中的数据的类型的不同的代码&#xff0c;使得我们编写代码变得更加高效&#xff0c;下面让我们一起…

若依权限系统分析(前后端分离版)

若依权限系统分析 一&#xff1a;故事背景二&#xff1a;具体权限控制2.1 页面权限控制2.2 页面元素权限控制 三&#xff1a;实现前端鉴权3.1 封装js与权限交互3.1.1 uni-app自带uni-request与权限交互 3.2 vux状态管理3.2.1 自定义状态3.2.2 在vuex的store配置内添加我们新增的…

rust切片

这里s的不可变引用借用给了wordIndex&#xff0c;而s.clear()又想用可变引用&#xff0c;所以报错。而第一个例子中返回的usize并没有返回不可变引用。

客户端负载均衡工具Ribbon

一 什么是Ribbon Ribbon介绍 目前主流的负载方案分为以下两种&#xff1a; 集中式负载均衡&#xff0c;在消费者和服务提供方中间使用独立的代理方式进行负载&#xff0c;有硬件的&#xff08;比如 F5&#xff09;&#xff0c;也有软件的&#xff08;比如 Nginx&#xff09;…

Ubuntu系统中分布式安装配置HBase-2.3.7

HBase是一个基于Hadoop的分布式列式数据库&#xff0c;可以存储海量的结构化和半结构化数据。本文介绍如何在三个Ubuntu系统上搭建一个HBase集群&#xff0c;并进行简单的数据操作。 在三个Ubuntu系统上分布式安装配置HBase-2.3.7&#xff0c;主要步骤包括&#xff1a; 准备工…

MySQL的执行原理

一、单表访问之索引合并 我们前边说过MySQL在一般情况下执行一个查询时最多只会用到单个二级索引&#xff0c;但存在有特殊情况&#xff0c;在这些特殊情况下也可能在一个查询中使用到多个二级索引&#xff0c;MySQL中这种使用到多个索引来完成一次查询的执行方法称之为&#…

Qgis加载在线XYZ瓦片影像服务的实践操作

目录 背景 一、XYZ瓦片相关知识 1、xyz瓦片金字塔 2、 瓦片编号 3、瓦片访问 二、在Qgis中加载在线地图 1、Qgis版本 2、瓦片加载 3、地图属性预览 总结 背景 在做电子地图应用的时候&#xff0c;很常见的会提到瓦片&#xff08;tile&#xff09;的概念&#xff0c;瓦片…

Java实训日志07

文章目录 八、项目开发实现步骤&#xff08;十&#xff09;创建应用程序类1、创建app子包2、创建Application类 &#xff08;十一&#xff09;创建窗口界面类1、创建主界面窗口&#xff08;1&#xff09;做一个空白的主界面窗口&#xff08;2&#xff09;退出时弹出消息框询问用…

【cutlass】cuTe layout操作

简介 cuTe提供了对Layout操作的算法&#xff0c;可以混合执行来构建更复杂的Layout操作&#xff0c;比如在其他layout之间切分和平铺layout 在host或者device上打印cuTe cuTe的打印函数可以在host和device端打印。cute::print 重载了几乎所有 CuTe 类型&#xff0c;包括指针…

MT8168/MTK8168核心板,4G安卓核心板

MT8168是一款集成度很高的高性能应用处理器&#xff0c;具有低功耗特性&#xff0c;并且提供卓越的多媒体体验&#xff0c;适用于平板电脑、智能手持终端以及智能家居和物联网应用等嵌入式设备。这款芯片采用了先进的12纳米工艺&#xff0c;将四核Arm-Cortex A53 MPCore TM CPU…

关于JAVA中 方法中无法改变String的分析

package com.atguigu.String01;public class String01 {public static void main(String[] args) {// 字符串不变性String str "hello";// 对象成员数组是finalchange(str);System.out.println("change后的str:"str);int[] a {1,3,5,7,9};int[] b {2,3,…

【V4L2】 v4l2框架分析之v4l2_fh

一、v4l2_fh简介 &#x1f53a;相关源码文件&#xff1a; /drivers/media/v4l2-fh.c /drivers/media/v4l2-fh.h 在V4L2中&#xff0c;struct v4l2_fh结构用于保存V4L2框架中使用的文件句柄&#xff08;File Handle&#xff09;的数据&#xff0c;即每个打开的视频设备都会对…

微信小程序开发入门学习01-TDesign模板解读

目录 1 使用模板创建小程序2 app.json3 页面布局总结 原来我们使用微信开发者工具&#xff0c;比较困难的是前端框架的选择上&#xff0c;官方也没有提供一套框架供我们使用&#xff0c;最近开发者工具已经提供了一套前端框架&#xff0c;后续我们开发的效率会因为使用模板提高…

Linux-线程的同步与互斥

线程的同步与互斥 进程/线程间的互斥相关背景概念互斥量互斥量接口互斥量的初始化互斥量的销毁加锁和解锁 改善抢票系统互斥量原理 可重入与线程安全重入和线程安全的概念常见线程不安全情况常见线程安全的情况常见不可重入情况常见可重入情况可重入与线程安全的关系可重入与线…

Spring Security系列之认证(Authentication)架构

文章目录 架构主要组件SecurityContextHolderAuthenticationAuthenticationManagerProviderManagerAuthenticationProviderAuthenticationEntryPointAbstractAuthenticationProcessingFilter 架构主要组件 SecurityContextHolder - SecurityContextHolder 是 Spring Security …

【tensorflow】连续输入的神经网络模型训练代码

【tensorflow】连续输入的神经网络模型训练代码 全部代码 - 复制即用 训练输出 代码介绍 全部代码 - 复制即用 from sklearn.model_selection import train_test_split import tensorflow as tf import numpy as np from keras import Input, Model, Sequential from keras.l…

try-catch-finally中的四大坑

目录 1.坑1&#xff1a;finally中使用return 2.坑2&#xff1a;finally中的代码好像“不执行” 3.坑3&#xff1a;finally中的代码“非最后”执行 4.坑4&#xff1a;finally中的代码真的“不执行” 在 Java 语言中 try-catch-finally 看似简单&#xff0c;但想要真正的“掌…

对现在的生活不满意?《围城》给你个人,婚姻,爱情的启示

杨绛先生在100岁感言的时候说&#xff0c;我们曾如此期盼外界的认可&#xff0c;到最后才知道&#xff1a;世界是自己的&#xff0c;与他人毫无关系&#xff01;百岁老人的感言&#xff0c;清晰透彻地道出了人生的真相。我们每个人都是生活于关系之中的&#xff0c;在错综复杂的…

华为OD机试真题 JavaScript 实现【找车位】【2023 B卷 100分】,附详细解题思路

一、题目描述 停车场有一横排车位&#xff0c;0代表没有停车&#xff0c;1代表有车。至少停了一辆车在车位上&#xff0c;也至少有一个空位没有停车。 为了防剐蹭&#xff0c;需为停车人找到一个车位&#xff0c;使得距停车人的车最近的车辆的距离是最大的&#xff0c;返回此…