If 语句和 Switch 语句

本文主要介绍C语言中if语句和switch语句这两种分支结构。详细讲解了if语句的基本形式、if…else用法、分支包含多条语句的处理、嵌套if的悬空else问题,以及switch语句的特点、break和default的作用,帮助读者掌握分支结构编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

if语句和switch语句(分支结构)

if 语句

if语句的基本形式

if(表达式)
   语句

当表达式结果不为零时(真),则语句执行;当表达式结果为零时(
假),则语句不执行。

if…else

if(表达式)
语句
else

当我们想知道一个整数是奇数还是偶数,可以通过if …else语句来实现

#include<stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个整数:\n");
	scanf("%d", &num);
	if (num % 2 == 0)
		printf("%d 是偶数\n", num);
	else
		printf("%d 是奇数\n", num);
	return 0;
}

分支包含多条语句

if和else语句默认都只控制一条语句,要想控制多条语句需使用{}将
代码括起来。

int main()
{
	int month = 0;
	printf("请输入月份:\n");
	scanf("%d", &month);
	if (month == 6 || month == 7 || month == 8)
		printf("%d 月太热了!\n", month);
	printf("%d 月是夏天。\n", month);
	return 0;
}

在这里插入图片描述在这里插入图片描述
通过对比会发现当输入9时输出错误了,这就证明此时if只控制if下的第一条语句
此时我们用{}将if下的两条printf语句括起来

if (month == 6 || month == 7 || month == 8)
	{
		printf("%d 月太热了!\n", month);
		printf("%d 月是夏天。\n", month);
	}

输出结果就正常了
在这里插入图片描述

嵌套if

在if …else语句中,else可与另一个if语句连用,构成多重判断。但在编写代码时要注意悬空else问题,记住else总是跟最近的if匹配
我们来观察下面的代码

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

根据就近原则此代码输出什么都没有,但以后一个程序中if和else过多时,我们很容易出错,所以我们可以进行优化
else和第二个if匹配

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

else和第一个if匹配

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

大括号加上去,整个程序就十分清晰了。

##Switch
###switch语句
switch可以看作是一种特殊的if…else语句,将一些if…else语句改写成switch语句会使得程序更加简单

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

switch会根据表达式espression得到的不同值value去执行对应的case分支,如果没有对应的value,则执行default分支。
要注意:

  1. switch后的expression必须为整型表达式
  2. case后的value必须是整型常量表达式
  3. case和后面的value之间需要有空格
  4. 每个case语句执行后需有break才能跳出这个switch语句

switch中的break

!!!break在switch中十分重要。

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n % 3)
	{
	case 0:
		printf("整除,余数是0\n");
		break;
	case 1:
		printf("余数为1\n");
		break;
	case 2:
		printf("余数为2\n");
		break;
	}
	return 0;
}

在这里插入图片描述

我们将上面的程序中的break去除重新运行

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n % 3)
	{
	case 0:
		printf("整除,余数是0\n");
	case 1:
		printf("余数为1\n");
	case 2:
		printf("余数为2\n");
	}
	return 0;
}

在这里插入图片描述
去除了break,就会发现,case语句没有了break后,可能会继续执行后面case语句中的代码,所以我们需要一个break才能结束我们此次的运行。当然,并不一定每个case语句我们都需要break,我们需要根据实际要求做出合理的分支效果。

switch中的default

在我们执行switch语句是,可能得到的vaule并没有相对应的case,我们对这种情况可以不处理或者加上default句子。
switch中的case和default是没有顺序要求的,只要满足你的实际需求就可以,通常我们可以将default语句放在最后。
来个程序来理解一下吧!!!


#include<stdio.h>
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("一周只要有1到7天,铁汁你在仔细想想!!\n");
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值