目录
聊聊分支语句
- 本章论述C语言中的分支语句,但是不只是C语言中有分支语句,是在所有的编程语言中都运用到了分支语句,而且分支语句呢,其实并没有太大的语言区别,其大部分的编程语言中的分支语句都是与C语言差不多,所以就算是其他编程语言也可以看本篇博客。
- 在生活中呢也是处处面临选择,而同样如此我们再编程语言中呢也会经常遇到选择,那么我们可以用我们的 分支语句(选择语句) 来进行编写,在分支语句中又分为if语句和which语句,这两个语句呢可以为我们提供像现实生活一样的选择。
if语句
首先我们先来了解if语句的结构。
单分支
//单分支
if(表达式1){
语句1;
}else{
语句2;
}
-
在上述单分支代码中
- 表达式1 :是对应的第一个if的判断表达式。
- 此时if语句中 :如果表达式1为真则进入语句1,若表达式1为假则进入语句2。
上述代码的运行逻辑为: 如果表达式1为真,则运行语句1,否则运行语句2。
C语言中只有0代表假,非0代表真
多分支
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
-
在上述单分支代码中
- 表达式1 :是对应的第一个if的判断表达式。
-
表达式2:是对应则第二个if的判断表达式。
上述代码的运行逻辑为:如果表达式1为真则运行语句1,否则如果表达式2为真则运行语句2,否则运行语句3。
if语句的栗子
栗子一. 判断时候可以提前退休(当身价大于一个小目标时候可以提前退休)
#include <stdio.h>
//代码1
int main()
{
int money = 0;
scanf("%d", &money);
if(money > 100000000)
{
printf("恭喜大佬,可以提前退休啦!!\n");
}
else{
printf("继续加油!!\n");
}
}
- 我们上述代码中实现的逻辑就是输入身价大于一个小目标,就输出"恭喜大佬,可以提前退休啦!!“否则就输出"继续加油!!”。
当然,不才也希望各位小伙伴们可以提前退休 [手动狗头]
栗子二. 输入对应星期的数字 则输出对应的中文星期日期
#include <stdio.h>
int main()
{
int week = 0;
scanf("%d", &week);
if(week == 1)
{
printf("星期一\n");
}
else if(week == 2)
{
printf("星期二\n");
}
else if(week == 3)
{
printf("星期三\n");
}
else if(week == 4)
{
printf("星期四\n");
}
else if(week == 5)
{
printf("星期五\n");
}
else if(week == 6)
{
printf("星期六\n");
}
else if(week == 7)
{
printf("星期日\n");
}
else{
printf("输入不正确\n");
}
}
- 我们上述中的逻辑就是输入对应星期的数字,则输出对应的中文星期日期的代码实现,但是多层的if、else if、else后会显得非常的厚重,而且代码的运行效率也低下。
- 此时引用出了我们的 switch语句 啦
多分支代码的陷阱与if、else 的匹配机制
在一下编码风格极其不好的初学者中,常常会出现这样的代码
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("妖魔鬼怪快离开\n");
else
printf("还有一件事\n");
return 0;
}
- 当写出这样子的代码极其容易让别人误解!! 误解为如果a不等于1则输出还有一件事
- 但此时的代码逻辑是如果a不等于1,则结束运行
- 如果a等于1且b等于2则输出"妖魔鬼怪快离开",如果a等于一且b不等于二则输出"还有一件事"
else的匹配机制:else是和它离的最近的if匹配的。
所以为了避免这样的误解我们可以加入代码块,并且进行一个良好的缩进。
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1){
if(b == 2){
printf("妖魔鬼怪快离开\n");
}
else{
printf("还有一件事\n");
}
}
return 0;
}
swhitch语句
- whitch语句常常用于多分支的情况。
了解switch语句结构
switch语句结构
switch(整形表达式){
语句项;
}
语句项内包含的内容
case 整形常量表达式:
语句;
- 在switch语句的判断条件是整型表达式
- 在case后面紧跟着的是整型常量表达式
- 整型表达式的结果会跳转到对应case后面对应的整型表达式结果相同的语句中
- 在case语句中经常包含break,但是不是一定要包含break。break的作用是不再进行switch中的后续的代码运行,即为结束switch
譬如我们上面写的栗子二就可以转变为我们的switch
#include <stdio.h>
int main()
{
int week = 0;
switch(week)
{
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;
case 7:
printf("星期天\n");
break;
}
return 0;
}
这样子我们也是可以达到栗子二的效果,而且比栗子二的运行效率高。
- 因为在例子二中如果输入7,if语句会一个if一个if的运行直到条件某个表达式结果为真输出"星期日"或者输出"输入不正确"。
- 而我们在switch语句中输入其他会直接跳转到case7中直接输出星期天,不需要在每一个case中进行条件判断。
若是输入1,则打印星期一,switch后续代码不再打印。
若此时我们把case里面所有break取消掉后再输入1
#include <stdio.h>
int main()
{
int week = 0;
switch(week)
{
case 1:
printf("星期一\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");
}
return 0;
}
此时我们程序运行的结果是输出: 星期一、星期二、星期三、星期四、星期五、星期六、星期天
因为此时在case中并没有break语句令程序结束switch语句的后续代码的运行。
switch中的break
- 那么想必各位心中也有所疑惑为什么说在case语句中经常包含break,但是不是一定要包含break呢。如果不包含break那不是整个switch语句都存在代码逻辑的缺失吗?
如果此时我们需要把星期一到星期五都划分为想857日,星期六星期天为857日。此时就可以利用没有break的形式,来实现简便的代码
#include <stdio.h>
int main()
{
int week = 0;
switch(week)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("想857日\n");
break;
case 6:
case 7:
printf("857日\n");
break;
}
return 0;
}
- 那此时我们输入1,代码则会一直进入case1后一直往下运行直到遇到break后结束switch语句的运行或者switch语句结束。屏幕上也打印:想857日
- 若此时我们输入6则它会直接跳过case1到5的语句直接运行到case6后继续往下运行遇到break后结束switch语句的运行或者switch语句结束。屏幕上也打印:857日
switch中的define
如果此时我们输入8、9、10或者0、-1、-2的情况下它并不会提醒我们,所以我们也需要有一个类似于else的语法形式。即为我们的 define。
#include <stdio.h>
int main()
{
int week = 0;
switch(week)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("想857日\n");
break;
case 6:
case 7:
printf("857日\n");
break;
define:
printf("输入错误!\n");
break;
}
return 0;
}
我们如果再输入8、9、10或者0、-1、-2等case整型常量表达式中没有的数字,则输出"输入错误"。
关于switch中的case排序问题
在C语言标准中没有对switch语句中case整型常量表达式中规定排序,所以case整型常量表达式并没有顺序可言可以横七竖八,default的位置也没有排序可言可以放在中间可以放在前面也可以放在末尾。但是我们说要有一个好的编码风格所以我们尽量还是以顺序的形式来进行代码的编写。因为如果写得横七竖八则很容易引发逻辑上的错误,但是代码编译上是没有问题的,会给后期debug时增加困难
#include <stdio.h>
int main()
{
int week = 0;
switch(week)
{
case 1:
define:
printf("输入错误!\n");
case 2:
case 3:
case 6:
case 5:
printf("想857日\n");
break;
case 4:
case 7:
printf("857日\n");
break;
}
return 0;
}
譬如上述代码如果我们在编译器上编译则编译器不会报错但是
- 如果我们输入:1 程序输出:输入错误、想857日。
- 输入:4 程序输出:857日
- 输入:6 程序输出:想857日。
若是栗子中还是不了解其其中的所以然可以看不才早期博客
链接: 【C语言】分支语句switch-Bucai_不才
以上就是本章所有内容。若有勘误请私信不才。万分感激!