C语言入门 Day_11 判断的嵌套

news/2024/7/24 11:42:05 标签: c语言, java, 开发语言

目录

         前言

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.niftyadmin.cn/n/4993176.html

相关文章

R语言图形绘制

(1)条形图 > barplot(c(1,2,4,2,6,4,3,5)) > barplot(c(1,2,4,2,6,4,3,5),horiz TRUE) #besideTRUE 表示将多个组别的图形并排显示,使它们在水平方向上对齐 #而当 besideFALSE(默认值)时,多个组别的…

Self-supervised 3D Human Pose Estimation from a Single Image

基于单幅图像的自监督三维人体姿态估计 主页: https://josesosajs.github.io/ imagepose/ 源码:未开源 摘要 我们提出了一种新的自我监督的方法预测三维人体姿势从一个单一的图像。预测网络是从描绘处于典型姿势的人的未标记图像的数据集和一组未配对…

C语言:指针数组

一、指针数组介绍 指针数组本质是数组,是一个存放指针的数组 代码如下: arr1和arr2就是指针数组 int main() {int a 1; int *pa &a;int b 2; int *pb &b;int c 3; int *pc &c;int d 4; int *pd &d;int e 5; int *pe &e;in…

QTday3(对话框、发布软件、事件处理核心机制)

一、Xmind整理: 二、上课笔记整理: 1.消息对话框(QMessageBox) ①基于属性版本的API QMessageBox::QMessageBox( //有参构造函数名QMessageBox::Icon icon, //图标const Q…

Android SDK 上手指南||第九章 Manifest文件

第九章 Manifest文件 到目前为止,我们已经熟悉了Android项目中的各个组成部分,包括其资源。在今天的文章中,我们将以项目Manifest文件作为核心内容。 对于一个项目来说,Manifest既可以很简单、也可以很复杂,其具体情…

华为云服务

【计算】 【存储】 对象存储服务 OBS 对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。 OBS系统和单个桶都没有总数据容量和对象/文件数量的限制…

(数字图像处理MATLAB+Python)第十一章图像描述与分析-第三、四节:几何表述和形状描述

文章目录 一:几何描述(1)像素间几何关系A:邻接与连通B:距离 (2)像素间几何特征A:位置B:方向C:尺寸 (3)程序 二:形状描述&a…

error: ‘std::_hypot‘ has not been declared using std::hypot;

Cmake 使用qt的编译器 编译opencv时 执行mingw32-make时出现了错误 本质原因就是 _hypot 没有声明。所以找到对应的文件声明一下 就行了。 E:\*****\Qt5.14.1\Tools\mingw730_64\lib\gcc\x86_64-w64-mingw32\7.3.0\include\c 下面的math.h 文件。 可以看到这个文件有一个…