C语言入门 Day_11 判断的嵌套

news2024/11/19 3:28:37

目录

         前言

1.判断的嵌套

2.switch判断

3.易错点

4.思维导图


前言

之前我们都只是面临的简单判断,也就是面对的是两三种不同的判断条件,执行两三种不同的代码分支。

但是让我们遇到更复杂的情况,需要进行更复杂的判断的时候。就需要使用判断的嵌套了。

例如,我们会在周三,周六,周天三天进行跑步,但是跑步的条件还需要是晴天不能下雨,如果我们用if-else的判断,就需要写六种条件

分别是

1,今天是周三,今天没下雨,跑步

2,今天是周三,今天下雨,不跑步

3,今天是周六,今天没下雨,跑步

4,今天是周六,今天下雨,不跑步

5,今天是周天,今天没下雨,跑步

6,今天是周天,今天下雨,不跑步

我们要实现这样的判断代码,会有两个弊端

一个是分支很多(比如这里的6个分支),容易漏掉一两个分支;

第二个是判断条件很复杂,每个判断条件都是两个变量的逻辑运算组合。

翻译成代码的话,就需要写很多判断分支,且有判断条件:

if(today_is_wednesday && today_sunny){
  printf("跑步\n");
} else if (today_is_wednseday && !today_sunny){
  printf("不跑步\n");
} else if (today_is_saturday && today_sunny) {
    printf("跑步\n");
} else if (today_is_saturday && !today_sunny) {
    printf("不跑步\n");
} else if (today_is_sunday && today_sunny) {
    printf("跑步\n");
} else if (today_is_sunday && !today_sunny){
    printf("不跑步\n");
} else {
    printf("其他情况\n")
}

1.第一个判断条件 if

2.第二个判断条件  else if

3.第三个判断条件  else if

4.第四个判断条件  else if

5.第五个判断条件  else if

5.第五个判断条件  else if

6.第六个判断条件  else if

7.第七个判断条件  else

上述的代码,我们可以先判断今天是星期几,然后再判断今天是否下雨,这两就分成了两层的判断结构,代码结构变得更清晰了,一层一层的看,同时判断条件也简化了,每次只判断一个条件

if (today_is_wednesday) {
    if(today_sunny) {
         printf("跑步\n");
    } else {
         printf("不跑步\n");
    }
} else if (today_is_saturday) {
    if(today_sunny) {
        printf("跑步\n");
    } else {
        printf("不跑步\n");
    }
} else if (today_is_sunday) {
    if(today_sunny) {
        printf("跑步\n");
    } else {
        printf("不跑步\n");
    }
} else {
        printf("其他情况\n");
}

 1.第一层判断,今天是星期几

2.第二层判断,今天是否是晴天

1.判断的嵌套

1.1

我们来看一个最简单的嵌套判断代码:

​
if(a==100){
     if(b==200){
        printf("a的值是100,且b的值是200\n");  
        }
}

1.第一个判断条件,a是否等于100

2.第一个判断条件的花括号

3.第二个判断条件,b是否等于200

4.第二个判断条件的花括号

5.两层判断都符合的话,执行打印输出的代码

代码的判断顺序仍然是从上到下,第一次判断成立以后,再进行内层的判断。

