C语言中的分支语句

当我们在用C语言编写程序的时候,有时候使用顺序结构并不能解决问题,比如我们想判断一个数是奇数还是偶数,这个就需要计算机做出判断和选择,这时候我们就要用到今天的主题——分支语句。
一、if语句
1.语法形式
if语句的语法形式如下

	if (表达式)
		语句A;

这个是最简单的单分支结构,如果表达式的值为真,则执行语句A,否则不会进行任何操作,直接执行if语句后面的语句。
例如:

#include<stdio.h>
int main()
{
	int a = 3, b = 4;
	if (a < b)
		printf("haha\n");
}

a<b为真,打印出haha。

2.双分支结构
用上面的单分支,并不能解决我们开头提到的奇偶数问题,这里需要用到if…else…语句,语法形式如下:

if (表达式)
	语句A;
else
	语句B;

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

#include<stdio.h>
int main()
{
	int x = 0;
	scanf("%d", &x);
	if (x % 2 == 0)
		printf("%d是偶数\n", x);
	else
		printf("%d是奇数\n", x);
	return 0;
}

这里初学者容易犯的一个错误就是把表达式里的 == 写成 = ,会出现语法错误。
3.分支中包含多条语句

#include<stdio.h>
int main()
{
	int x = 0;
	scanf("%d", &x);
	if (x % 2 == 0)
		printf("%d是偶数\n", x);
		printf("123\n");
	return 0;
}

想一下输入一个7,这个代码会输出什么呢?
运行结果是输出123,这是因为if语句后面只能控制一条语句,所以上面的if语句只能控制 printf(“%d是偶数\n”, x);而 printf(“123\n”);不管符不符合条件,都会被打印出来,如果我们想要if控制多条语句的话,需要用{}将代码括起来,else也是一样

#include<stdio.h>
int main()
{
	int x = 0;
	scanf("%d", &x);
	if (x % 2 == 0)
	{
		printf("%d是偶数\n", x);
		printf("123\n");
	}
	else
	{
		printf("%d是奇数\n", x);
		printf("456\n");
	}
	return 0;
}

4.多分支结构
多分支结构可以使用嵌套if的形式来实现,语法形式为

if (表达式1)
	语句A;
else if (表达式2)
	语句B;
else
	语句C;

上面代码的执行方式为,如果表达式1为真,则执行语句A,如果表达式1为假,那在第一个else中,将再次进行判断,如果表达式2值为真,则执行语句B,否则执行语句C。

#include<stdio.h>
int main()
{
	int a = 8, b = 10;
	if (a > b)
		printf("1\n");
	else if (a == b)
		printf("2\n");
	else
		printf("3\n");
	return 0;
}

5.if 与 else 的匹配问题
有多个if 与 else 时,else 总是跟最近的 if 匹配。


```c
#include<stdio.h>
int main()
{
	int a = 8, b = 10;
	if (a > b)
		if (a == b)
		printf("2\n");
	else
		printf("3\n");
	return 0;
}

这个会输出什么呢,有的人认为会输出3,因为看起来好像else是与第一个if匹配的,a>b为假,那就执行else里的语句。而实际上什么也不会输出,离else最近的是第二个if,可以理解为后面的 if 与 else 都是包含在第一个if 里,表达式为假,后面的if 与 else 就不会被执行,自然什么也不输出。

二、switch语句
当问题需要讨论的情况较多时,通常使用开关语句代替条件语句来简化程序的设计,开关语句就像多路开关一样,使程序控制流程形成多个分支,根据一个表达式的不同取值,选择其中一个或几个分支去执行。
1.语法形式
switch(表达式)
{
case 常量1:
语句A;
case 常量2:
语句B;
case 常量3:
语句C;
case 常量4:
语句D;
}

在表达式中,数据类型只能是 char 型或 int 型,注意,常量与case之间至少有一个空格,常量的后面是冒号,常量的类型应该与switch后面括号内的表达式的类型一致。

2.语句执行过程
先计算switch后面表达式的值,然后将该值依次与case后的常量值进行比较,当它们相等时,执行相应case后面的语句,执行完毕后,可使用break跳出switch语句,如果没有break语句,程序将依次执行下面的case后的语句,直到遇到switch的右花括号}为止。

#include<stdio.h>
int main()
{
	int x = 0;
	printf("请输入第几节课:");
	scanf("%d", &x);
	switch (x)
	{
	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;
	}
	
	return 0;
}

3.switch语句中的default
在使用过程中,我们还可能遇到表达式的值与case后面的常量值不匹配的情况,这种情况要不就不做处理,要不就加入default语句。

#include<stdio.h>
int main()
{
	int x = 0;
	printf("请输入第几节课:");
	scanf("%d", &x);
	switch (x)
	{
	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;
	default:
		printf("无课或输入错误\n");
	}

	return 0;
}

这样当我们输入除了1 2 3 4 5以外的其他内容,就会执行default后面的语句。
除此之外,case与default语句是没有顺序要求的,不过我们通常把default语句放在最后处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值