C语言修炼——三大结构之分支结构!!!


学习噜!!!


分支结构

1.浅析分支结构

从上一篇顺序结构的文章,我们知道了C语言程序的编写离不开结构化的设计,除了最最基本的顺序结构外,我们C语言还有分支结构
当我们还是小朋友的时候,要换牙齿了,家里就会有个规矩,爷爷奶奶说下面的牙齿要扔到屋顶上面的牙齿要扔到低处或者埋土里,这样牙齿才能长的整齐,每次换牙都要记住这个规矩,生怕弄错了牙齿长歪了。其实这里面就包含了一个分支结构
分支结构导图
我们来分析一下这个图片:
用我们编程化 的语言来说就是,在换牙齿这个函数或某个模块中,我们希望程序完成牙齿长整齐的功能,也就是我们的目标结果。而我们只有按规则(即下面的牙齿丢屋顶,上面的牙齿丢低处)去做,才能得到我们想要的结果。那么在执行动作之前,这里有个分支丢屋顶丢低处,我们需要给出判断条件只要满足这个判断条件(上面的牙齿或下面的牙齿),程序就往对应方向执行,最终完成我们这次换牙齿的事件。

2.分支结构的介绍

我们通常使用ifswitch语句实现分支结构

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+bab都为整型变量,且case后面需空格再接整型常量表达式,如表达式——1和表达式——0+1。这里需要注意一个switch语句的规则:当我们表达式的结果找到了相应的case后面的值,那么包括这个case,从这个case开始,不断向下执行语句,无需再判断case后的值。所以我们需要请出我们的break——跳出循环或终止程序流使跳出if 语句,我们可以根据实际情况,来选择是否使用break,若不想要分支重叠,可以在每个分支后都加上break

来看代码和结果:
switch
可以看到,上述代码,按照现实逻辑区分并列出了各种情况,很好的展示了多分支结构分支重叠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)你的好朋友们!!!


good!

欢迎关注我的账号!!!


我会将我对C语言的理解和认知,精心写下来,这不仅是对我知识的梳理与回顾,更是一种分享,供后来者借鉴(无论妙笔或谬误)与学习,亦给自己一个被先行者校正、勘误和交流的机会。(循环结构在后面,觉得有用的话,移步看看吧。)Bye~

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

David猪大卫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值