当前位置: 首页 > news >正文

C语言学习_DAY_4_判断语句if_else和分支语句switch_case【C语言学习笔记】

高质量博主,点个关注不迷路🌸🌸🌸

目录

1.案例引入

2.if判断语句的语法与注意事项

3.switch多分支语句的语法与注意事项


前言: 书接上回,我们已经学习了所有的数据类型、运算符,并且可以书写简单的运算式子来解决一些问题了。那么下面进入到C语言学习的下一阶段:判断语句 的学习。对于任意一种编程语言,我们用的最多的几种结构,无非就是 顺序结构、分支(判断)结构 与 循环结构,顺序结构比较简单,就是指程序是按从上到下的顺序依次执行的一种结构。这种结构我们最初在写第一段C语言的程序时就用过了,因此无须赘述。而今天学习第二种结构:分支(判断结构),并用它解决更多的编程问题。

1.案例引入

首先,如前言所述,学习每一门编程语言,我们都要学习顺序结构、判断结构和循环结构这三种结构,这是从宏观上看,我们必须要学习的三种结构。那么判断结构,有哪些实际的意义呢?我们下面举一个简单的例子:

假如有这么一个需求:

我们需要让用户输入两个数,并帮他其中较大的那个数字打印在控制台,我们要怎么做呢?

这需求看起来很简单,但我们目前学习的内容是不足以解决这类比较并执行的任务的。因此需要引入if-else判断语句。


2.if判断语句的语法与注意事项

下面用一段简单的代码,展示if-else判断语句的语法格式:

#include<stdio.h>int main(){int a = 3;int b = 4;if(a > b){printf("%d",a);}else{printf("%d",b);}return 0;
}

从这段代码可以看出if-else的语法格式:

if (判断表达式){

        若表达式为真,执行的内容

}

else{

       若表达式为假,执行的内容

}

其中具体的判断表达式,则根据我们的需求进行编写,如果你要问什么是表达式,请看上一篇笔记。

之后我们补充几点注意事项:

首先,if-else语句,可以没有else,只有if,即else部分并不是必须的,但是if是必须有的,

不能没有if来一个else。(这个很好理解,if才是做判断的地方,没有if,else自然没有意义)

其次,如果if语句后面的执行部分,只有一句代码,可以不写大括号,即:if () 表达式

但这种写法不推荐,推荐无论是否是一行执行代码,都写上大括号,便于代码的阅读。

接下来是if-else if-else 的多判断语句的语法格式:

#include<stdio.h>int main(){int x = 3;if(x > 0){printf("x是正数");}else if (x > 0){printf("x是负数");}else{printf("x是0");}return 0;
}

上面这段代码的逻辑是:

如果x的值大于0,则输出x是正数,否则执行判断x是否小于0,如果是,则输出x是负数,如果前两个都不满足,则x为0。

于是得到if-else if-else多判断语句的语法格式:

if (判断表达式1){

        若表达式1为真,执行的内容

}

else if(判断表达式2){

       若表达式1为假,但判断表达式2为真,执行的内容

}

else{

       若表达式1和2都为假,执行的内容

}

需要注意的是,if-else if-else型的多判断语句,else if的数量可以是无穷多的,例如我们想要判断当前用户输入的值对应的月份,可以这么写:

#include<stdio.h>int main(){int x = 3;if(x == 1){printf("一月");}else if (x == 2){printf("二月");}else if (x == 3){printf("三月");}...return 0;
}

注意,多个else if时,每个表达式都是按从上到下顺序访问的,即:先判断第一个if的表达式,如果为假,则判断第一个else if,如果还为假,则判断第二个else if,如果判断到某个分支,发现成立(为真),则不会继续向下判断和执行其他的分支的内容。


3.switch多分支语句的语法与注意事项

下面讲解分支结构中比if稍微不常用一些的switch语句。这种语句没有if那么“火爆”,但作为系统学习的入门笔记,需要进行讲解。

我们先看这样一个小的案例:

假如我们需要实现:当用户输入一个在[1,7]之间的整数时,我们在控制台打印该数字对应星

期几,例如用户输入3,我们需要在控制台输出:星期三。

首先,应该想到可以用上面学习的if-else if-else的多重判断语句实现,但这样写,代码量太大了,而且看起来比较臃肿,不够简洁,我们能否用一种简洁的方式实现呢?于是我们引入switch case的分支语句:

switch(num){


        case num1:


            执行内容


            break;


        case num2:


            执行内容


            break;


             ...


    }

上面是switch case语句的语法格式,它的执行逻辑是这样的:

在switch()中,放置一个整型数或者整型变量,而后在下面的case关键字后面写上一个整型数或者整型变量,当switch()的括号中的数字等于case关键字后面的整型数时,会执行对应的内容,其中case 的个数是无限的。

