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

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...