C语言——分支语句和循环语句

本文详细介绍了C语言中的选择结构,包括if语句的单分支、多分支及其与else的匹配规则,以及switch语句的用法、break的作用和default子句的应用。通过实例代码展示了如何在不同场景下使用这些选择结构进行条件判断。
摘要由CSDN通过智能技术生成

1. 分支语句(选择结构)

C语言分为三种结构:
顺序结构
选择结构
循环结构

1.1 if语句

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

//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;

1.1.1单分支

例:

#include <stdio.h>

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 0)
		printf("偶数\n");
	else
		printf("奇数\n");
	return 0;
}

输入一个偶数,符合if后面的表达式,执行if条件下的语句
在这里插入图片描述
注意:
如果条件成立,只能执行一条语句,例如下面这段代码,else无法控制第二条语句printf(“非偶数\n”);

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

在这里插入图片描述
若要执行多条语句,则需要使用代码块
{} ,此时代码块中的语句else都可以控制

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

在这里插入图片描述

1.1.2多分支

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("未成年\n");
	else if (age >= 18 && age <= 45)
		printf("青年\n");
	else if (age >= 46 && age <= 69)
		printf("中年\n");
	else
		printf("老年\n");
	return 0;
}

输入50,符合第三个分支条件,所以输出中年
在这里插入图片描述

1.1.3 else的匹配

else与离他最近的if匹配
看下面这段代码

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		if (age > 45)
			printf("中年\n");
	else
		printf("未成年\n");
		
	return 0;
}

else是与离它最近的if匹配,当输入30时,不满足age>45,执行else语句,输出未成年
在这里插入图片描述
适当的 {} 可以使代码的逻辑更清楚
上面的代码可以修改为

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		if (age > 45)
			printf("中年\n");
	}
	else
		printf("未成年\n");
		
	return 0;
}

这样, else 就会与第一个 if 条件匹配

1.2 switch语句

1.2.1 语句格式

switch(整型表达式)
{
语句项;
}
语句项:
case 整形常量表达式:
语句;

1.2.2 break的作用

在switch语句中,break是退出语句的意思,搭配break才能实现真正的分支
例:

#include <stdio.h>

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	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;
	case 6:
		printf("周六\n");
		break;
	case 7:
		printf("周日\n");
		break;
	}
		
	return 0;
}

在输入5时,执行所对应的语句,执行完成后便退出switch语句
在这里插入图片描述

若没有break,则结果如下

#include <stdio.h>

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("周一\n");
		break;
	case 2:
		printf("周二\n");
	case 3:
		printf("周三\n");
	case 4:
		printf("周四\n");
	case 5:
		printf("周五\n");
		break;
	case 6:
		printf("周六\n");
		break;
	case 7:
		printf("周日\n");
		break;
	}
		
	return 0;
}

在输入2时,会执行相对应的语句,但在执行完成后不会退出,会一直运行到有break的地方,运行结果如下
在这里插入图片描述
利用break这一特性,在switch语句中,若多个条件后是同一结果,则可以简化代码

#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;
	}
		
	return 0;
}

在这里插入图片描述

1.2.3 default子句

当switch语句中,所有表达的值与所有case标签的值都不匹配,并不会报错,而如果不想忽略不匹配的值时,可以使用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("输入错误\n");
		break;
	}
		
	return 0;
}

输入10,与所有case标签的值都不匹配,此时执行default语句,结果如下
在这里插入图片描述
default语句可以放在switch语句开头,也可以放在结尾,但放在开头时一定要有break,放在结尾时可以省略

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值