> 文档中心 > 分支语句if switch

分支语句if switch

在这里插入图片描述

在C语言中有很多操作符,我们也经常使用,但是否会有些细节了解不到位呢?

一 . if 和 else

1.1 if else语句

if 是C语言中的条件语句,但它的逻辑是如何进行的呢?

    int main(){int a = 1;if (a){printf("胡杨\n");}else{    printf("树下\n");}return 0;}

这里是先判断a 是否为真才进行下一步操作的。那么就引出几个问题。

1.什么是真?

真,是逻辑上表述。1是真,但真不仅仅是1,而是非0。那么很明显,
假就是0。

2 .怎么表示真?

一般用布尔型常量的值表示真或假。

3.C语言中有没有真正的布尔型常量呢?

在C语言上在C99才引入布尔型变量这一说法,之前都是在C++中有布尔行变量。而在C99中引入布尔常量,引用头文件,有_Bool型变量赋值为FALSE 或 TRUE,表示 0 或 1。所以说在C99之后才有布尔型常量,在之前是没有的。

#define bool_Bool//库里面定义#define false0#define true1int main(){_Bool a = true;_Bool b = false;if (b){printf("hello world\n");}}

1.2 if else实现分支循环

刚才已经说过了if,下面是跟if经常一起使用的else,重点说一下if else实现
单分支循环和多分支循环,下面是实现单分支

int main(){int a = 1;if (a == 1){printf("嗨,帅哥\n");}else{printf("你好,美女\n");}return 0;}

上面说过了,if是先判定在进行操作,单独的if是没有分支功能的,需要else匹配使用才有分支功能。这是单分支,那么多分支呢?那么就需要另一个东西了,叫else if(条件),实现多分支。

    int day = 7;if (day >= 1 && day <= 5){printf("星期一\n");}else if (6 == day){printf("星期六\n");}else if (7 == day){printf("星期日\n");}else{printf("输入错误");}

需要注意的是else if后要加条件,else是不加条件的。
tip 1:
else if (day == 7),不推荐这样写,如果少写一个=就会变成赋值,
推荐写成else if(7 == day)如果写错,编译器就会报错,(非常友好)*

1.3 关于悬空else问题

先看一个代码猜猜看

    int a = 10;int b = 1;if (10 == a)if (11 == b)printf("hello\n");else   printf("world\n");

相信你一定有答案了,没错,就是输出world,虽然else是和第一个f(10 == a)对齐,但是else会与最近的if匹配在一起,所以修改代码格式后变为了下面的样子。

    int a = 10;int b = 1;if (10 == a){if (11 == b){printf("hello\n");}else{printf("world\n");}}
 tip 2: 好的代码风格会是阅读者省心省力,也不会导致自己看的时候迷茫。

二 .switch case break default

2.1 .switch

switch语句常常用来判断多分支情况,但是switch是没有能力进行分支的,这就需要另一个关键词 case 来进行分支,请看下面代码。

    int day = 7;    switch(day)   { case 1printf("星期一\n"); case 2:     printf("星期二\n"); case 3:     printf("星期三\n");    case 4:     printf("星期四\n");    case 5:     printf("星期五\n"); case 6:     printf("星期六\n"); case 7:     printf("星期天\n");}

这个代码能输出你想要的结果吗?,结果是不能,它会输出从星期一到星期日。 而不会,分情况输出,为什么呢?这就要说下break关键词了。

2.2.switch和case,break联合使用实现多分支

switch是对条件的判断,来决定去哪个case进去,而case只是一个入口,没办法决定出口,那就需要break来让数据“请”出去了。

    int day = 7;    switch(day)   { case 1printf("星期一\n");     break; case 2:     printf("星期二\n");     break; case 3:     printf("星期三\n");     break;     case 4:     printf("星期四\n");     break;     case 5:     printf("星期五\n");     break; case 6:     printf("星期六\n");     break; case 7:     printf("星期天\n");  break;   }

这样才是你想要的样子,但是如果day是8呢?会走哪个case口呢?答案是会直接跳出程序,什么也不打印。

2.3 default作用

default在switch…case句块中的意思是缺省情况,它表示在没有参数被
提供的时候,执行defalut块中的语句,如果不写也是会跳出的。但是建议写上是自己有个良好的代码风格。另外不要再default中加入其他的功能。
例如

    int day = 8;switch (day){    case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;default:printf("星期日\n");break;}

这里default中打印了星期日,功能也能实现,但是不推荐这样写,default表示默认选项,而星期日不是默认选项。另外,default字句可以再任何地方。

2.4 多个case匹配问题

一个case必须要break吗?不是这样的,可以有多个case匹配一个的场景。
例如

    int day = 5;switch (day){    case 1:case 2:case 3:case 4:case 5:printf("工作日\n");case 6:case 7:pruintf("休息日\n");break;default:printf("数字无效\n");break;}

2.5 switch 和if对比

说完switch和if后对比一下,switch和if都先进行判断,都没有分支过功能其中if要和else if一起才有分支功能,而switch则是通过case进行分支功能。这还是很相似的。至于用谁好点呢?看分支情况了,另外case后的小数字,可以
用enum枚举常量代替,提高代码可读性哦。

后续

明天会更新const, static的内容(未完待续。。。)
这是第一篇博客,有不好的地方,希望大佬多多指教,互关哦。