【C语言步行梯】分支语句if...else、switch详谈

news2024/11/17 9:31:09

在这里插入图片描述

🎯每日努力一点点,技术进步看得见
🏠专栏介绍:【C语言步行梯】专栏用于介绍C语言相关内容,每篇文章将通过图片+代码片段+网络相关题目的方式编写,欢迎订阅~~

文章目录

  • 什么是语句?
  • 引入分支语句(选择结构)
  • if语句
  • switch语句


什么是语句?

C语言由;(分号)隔开的就是一条语句,举个例子↓↓↓

printf("这是一行语句");
int a = 10;//这也是一个语句
;//虽然只有一个分号,但这也是语句,这种语句称为空语句

引入分支语句(选择结构)

生活中,我们有很多需要选择的情况。例如:你想喝品牌的可乐?百事还是可口可乐?为了满足选择需求,C语言就有了分支(选择)结构。
在这里插入图片描述

if语句

在我们坐公交车的时候,如果我们刷的是学生卡,此时卡机就会叫一声“学生卡~”。C语言该怎么实现这样的情景呢?
在这里插入图片描述
那我们就得先来认识一下单分支语句了,它的结构是这样的↓↓↓

if()//括号内填判断条件
{
	//执行语句
}

以上面学生卡的例子来说,如果是学生卡则在频幕上打印“学生卡”,代码实现如下

if(isStudentCard)
{
	printf("学生卡~");
}

除了这种分支(选择)的场景,还有这么个场景:我去银行取钱,我的余额是100块,如果我取100,则会取钱成功;如果我取10000,则会取钱失败。
在这里插入图片描述
于是我们就有了双分支语句结构↓↓↓

if()//括号内填写判断条件
{
	//满足条件则执行这里
}
else
{
	//不满足条件则执行这里
}

上面的取钱场景可以转化为下面这个代码↓↓↓

//rest表示余额
//money表示要取的钱
if(money <= rest)
{
	//ATM吐钱
}
else
{
	//显示余额不足
}

关于if语句,还有最后这一种场景:我们考试的时候100-90分是优秀,89-70分是良好,69-60分是及格,小于60分是不及格。此时需要更多的分支,C语言就引入了多分支语句。它的格式如下↓↓↓

if()//这里填写条件1
{
	//满足条件1执行这里
}
else if()//这里填写条件2
{
	//满足条件2执行这里
}
else if()//这里填写条件3
{
	//满足条件3执行这里
}
else
{
	//上述条件都不满足,执行这里
}

对于上面按分数划分等级的场景,我们可以写出如下代码↓↓↓

if(score >= 90 && score <= 100)
{
	printf("优秀\n");
}
else if(score >= 70 && score < 90)
{
	printf("良好\n");
}
else if(score >= 60 && score < 70)
{
	printf("及格\n");
}
else
{
	printf("不及格\n");
}

下面给出一些小tips:

★ps:if…else if…else多分支语句中,可以有多个else if。

★ps:在填写括号中的条件表达式时,如果表达式的值非0,则表示真;如果表达式的值为0,则表示假。

★ps:if、else if、else的后面最多只能接1条语句,如果要接多条语句,需要使用大括号{}将所有语句括起来。

★ps:if…else…的匹配满足就近原则。例如下方代码,else与离它最近的if语句匹配,即与age>=60所在的if语句匹配,形成分支结构。

if(age >= 18)
	if( age >= 60)
		printf("长者")
else
	printf("我和age>=60的if语句匹配");

在这里插入图片描述
经过上面的学习,我们拿几道题来练练手,Let’s Go!【读者先自己写写,我们再一起对照对照】

练习1:编写程序判断一个数是否为奇数

#include <stdio.h>

int main()
{
	int num = 0;
	scanf("%d", &num);
	if(num % 2 == 1)
	{
		printf("是奇数\n");
	}
	else
	{
		printf("不是奇数\n");
	}
	return 0;
}

练习2:Jammingpro想喝蜜雪冰城,Jammingpro输入他带的钱的数量,你帮他判断一下他能不能买得起5块钱的柠檬水

#include <stdio.h>

int main()
{
	int money = 0;
	scanf("%d", &money);
	if(money >= 5)
	{
		printf("能买得起\n");
	}
	else
	{
		printf("买不起\n");
	}
	return 0;
}

