【C语言】分支与循环(分支篇)

前言

C语言是一种结构化的计算机语言,这里指的通常是顺序结构、选择结构、循环结构,掌握这三种结构之后我们就可以解决大多数问题。

分支结构可以使用ifswitch来实现,而循环可以使用forwhiledo while来实现。

1. if语句

1.1 if

if语句的语法如下:

if(表达式)
    语句

在这里插入图片描述

表达式为真,语句执行,表达式为假,则语句不执行。
在C语言中,0为假,非0表示真,也就是表达式的结果如果为0,则语句不执行,如果不是0,则执行。
比如:输入一个整数判断是否为偶数

int main()
{
	int i = 0;
	
	if(i % 2 == 0)
		printf("%d是偶数", i);

	return 0;
}

1.2 else

如果一个数不是偶数,那么就是奇数,这就需要if...else...语句:

if(表达式)
    语句1
else
	语句2

比如:输入一个整数,判断是偶数还是奇数

int main()
{
	int i = 0;
	scanf("%d", &i);
	
	if(i % 2 == 0)
		printf("%d是偶数", i);
	else
		printf("%d是奇数", i);

	return 0;
}

在上面的代码中,if语句只控制了一条语句,就是printf("%d是偶数", i);,如果控制两条语句的话,就需要使用{}将代码括起来,else也可以,如下:

int main()
{
	int i = 0;
	scanf("%d", &i);
	
	if(i % 2 == 0)
	{
		printf("%d是偶数", i);
		printf("下一个数是奇数");
	}
	else
	{
		printf("%d是奇数", i);
		printf("下一个数是偶数");
	}

	return 0;
}

1.3 嵌套if

if else中,else可以与另一个if语句连用,构成多重判断,比如:
判断输入一个整数,判断是负数、正数或是0:

int main()
{
	int i = 0;
	scanf("%d", &i);
	if(i == 0)
		printf("输入的数字为0\n");
	else if(i > 0)
		printf("输入的数字为正数\n");
	else
		printf("输入的数字为负数\n");

	return 0;
}

再比如:
判断输入一个整数,判断是负数、正数或是0,如果是正数判断是奇数还是偶数:

int main()
{
	int i = 0;
	scanf("%d", &i);
	if(i == 0)
		printf("输入的数字为0\n");
	else if(i > 0)
	{
		if(i % 2 == 0)
			printf("%d是偶数", i);
		else
			printf("%d是奇数", i);
	}
	else
		printf("输入的数字为负数\n");

	return 0;
}

1.4 悬空else

如果有多个 ifelse,那么else总是和最接近的if匹配。
比如:

int main()
{
	int a = 0;
	int b = 2;
	
	if (a == 1)
		if (b == 2)
			printf("hello\n");
	else
		printf("world\n");

	return 0;
}

当我们运行这段代码可以发现什么都没有输出:
在这里插入图片描述
这是因为else总是与最近的if匹配,上面代码中会让初学者以为else是与第一个if匹配的,当第一个if语句不成立以为自然会执行else语句打印“world”,但实际上else是与第二个if语句匹配,嵌套在第一个if语句中,所以最终什么都不打印。

如果我们想让else与第一个if语句匹配可以这样修改:

int main()
{
	int a = 0;
	int b = 2;
	
	if (a == 1)
	{
		if (b == 2)
			printf("hello\n");
	}
	else
	{
		printf("world\n");
	}

	return 0;
}

这样就执行了else语句:
在这里插入图片描述

或者这样改,就执行了第一条if语句:

int main()
{
	int a = 1;
	int b = 2;
	
	if (a == 1)
	{
		if (b == 2)
		{
			printf("hello\n");
		}
		else
		{
			printf("world\n");
		}
	}
	
	return 0;
}

在这里插入图片描述

2. switch语句

除了if语句,还有一种switch语句可以实现分支结构。
这种语句用于判断条件有多个结果的情况,把多重的if...else...语句改成可读性更好的形式。

switch (expression) 
{
case value1: statement
case value2: statement
default: statement
}

这段代码中,根据表达式expression的值,执行相应的case分支,如果没有对应的值,则执行default分支。

注意:

  • expression必须是整型表达式
  • case后的值必须是整型常量表达式

2.1 if语句和switch语句的对比

比如输入一个数,计算除3之后的余数:
使用if语句完成:

int main()
{
	int num = 0;
	scanf("%d", &num);

	if (num % 3 == 0)
	{
		printf("整除\n");
	}
	else if (num % 3 == 1)
	{
		printf("余数是1\n");
	}
	else
	{
		printf("余数是2\n");
	}

	return 0;
}

使用switch语句写:

int main()
{
	int num = 0;
	scanf("%d", &num);

	switch (num % 3)
	{
	case 0:
		printf("整除\n");
		break;
	case 1:
		printf("余数是1\n");
		break;
	case 2:
		printf("余数是2\n");
		break;
	}
	
	return 0;
}

这里要注意:

  • case和后面的数字之间要有空格,否则会有语法错误
  • 每一个case语句执行后,需要加上break,才能跳出这个语句。

2.2 switch语句中的break

上面的代码中,如果去掉case语句中的break,那么会出现什么情况:

int main()
{
	int num = 0;
	scanf("%d", &num);

	switch (num % 3)
	{
	case 0:
		printf("整除\n");
	case 1:
		printf("余数是1\n");
	case 2:
		printf("余数是2\n");
	}
	
	return 0;
}

在这里插入图片描述
这时可以发现,10除以3本来余数为1,但程序多出了一行 “余数是2” 的打印。

原因就是在case语句后只有加上break才能跳出switch语句,如果才某一条case语句后没有break,那么代码就会继续执行,直到遇到break或者整个switch语句结束。

所以想在某一条case语句中跳出switch语句,要记得在后面加上break。

2.3 switch语句中的default

在使用switch语句的时候,会经常遇到一种情况,比如没有任何一条case语句能匹配表达式中的值,这时如果需要处理,那么就需要在switch语句中加入default语句。

比如我们写一段代码,输入一个数来判断今天是工作日还是休息日:

int main()
{
	int day = 0;
	scanf("%d", &day);

	switch(day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("⼯作⽇\n");
		break;
	case 6:
	case 7:
		printf("休息⽇\n");
		break;
	default:
		printf("输⼊错误\n");
		break;
	}
	
	return 0;
}

这样在输入1~7以外的数字的时候就会提示 “输入错误”。

2.4 switch语句中的顺序问题

在switch语句中,对于case和default子句没有顺序要求,不过通常会将default语句放在最后处理。

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值