于是基于switch case 的语法特点,我们很容易实现上面的输出周几的需求:

#include<stdio.h>int main(){int num;printf("请输入[0-7]中的一个数字\n");scanf("%d",&num); switch(num){case 1:printf("星期一");break;case 2:printf("星期二");break;case 3:	printf("星期三");break;case 4:printf("星期四");break;case 5:printf("星期五");break;case 6:printf("星期六");break;case 7:printf("星期日");break;}return 0; 
}

下面补充一个重要的细节,这个细节在switch case中经常容易被忽略:

break关键字的使用:break关键字,表示中断的意义。在switch case语句中,每一个case最后都需要有一个break,否则会导致执行该case之后,并不会跳出switch case结构,而是会继续向下执行下一个case,这会导致我们的程序出现意外的错误。例如我们看下面这段代码:

#include<stdio.h>int main(){int num = 2;switch(num){case 1:printf("星期一");break;case 2:printf("星期二");case 3:	printf("星期三");break;case 4:printf("星期四");break;case 5:printf("星期五");break;case 6:printf("星期六");break;case 7:printf("星期日");break;}return 0; 
}

这段代码在case 2的后面没有break,而且当前的num变量的值恰好是2,于是我们运行代码会发现:

也就是说,最终输出了两个case 的内容,这与我们的预期显然是不对的,我们的预期,此时只应该输出星期二,因此我们一定要注意break关键字不要漏掉了!!! 

那么到这里,我们的分支(判断)结构以及在C语言中的两种实现方式:if else和switch case语句就都学习完毕了。

相关文章:

C语言学习_DAY_4_判断语句if_else和分支语句switch_case【C语言学习笔记】

高质量博主&#xff0c;点个关注不迷路&#x1f338;&#x1f338;&#x1f338;&#xff01; 目录 1.案例引入 2.if判断语句的语法与注意事项 3.switch多分支语句的语法与注意事项 前言: 书接上回&#xff0c;我们已经学习了所有的数据类型、运算符&#xff0c;并且可以书写…...

实验07 赫夫曼编码及综合2022(带程序填空)

A. 【程序填空】赫夫曼编码题目描述给定n个叶子的权值&#xff0c;根据这些权值构造huffman树&#xff0c;并输出huffman编码参考课本第6.6节的算法6.12&#xff0c;注意算法中数组访问是从位置1开始赫夫曼构建中&#xff0c;默认左孩子权值不大于右孩子权值如果遇到两个孩子权…...

分布式 CAP BASE理论

文章目录CAP简介不是所谓的“3 选 2”CAP 实际应用案例BASE简介BASE 理论的核心思想总结CAP 简介 在理论计算机科学中&#xff0c;CAP 定理&#xff08;CAP theorem&#xff09;指出对于一个分布式系统来说&#xff0c;当设计读写操作时&#xff0c;只能同时满足以下三点中的…...

三调地类筛选器,Arcgis地类筛选

三调地类在使用是&#xff0c;需要分类统计&#xff0c;这个可以用于筛选&#xff1b; 标准地类筛选 农用地&#xff1a; DLBM IN(0303,0304,0306,0402,0101,0102,0103,0201,0201K,0202,0202K,0203,0203K,0204,0204K,0301,0301K,0302,0302K,0305,0307,0307K,0401,0403,0403K…...

华为OD机试 - 密室逃生游戏(Python)

密室逃生游戏 题目 小强增在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码 K(升序的不重复小写字母组成) 的箱子, 并给出箱子编号,箱子编号为 1~N 。 每个箱子中都有一个 字符串 s ,字符串由大写字母、小写字母、数字、标点符号、空格组成, 需要在这些字符串中…...

白话C#之委托

一、什么是委托&#xff1f; 书本上是这样来定义委托的&#xff1a; 委托是一种动态调用方法的类型&#xff0c;属于引用型。委托是对方法的抽象和封装。委托对象实质上代表了方法的引用&#xff08;即内存地址&#xff09;。委托通常是委托某个方法来实现具体的功能。当我们调…...

jsp高校教职工管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 高校教职工管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助mvc模式 serlvetdaobean方式开发&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式 开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#…...

2023年数学建模美赛A题(A drought stricken plant communities)分析与编程

2023年数学建模美赛A题&#xff08;A drought stricken plant communities&#xff09;分析与编程 2023年数学建模美赛D题&#xff08;Prioritizing the UN Sustainability Goals&#xff09;分析与编程 特别提示&#xff1a; 1 本文介绍2023年美赛题目&#xff0c;进行深入分析…...

Delphi 中自定义鼠标指针图像

