当前位置: 首页 > 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&…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…...