这种嵌套判断语句里面,花括号的配对很比较容易出错的,我们需要记住的是从最内层的括号对开始配对,一个反花括号}需要跟上面最近的正花括号{配对。

1.2

else里面也可以嵌套,我们来看看下面的代码:

if( a == 100 ){
       printf("a是100\n" );
} else {
       if( b == 200 ){
          printf("a不是100,但b是200\n" );
       }
}

1.外层if判断的代码块

2.内层else判断的代码块

3.else里面嵌套的if判断

if (a==100){
   printf("a是100\n");
 } else {
   if(b==200){
   printf("a不是100,但b是200\n");
 } else{
   printf("a不是100,b也不是200\n");
 }
}

输出结果

a不是100,但b是200


我们再次回顾一下判断嵌套的收益:

1,增加代码的易读性;

2,降低判断条件的复杂度。

以此类推,判断的嵌套是非常灵活的。可以根据我们的需求使用,比如一个招聘需求,罗列了很多条件,实际上就是一个复杂的判断分支。

第一层,是否本科以上;第二层,是否计算机相关专业;第三层,是否有实习经历等等。

通过对嵌套判断的梳理,我们就能把各种不同的现实情况整理成一个程序可以通过不同条件来做的判断了。

同样是判断分支的处理,除了if-else这种几乎所有编程语言都有的判断语句结构,C语言还有自己独有的switch判断

2.switch判断

2.1

switch会根据判断条件符合哪个值,直接跳转到对应的分支执行代码。

switch语句通过将表达式的值与常量值进行比对,如果相等则执行后面的语句,如果不相等则跳到下一个case语句。

har grade = 'A';
switch(grade)
{
   case 'A' :
      printf("很棒!\n" );
      break;
   case 'B' :
      printf("还不错\n" );
      break;
   case 'C' :
      printf("勉勉强强\n" );
      break;
   case 'D' :
      printf("及格了\n" );
      break;
   
default :
      printf("不及格\n" );
}

1.定义字符变量grade,赋值B

2.判断成绩grade

3.如果grade == A,就执行下面两行代码

4.break 标志一个case分支语句的结束

2.2

1.如果成绩等于B,就执行下面两行代码

 case 'B':
      printf("还不错\n );
      break;

2.如果成绩等于C,就执行下面两行代码

 case 'C':
      printf("勉勉强强\n");
      break;

3.如果成绩等于D,就执行下面两行代码

case 'D':
      printf("及格了\n");
      break;

4.其余情况,执行default里面的代码

default:
printf("不及格\n");
}

我们对成绩进行了判断,A是很好,B是还不错,C是勉勉强强,D是及格,其余的成绩字符都是不及格

当switch语句运行时遇到break关键字时会跳出,意思就是当语句运行到break时就不再运行了,接下来剩下的case语句也不会再执行,switch语句结束

break是case判断分支里面的终点,所有的case语句都需要有个break

switch语句中,所有case无法囊括的情况,都会执行default中的代码。

switch的代码执行顺序也很像判断,只会执行其中的一个case分支的代码,或者default分支中的代码。

switch判断在大部分时候是跟if-esle判断等价的,他们可以互相交换,比如我们也可以用if-else来实现对学习成绩的判断:

char grade = 'B';
if (grade == 'A') {
    printf("很棒!\n");
} else if (grade == 'B') {
    printf("还不错\n");
} else if (grade == 'C') {
    printf("勉勉强强\n");
} else if (grade == 'D') {
    printf("及格了");
} else {
    printf("不及格\n");
}

不管是if判断还是switch判断,重点都在于我们先设置不同的判断条件,然后根据不同的判断条件来决定代码的执行顺序。

3.易错点

eg:

switch语句结构包含很多内容,

花括号,冒号,break,default等千万不要遗漏噢~

4.思维导图

 在撰写这篇文章时,我参考了《白纸编程》这个app的观点和思想,我要感谢他们对我的启发和帮助。

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

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

相关文章

编程题四大算法思想(三)——贪心法:找零问题、背包问题、任务调度问题

文章目录 贪心法找零问题(change-making problem)贪心算法要求基本思想适合求解问题的特征 背包问题0/1背包问题0/1背包问题——贪心法 分数背包问题 任务调度问题 贪心法 我在当前情况下,我把我做到最好。我也不管全局如何,整体如…

计算机图形软件(三)6-4 使用GLUT进行显示窗口管理

使用GLUT进行显示窗口管理 我们从使用简化的、最少的操作来显示一个图开始。使用 OpenGL 实用库的第一步是初始化GLUT。该初始化函数也能处理任何命令行变量,但不需要在第一个示例程序中使用参数。完成GLUT初始化的语句是 glutInit (&argc,argv); …

14 mysql bit/json/enum/set 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 bit/json/enum/set 类类型的相关…

Kafka环境搭建与相关启动命令

一、Kafka环境搭建 点击下载kafka_2.11-2.3.1.tgz文件链接 1、上传kafka_2.11-2.3.1.tgz,解压kafka_2.11-2.3.1.tgz,得到kafka_2.11-2.3.1文件夹 1)上传 #使用mobaxterm将 kafka_2.11-2.3.1.tgz 传入tools文件夹 #用下面代码进入tools文件…

seq2seq与引入注意力机制的seq2seq

1、什么是 seq2seq? 就是字面意思,“句子 到 句子”。比如翻译。 2、seq2seq 有一些特点 seq2seq 的整体架构是 “编码器-解码器”。 其中,编码器是 RNN,并将 最后一个hidden state(隐藏状态)【即&…

