LinuxC——分支语句

在C程序中,我们经常会根据一个表达式的结果来执行不同的操作。这个时候我们就需要用到分支语句。

本篇博客将介绍几种分支语句。

一、if 语句

if语句的通用形式

if (expression)
    statement

if语句的用法,首先对expression求值,如果这个值为真,那么就执行statement,如果为假,那么就跳过statement,继续执行下一条语句。

通常,expression是一个关系表达式,即比较两个量的大小。

用一个例子来说明这个if语句的用法

#include <stdio.h>

int main()
{
	int a = 1;
	int b = 2;

	if(a > b)
	{
		printf("a > b\n");
	}

	printf("第一次比较结束\n");

	if(a < b)
	{
		printf("a < b\n");
	}

	printf("第二次比较结束\n");

	return 0;
}

这个例子首先给a,b分别初始化,然后执行第一个if语句,a > b 为假,所以不会打印 a > b,会跳过这一句,接下去,输出“第一次比较结束”。程序继续执行,便遇到了第二条 if 语句,判断 a < b 成立,所以会执行里面的printf语句,打印 a < b,然后程序继续执行,打印“第二次比较结束”,程序继续执行至结束。

下面是程序的结果


二、if else 语句

if else 语句的通用形式

if (expression)
    statement1
else
    statement2

if else 语句的用法,首先对expression求值,如果值为真,那么就执行statement1,如果值为假,那么就执行statement2。

使用if else 语句的时候最好养成良好的习惯,要注意缩进。

用一个简单的例子来看一下if else语句的用法

#include <stdio.h>

int main()
{
	int a = 1;
	int b = 2;

	if(a > b)
	{
		printf("a > b\n");
	}
	else
	{
		printf("a < b\n");
	}

	return 0;
}

上面的代码首先分别给a和b初始化,然后判断a > b 是否成立,如果成立就输出 a > b, 否则就输出a < b。

最后输出的结果是这样的。


if语句的嵌套

有时候我们会需要将几个if语句进行嵌套使用,这个时候就需要注意if 和 else的匹配。

【注】:else 总是和离它最近的一个并且没有匹配的 if 进行匹配。

首先来看一个糟糕的例子

int a = 1;
int b = 2;
int c = 3;

if(a > b)
	if(b > c)
		printf("测试语句1\n");
else
{
	printf("测试语句2\n")
}
else
{
	printf("测试语句3\n");
}

上面的这两个else和if该怎么匹配呢,首先要寻找离第一个else最近且没有匹配的 if 进行匹配,我们可以看到第二个 if 就符合这两个条件,所以第一个else应该与第二个if匹配。很自然的第一个if 和 最后一个else 匹配。

当然上面这是一个糟糕的例子,很多人看了都会头大,这个时候我们就需要有良好的编程规范,所以我们要适当的缩进并且加上大括号,来看一下改进后的例子

int a = 1;
int b = 2;
int c = 3;

if(a > b)
{
	if(b > c)
		printf("测试语句1\n");
	else
	{
		printf("测试语句2\n")
	}
}
else
{
	printf("测试语句3\n");
}

改进之后就能很容易的看出else 和 if的匹配关系了,但是只靠缩进也不能完全看出它们匹配关系,所以还是要记住上面的这个规则。

三、switch语句

当我们的程序有很多的选项时,用if else 语句也是可以进行的,但是C语言提供了一个更为方便的语句,switch语句。

switch语句的构造

switch (整型表达式)
{
	case 常量1:
		语句
	case 常量2:
		语句
	default :
		语句
}
【注】 这里的整型表达式的值应该是一个整数值(包括char类型),case 后面的必须是常量,不能用变量作为case的标签

用法

首先会计算整型表达式的值,然后根据求出来的值来寻找case标签,如果找到对应的标签就会从这个标签后面的语句开始依次执行如果希望只执行一个标签后面的内容,需要在执行完的语句后加上break。如果没有找到相应的case标签就会执行default 后面的语句。

用一个简单例子来说明一下这个语句的用法

首先是没有加break语句的情况

#include <stdio.h>

int main()
{
	int num = 2;

	switch(num)
	{
		case 1:
			printf("测试语句1\n");
		case 2:
			printf("测试语句2\n");
		case 3:
			printf("测试语句3\n");
		default :
			printf("没有与之匹配的标签\n");
	}

	return 0;
}

这里num的值是2, 所以会找到与之相匹配的标签,打印“测试语句2”,因为没有break,所以会一直执行下去直到程序结束。

看看运行的结果是怎么样的


和我们预计的一样,但是我们的本意应该是只执行相应标签后面的内容,其他的标签后面的内容不执行,我们在每个printf语句后加上break

switch(num)
{
	case 1:
		printf("测试语句1\n");
		break;
	case 2:
		printf("测试语句2\n");
		break;
	case 3:
		printf("测试语句3\n");
		break;
	default :
		printf("没有与之匹配的标签\n");
		break;
}

再来看看结果


这次只是输出了“测试语句2”,符合了我们的本意。

在很多情况下,switch中都会加上break,因为我们用到这个语句的时候,就是根据多种不同的情况来执行不同才操作,所以往往都需要加上break。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值