switch语句

如果我们输入1表示星期一,输入2表示星期二,以此类推。如果使用if…else if…else的语句结构一定能够实现,但实现代码实在是太繁杂了。C语言中的switch语句就派上用场了,我们来看看它怎么判断星期↓↓↓

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;
	default:
		printf("输入有误\n");
		break;
}

其中switch后面的括号中可以填表达式,它将会和case子句后的整型、常量或者表达式进行匹配,如果匹配成功,则会执行对应case子句后面的代码;如果都无法匹配,则会执行default子句后面的代码。

★ps:上面case语句后面的break不可以省略。以day=6为例,它将和case 6相匹配,并打印"星期六",在遇到break语句时,将跳出整个switch语句。假如case 6子句下面没有break,则在打印完“星期六”之后,将会向后继续执行打印“星期日”的操作,直到遇到下一个break语句。

借助switch语句中,如果没有遇到break就会继续向后执行的特点,我们可以实现如下代码。这个代码中,day的数值表示星期,当输入1到5时,则会打印“工作日”;输入6到7,则会打印“休息日”;输入其他内容,则会打印“输入有误”。

switch(day)
{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入有误\n");
		break;
}

★ps:default子句可以放在整个switch语句中的任意位置,不一定要放在最后面。

在这里插入图片描述
学完switch语句,那就我们来看一段代码,看看它的执行结果应该是什么【读者先想出结果,再一起对照一下】

int main()
{
	int n = 1;
	int m = 2;
	switch(n)
	{
		case 1:
			printf("Jammingpro ");
		case 2:
			switch(m)
			{
				case 1:
					printf("ccc ");
				case 2:
					printf("is ");
					break;
				case 3:
					printf("strong!\n");
					break;
				default:
					printf("nice\n");
					break;
			}
		default:
			printf("handsome!\n");
			break;
	}
	return 0;
}

揭晓答案的时刻:“Jammingpro is handsome”。
解析:外层的switch语句中,n和case 1自己相匹配,打印完“Jammingpro ”后,由于其后面没有break语句,将继续执行case 2中的内容。case 2中嵌套了switch语句,m和case 2自己想匹配,于是打印了”is “,因为内层case 2子句后面有break语句,将会跳出内层switch语句。外层switch的case 2后面没有break语句,它将继续执行default子句中的内容,打印出”handsome\n“。
在这里插入图片描述

🚩这篇文章结束了~~
如果文章中出现了错误,欢迎私信或留言。(๑•̀ㅂ•́)و✧
有任何疑问请评论或私信哦~~o( ̄▽ ̄)ブ

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

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

相关文章

力扣hot10---大根堆+双端队列

题目&#xff1a; 大根堆思路&#xff1a; 维护最大值&#xff0c;应该首先想到大根堆。C中对应着priority_queue&#xff0c;这里用pair<int,int>来记录对应的值和在nums中的索引。所以有priority_queue<pair<int,int>> q。在大根堆中&#xff0c;用q.top()…

C++的类与对象(三):构造函数、析构函数、对象的销毁顺序

目录 类的6个默认成员函数 构造函数 语法 特性 析构函数 特性 对象的销毁顺序​​​​​​​​​​​​​​ 类的6个默认成员函数 问题&#xff1a;一个什么成员都没的类叫做空类&#xff0c;空类中真的什么都没有吗&#xff1f; 基本概念&#xff1a;任何类在什么都不…

使用swagger生成接口文档

使用swagger生成接口文档 有时候一份清晰明了的接口文档能够极大地提高前后端双方的沟通效率和开发效率。本文将介绍如何使用swagger生成接口文档。 swagger生成接口文档 swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言。Swagger与一组开…

MT笔试题

前言 某团硬件工程师的笔试题&#xff0c;个人感觉题目的价值还是很高的&#xff0c;分为选择题和编程题&#xff0c;选择题考的是嵌入式基础知识&#xff0c;编程题是两道算法题&#xff0c;一道为简单难度&#xff0c;一道为中等难度 目录 前言选择题编程题 选择题 C语言中变…

突破编程_前端_JS编程实例(目录导航)