nacos闪退、密码修改等通用问题

问题1:nacos闪退 解决方案:通常是jdk环境变量配置有问题,nacos获取不到环境变量所以闪退。因为nacos的启动文件会获取JAVA_HOME,如果配置的不对,会直接闪退。如图所示,nacos启动文件最开始就是获取环境…

Rust 学习笔记(持续更新中…)

一、 编译和运行是单独的两步 运行 Rust 程序之前必须先编译,命令为:rustc 源文件名 - rustc main.rs编译成功之后,会生成一个二进制文件 - 在 Windows 上还会生产一个 .pdb 文件 ,里面包含调试信息Rust 是 ahead-of-time 编译的…

CleanMyMac X和腾讯柠檬清理功能对比区别介绍

Mac电脑的清理软件款式多样,不同软件之间的功能和清理效果各不相同,那么大家的Mac都用什么清理软件呢?小编看了一篇Mac清理软件介绍的知乎,里面大部分评论用户推荐的主要是两款清理软件:CleanMyMac和腾讯柠檬清理软件。…

Linux挖矿程序清除

1. 找到挖矿进程 2.找到病毒的文件地址 ls -l /proc/进程ID/exe3.删除文件命令 rm -rf 文件地址4.杀死挖矿进程 kill -9 进程ID

【教学类-35-01】学号+姓名+班级(描字帖)A4一页

背景说明: 本学期我带机动班,其中大4班去的频率比较高,与是我用大四班的名单做了一份 “描字帖”,在9月1日第一天见面时,孩子们用记号笔描字帖时,我也可以对这些孩子初步混个眼熟(聪明的&#x…

0基础学习VR全景平台篇 第95篇:VR实景智慧导航操作手册

一、实景导航前期准备工作及点位采集 (一)实景导航前期准备工作 (1)拍摄设备 1.推荐相机:全画幅的佳能 Canon EOS​ 5D Mark IV 2.搭配镜头:原厂的佳能 Canon EF卡口 8-15mm 全画幅鱼眼镜头 3.三角架 …

基于鱼鹰算法优化的BP神经网络(预测应用) - 附代码

基于鱼鹰算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于鱼鹰算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.鱼鹰优化BP神经网络2.1 BP神经网络参数设置2.2 鱼鹰算法应用 4.测试结果:5.Matlab代码 摘要…

【JavaEE进阶】Spring事务和事务传播机制

文章目录 一. 什么是Spring事务二. Spring中事务的实现1. Spring编程式事务2. 声明式事务2.1 trycatch下事务不会自动回滚的解决方案2.2 Transactional 作用范围2.3 Transactional 参数说明2.4 Transactional 工作原理 三. 事务的隔离级别1. 事务的四大特性2. Spring中设置事务…

15 mysql tiny/meidum/long blob/text 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 tiny/medium/long blob/text 类…

基于电气特征分析(ESA)的状态监测是如何实现的?

在现代工业和生产环境中,设备的正常运行和高效性对于维持生产的连续性和质量至关重要。然而,设备的故障和损坏可能会导致生产中断、不必要的维修成本以及生产效率的下降。为了应对这些挑战,状态监测技术已成为工业界的重要工具之一&#xff0…

C++之std::search应用实例(一百八十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

Redis数据结构总结

Redis 是一款开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。Redis 支持多种类型的数据结构,如字符串(String)、哈希(Hashes)、列表(Lists)、集合&…

45、springboot 文件上传到指定磁盘路径 及 上传成功后的文件回显

需求: 写一个文件上传的功能,把文件上传到指定的文件夹。 然后上传成功后的文件回显 ★ Spring Boot对文件上传提供的自动配置支持 Spring Boot的文件上传自动配置主要由 MultipartAutoConfiguration 和 MultipartProperties 两个类组成。MultipartPro…

linux并发服务器 —— 多线程并发(六)

线程概述 同一个程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域; 进程是CPU分配资源的最小单位,线程是操作系统调度执行的最小单位; Linux环境下,线程的本质就是进程; ps -Lf pid&…

【方案】基于视频与AI智能分析技术的城市轨道交通视频监控建设方案

一、背景分析 地铁作为重要的公共场所交通枢纽,流动性非常高、人员大量聚集,轨道交通需要利用视频监控系统来实现全程、全方位的安全防范,这也是保证地铁行车组织和安全的重要手段。调度员和车站值班员通过系统监管列车运行、客流情况、变电…