Dephi中的鼠标指针是可以自由定义的&#xff0c;如果是使用系统提供的图标&#xff0c;那么直接通过可视控件的Cursor属性赋值就可以。例如设置Form的鼠标为 crHourGlass 沙漏&#xff1a;Form1.Cursor : crHourGlass;也可以在设计期&#xff08;IDE环境中&#xff09;直接更改…...

【计算机网络】物理层

文章目录物理层的基本概念传输媒体同轴电缆双绞线光纤电力线电磁波红外线可见光传输方式串行传输和并行传输同步传输和异步传输单工&#xff0c;半双工​以及全双工通信编码与调制常用编码不归零编码归零编码曼彻斯特编码差分曼彻斯特编码基本调制混合调制信道的极限容量奈氏准…...

华为OD机试 - 最少停车数(Python)

最少停车数 题目 特定大小的停车场 数组cars表示 其中1表示有车0表示没车 车辆大小不一,小车占一个车位(长度1) 货车占两个车位(长度2) 卡车占三个车位(长度3) 统计停车场最少可以停多少辆车 返回具体的数目 输入 整型字符串数组cars 其中1表示有车0表示没车 数组长度 <…...

面试题-前端开发JavaScript篇上(答案超详细)

文章目录 闭包说一下类的创建和继承如何解决异步回调地狱说说前端中的事件流如何让事件先冒泡后捕获说一下事件委托说一下图片的懒加载和预加载mouseover 和 mouseenter 的区别JS 的 new 操作符做了哪些事改变函数内部 this 指针的指向函数(bind,apply,call 的区别)JS 的各种…...

【计算机网络】运输层

文章目录运输层概述运输层端口号、复用与分用的概念UDP和TCP的对比TCP的流量控制TCP的拥塞控制TCP超时重传时间的选择TCP可靠传输的实现TCP的运输连接管理TCP的连接建立(3次握手)TCP的连接释放(4次挥手)TCP报文段的首部格式运输层概述 这里我们对运输层进行概述&#xff0c;之…...

20222023华为OD机试 - 基站维修工程师(Python)

基站维修工程师 题目 小王是一名基站维护工程师,负责某区域的基站维护。 某地方有 n 个基站( 1<n<10 ),已知各基站之间的距离 s( 0<s<500 ), 并且基站 x 到基站 y 的距离,与基站 y 到 基站 x 的距离并不一定会相同。 小王从基站 1 出发,途经每个基站 1 …...

21. 合并两个有序链表

题目链接&#xff1a;解题思路&#xff1a;遍历&#xff0c;双指针&#xff1a;因为两个链表有序&#xff0c;所以只需要依次比较两个元素的大小&#xff0c;然后添加到新的链表中即可first指针指向第一个链表l1&#xff0c;second指针指向第二个链表l2&#xff0c;answer保存合…...

产品经理知识体系:5.如何做好产品数据分析?

数据分析 思考 笔记 数据分析 思路 基于用户路径&#xff1a;用户的活动路径&#xff0c;操作流程等行为数据。 基于产品节点&#xff1a;转化率、占比 分析类型 先定性&#xff1a;先抛出问题、提出假设 再定量&#xff1a;数据验证问题、验证假设 先定性、再定量、最后得…...

详解垃圾回收算法,优缺点是什么?|金三银四系列

本文详细介绍了在 JVM 中如何判断哪些对象是需要回收的&#xff0c;以及不同的垃圾回收算法以及优缺点。点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达上篇文章详细介绍了 JVM 的结构以及其内存结构&#xff0c;需要阅读请移步。本文主要…...

Android 虚拟 A/B 详解(七) SnapshotManager 之标识文件

本文为洛奇看世界(guyongqiangx)原创,转载请注明出处。 原文链接:https://blog.csdn.net/guyongqiangx/article/details/129098176 Android 虚拟 A/B 分区《Android 虚拟 A/B 分区》系列,更新中,文章列表: Android 虚拟 A/B 详解(一) 参考资料推荐Android 虚拟 A/B 详解(二…...

LA@生成子空间@范数@衡量矩阵大小@正交化

文章目录线性组合与线性方程组生成子空间范数LpL^pLp范数向量点积用范数表示ref衡量矩阵大小特殊类型矩阵和向量对角阵向量长度性质单位向量向量单位化(正规化)正交向量正交正交向量组标准正交基正交化(schmidt)正交矩阵矩阵是正交矩阵的充要条件对称矩阵正交相似概念区分&…...

MT2012_竹鼠的白色季节

竹鼠的白色季节 #include<bits/stdc.h> #include<algorithm> using namespace std;/*思路&#xff1a;从小到大排序&#xff0c;然后依次往后遍历即可*/ int main( ) {int n,d;cin>>n>>d; int tmp;vector<int>nums;for(int i0;i<n;i){cin&…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...