1 开发目标 目录导航组件旨在提供一个滚动目录导航功能&#xff0c;使得用户可以方便地通过点击目录条目快速定位到对应的内容标题位置&#xff0c;同时也能够随着滚动条的移动动态显示当前位置在目录中的位置&#xff1a; 2 详细需求 2.1 标题提取与目录生成 组件需要能够自…

【PHP+代码审计】PHP基础——运算符

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

数据分析-Pandas两种分组箱线图比较

数据分析-Pandas两种分组箱线图比较 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&am…

【prompt四】Domain Prompt Learning for Efficiently Adapting CLIP to Unseen Domains

motivation 领域泛化(DG)是一个复杂的迁移学习问题,旨在学习未知领域的可泛化模型。最近的基础模型(FMs)对许多分布变化都具有鲁棒性,因此,应该从本质上提高DG的性能。在这项工作中,我们研究了采用视觉语言基础模型CLIP来解决图像分类中的DG问题的通用方法。虽然ERM使用标…

【设计模式】(四)设计模式之工厂模式

1. 工厂模式介绍 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 工厂模式有三种实现方式&#xff1a; 简单工厂模式工厂方法模式抽象工厂模式 2. 工厂方…

部署LVS+Keepalived高可用群集(抢占模式,非抢占模式,延迟模式)

目录 一、LVSKeepalived高可用群集 1、实验环境 2、 主和备keepalived的配置 2.1 yum安装ipvsadm和keepalived工具 2.2 添加ip_vs模块并开启ipvsadm 2.3 修改keepalived的配置文件 2.4 调整proc响应参数&#xff0c;关闭linux内核的重定向参数响应 2.5 将主服务器的kee…

SSRF服务器请求伪造原理和pikachu靶场实验

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、SSRF简介 SSRF全称&#xff1a;Server-Side Request…

深入理解操作系统Operator System(2)

目录 操作系统对上的管理 系统调用接口 用户操作接口&#xff08;库函数&#xff09; 系统调用和库函数的概念 结构层次示意图 总结 为什么要有操作系统❓ 上次主要介绍了操作系统的"管理"和操作系统对下的管理。本篇主要是对上的管理。 操作系统对上的管理 …

【运维】本地部署Gemma模型(图文)

工具简介 我们需要使用到两个工具&#xff0c;一个是Ollama&#xff0c;另一个是open-webui。 Ollama Ollama 是一个开源的大语言平台&#xff0c;基于 Transformers 和 PyTorch 架构&#xff0c;基于问答交互方式&#xff0c;提供大语言模型常用的功能&#xff0c;如代码生…

软考高级:电子商务角色和类型概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

个人网站展示(静态)

大学期间做了一个个人博客网站&#xff0c;纯H5编码的网站&#xff0c;利用php搭建了一个留言模块。 有需要源码的同学&#xff0c;可以联系我~ 首页&#xff1a; IT杂记模块 文人墨客模块 劳有所获模块 生活日志模块 关于我 一个推崇全栈开发的前端开发人员 微信: itrzzh …

人工智能时代的产品管理:如何成为下一代引领者

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

字符串标记高亮脚本

源码 #!/bin/bash # usage: # echo hhh|mark str [font_color] [background_color] # font_color and background_color is optional, default is black&whiterp_str$1 f_color30 b_color47if [ "${f_color}a" "a" ]; thenf_color30 fiif [ "${…

网络安全: Kali Linux 进行 MSFvenom 程序利用

目录 一、实验 1.环境 2. Kali Linux 进行 MSFvenom 程序利用 3. 创建计划任务自动运行 MSFvenom 程序 二、问题 1.在线加密解密 2.MSF 运行失败 3.MobaXterm 连接Ubuntu 失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统版本IP备注Kali Linux20…

ElasticSearch之排序,fielddata和docvalue

写在前面 es搜索返回结果的排序默认是按照得分的高低来排的&#xff0c;本文来看下如何按照字段来排序&#xff0c;实现类似于MySQL的order by xxx的效果。 1&#xff1a;什么是fileddata和doc_value 参考ElasticSearch之零碎知识点 和一文带你彻底弄懂ES中的doc_values和fi…

直击Spring源码——高级容器

高级容器都实现了ApplicationContext功能&#xff0c;平常说的上下文就是高级容器 public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolver { …