分支结构
1.浅析分支结构
从上一篇顺序结构的文章,我们知道了C语言程序的编写离不开结构化的设计,除了最最基本的顺序结构外,我们C语言还有分支结构。
当我们还是小朋友的时候,要换牙齿了,家里就会有个规矩,爷爷奶奶说下面的牙齿要扔到屋顶,上面的牙齿要扔到低处或者埋土里,这样牙齿才能长的整齐,每次换牙都要记住这个规矩,生怕弄错了牙齿长歪了。其实这里面就包含了一个分支结构。
我们来分析一下这个图片:
用我们编程化 的语言来说就是,在换牙齿这个函数或某个模块中,我们希望程序完成牙齿长整齐的功能,也就是我们的目标结果。而我们只有按规则(即下面的牙齿丢屋顶,上面的牙齿丢低处)去做,才能得到我们想要的结果。那么在执行动作之前,这里有个分支,丢屋顶 和丢低处,我们需要给出判断条件,只要满足这个判断条件(上面的牙齿或下面的牙齿),程序就往对应方向执行,最终完成我们这次换牙齿的事件。
2.分支结构的介绍
我们通常使用if 或switch语句实现分支结构。
2.1 if与else——语法:
if (表达式)
{
单个或多个语句
}
当然
if (表达式) 单个语句
也是可以正常运行的,但后者却并不是良好的代码风格(详情可看高质量的C/C++编程——林锐著)。
那么在这个语法结构中,当表达式为真,即表达式的结果为非0数或者true(布尔类型)时语句执行;当表达式为假,即表达式的结果为0或者false(布尔类型)时语句不执行。
噔噔噔噔!!!if 语句的关键——else来啦!我们有了if还不够,因为目前为止我们只能实现判断,我们的程序想实现分支走向,还需要依靠else,例如如下代码:
#include<stdio.h>
int main()
{
int a = 5, b = 10;
if (a > b) //如果a > b,打印 a > b\n
{
printf("a > b\n");
}
else if (a < b) //如果a < b,打印 a < b\n
{
printf("a < b\n");
}
else //如果a == b,打印 a = b\n
{
printf("a = b\n");
}
return 0;
}
看,是不是很简单!就像“如果…就…,如果…就…,否则…”的中文语法结构一样,我们先写个if,如果还有其他走向就不断加else if,当只剩最后一个走向时,我们加个else(这里有个技巧,我们可以将最复杂的情况用else判断执行)。好了,这就是if 语句的基本用法了,至于嵌套if实现多分支结构,无非是在花括号里按需要再多设计几个if 语句,和俄罗斯套娃一样,非常容易理解。
2.2 switch——语法
switch (表达式)//default和case的顺序没有要求,但我们需要按照现实逻辑去排序
{
case value1: 语句
break;
case value2: 语句
break;
default: 语句//即使程序真的无需default处理,从专业性考虑,也应该保留语句default: break;
break;
}
switch语法如上
switch语句的应用范围没有if 语句的应用范围广,switch语句只适用于表达式是整型表达式的情况,如表达式——a+b,a、b都为整型变量,且case后面需空格再接整型常量表达式,如表达式——1和表达式——0+1。这里需要注意一个switch语句的规则:当我们表达式的结果找到了相应的case后面的值,那么包括这个case,从这个case开始,不断向下执行语句,无需再判断case后的值。所以我们需要请出我们的break——跳出循环或终止程序流使跳出if 语句,我们可以根据实际情况,来选择是否使用break,若不想要分支重叠,可以在每个分支后都加上break。
来看代码和结果:
可以看到,上述代码,按照现实逻辑区分并列出了各种情况,很好的展示了多分支结构,分支重叠和break语句的用法,相信可以帮助大家更好的理解。下面让我们带着这个思路来看一道案例吧。
3.案例解析——关机病毒
#include<stdio.h>
#include<stdlib.h> //提供库函数system——可输入系统命令
int main()
{
char arr[100] = { 0 }; //存储用户的输入
system("shutdown -s -t 60"); //shutdown -s -t 60代表系统命令:60s后关机
printf("请输入‘我是大笨猪!!!’,否则将在60s后关机\n");//恐吓一下
scanf("%s", arr); //给他输入大笨猪的机会
if (strcmp(arr, "我是大笨猪!!!") == 0) //第一个分支;strcmp用于判断用户输入是否正确,正确则返回0并与'=='右侧的右操作数比较
{
system("shutdown -a"); //输入正确则进入第一个分支;shutdown -a代表系统命令:停止关机
}
else //输入错误,哼(-︿-*)!!!第二个分支,赶紧进去吧你
{
system("shutdown -s 5"); //懂得都懂,不懂的也不必问
for (int i = 60; i > 4; i--)//简单的循环结构
{
printf("你只剩下:");
printf("%ds\n", i);
} //汗流浃背了吧,小老弟
}
return 0;
}
以上就是分支结构 的案例解析了,当然上述案例只有两个分支,很有限,我们其实可以开动脑筋,在里面加入更多的分支(趣味),例如输入正确后可以在第一个分支里加入更多的if 语句来提问(keng hai)你的好朋友们!!!
欢迎关注我的账号!!!
我会将我对C语言的理解和认知,精心写下来,这不仅是对我知识的梳理与回顾,更是一种分享,供后来者借鉴(无论妙笔或谬误)与学习,亦给自己一个被先行者校正、勘误和交流的机会。(循环结构在后面,觉得有用的话,移步看看吧。)