详解C语言之分支与循环语句


C语言是结构化的程序设计语言,有顺序结构、选择结构(分支结构)、循环结构。

1. 分支语句之if语句

1.1 if

if语句的语法形式如下:

if (表达式)
	语句;

if语句的执行规则如下:如果if括号里的表达式成立(为真),则执行下面的语句;如果if括号里的表达式不成立(为假),则不执行下面的语句。

注:在C语言中非0为真,0为假。

比如:

int main()
{
	int a = 1;
	if (a > 0)
		printf("a大于0\n");
	return 0;
}

a=1显然大于0,表达式成立,执行下面的语句,打印出结果 a大于0

再比如:

int main()
{
	int a = 1;
	if (a)
		printf("haha\n");
	return 0;
}

if括号里的表达式a为1,非0,那么就会执行下面的语句,屏幕上就会打印出 haha

1.2 else

一个非0数要么大于0,要么小于0。要判断这个数是大于0还是小于0,如果我们只使用if语句,代码如下:

int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a > 0)
		printf("a是正数\n");
	if (a < 0)
		printf("a是负数\n");
	return 0;
}

这段代码可行,但需要判定两次条件。因为一个非0数如果不大于0的话,肯定是小于0,不需判定。因此,我们引入else语句
代码实现如下:

int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a > 0)
		printf("a是正数\n");
	else
		printf("a是负数\n");
	return 0;
}

这里就构成了if…else…语句
语法形式如下:

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

如果if括号里的表达式成立(为真),则执行语句1,且不执行else语句;如果if括号里的表达式不成立(为假),则直接跳过语句1,进入else语句中的语句2。

注意:

  • if后面不要加分号,因为一个完整的分支语句还未结束,还有if下面的执行语句,else if、else语句亦是如此
  • 默认情况下if和else语句中都只控制一条语句,如果if或else需要控制两条或两条以上的语句,这时用{}将需要控制的语句括起来。

比如:

int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a > 0)
	{
		printf("a大于0\n");
		printf("a是正数\n");
	}
	else
	{
		printf("a小于0\n");
		printf("a是负数\n");
	}
	return 0;
}

1.3 嵌套if

在实际应用情况中情况,一般不会只有一两种情况,这是只用if…else…就不够了。这时候就需要在else语句嵌套if了
基本语法形式如下:

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

比如:
输入一个数,判断是0,正数,负数

int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a > 0)
	{
		printf("a是正数\n");
	}
	else if(a < 0)//这里的if相当于嵌套在else语句中,形成嵌套结构
	{
		printf("a是负数\n");
	}
	else
	{
		printf("a是0\n");
	}
	return 0;
}

实际情况中,如果有很多种情况,就可以不断嵌套if语句
构成以下形式:

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

1.4 悬空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匹配,导致认为结果是haha。其实不然,这段代码是我故意调整,使else与第一个if对齐。如果你将这段代码复制到VS上时,你会发现,VS会将else与第二个if对齐
在这里插入图片描述
这就是因为else是最接近的那个if匹配的(也就是第二个if),因此结果应该是hehe。

为了使代码的逻辑更加的清晰,我们往往会使用大括号将分支后的语句括起来
在这里插入图片描述

如果想打印出haha,我们可以对代码修改成如下:
在这里插入图片描述

由此可见,大括号对分支语句的重要性,因此我们以后在写代码的时候要注意括号的使用,这样可以使代码的可读性更高。

2. 循环语句

2.1 while语句

语法形式:

while (表达式)
	语句;

while语句的基本结构与if语句相似
两者的区别在于:1.if语句是判断表达式是否成立(为真),若为真则执行语句,若为假则跳过语句;while语句是判断表示式是否成立(为真),若为真则执行语句,执行完后再判断表示式是否成立(为真),若为真则再执行语句,不断循环,直至表达式不成立(为假)。

比如:

#include<stdio.h>

int main()
{
	int a = 2;
	while (a > 0)
	{
		printf("haha\n");
		a--;
	}
	return 0;
}

该循环执行两次,打印了两个haha。需要注意的是当while需要控制多条语句时,需要用大括号括起来,和if语句一样。

2.2 for循环

for循环的语法结构如下:

for (表达式1; 表达式2; 表达式3)
		语句;

表达式1是初始化表达式,用于循环变量的初始化,只执行一次。
表达式2是判断表达式,用于循环结束条件的判断。
表达式3是调整表达式,用与循环变量的调整。

执行流程如下:先对循环变量进行一次初始化,再判断循环条件是否满足,满足则执行语句,然后再执行表达式3,对循环变量进行调整,再判断表达式2是否满足,若满足则执行语句…依次循环,直至表达式2不成立(为假)。

比如:
在屏幕上打印0~10的值
在这里插入图片描述

2.3 for循环与while循环的比较

在这里插入图片描述
for和while都有初始化,判断,调整这三部分,但是for循环的三个部分非常集中,便于代码的维护,而如果代码较多时,while循环的三个部分就比较分散,所以从形式上for循环要更优一些,这也就是为什么三种循环结构中for循环使用的频率最高。

2.4 do…while循环

do…while循环的语法结构:

do
{
	语句;
} while (表达式); //注意这里有个分号

do…while循环执行流程:直接执行一次语句,然后再判断表达式是否成立(为真),若为真,则继续循环…直至表达不成立(为假)。
do…while循环与while循环和for循环不同的是第一次循环,do…while第一次循环是直接执行语句,再判断表达式;而while、for循环是判断后再进入循环。所以,do…while至少执行一次循环。

**比如:**在屏幕上打印0~10的值
在这里插入图片描述

3. break与continue语句

  • break的作用是终止break外的一层循环,继续往后执行
  • continue的作用是跳过循环continue后面的语句,且在while循环和for循环有所不同

3.1 循环中的break

while循环中的break语句举例:![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2f87fd2869e74b30aeb63da693d13324.png在这里插入图片描述
这段代码运行只有1 2 3 4,当i = 5 时,循环就终止了。

同样地,用for循环:
在这里插入图片描述

3.2 循环中的continue

while循环中的continue语句举例:
在这里插入图片描述
while语句中的continue是跳过continue后面的语句,跳到循环判断的地方,判断表达式是否成立,若成立(为真),再次进入循环。
这段代码当i=5时,执行continue语句,判定,进入循环,后续i一直为5,因此这段代码死循环

for循环中的continue语句举例:
在这里插入图片描述
for循环continue跳过后面的语句,进入的是for循环的调整表达式,再进入判断表达式,若表达式成立,则继续循环。
while循环和for循环中执行continue语句后进入的表达式不同,这是两者的区别。do…while循环的break语句、continue语句几乎和while一样,这里就不举例了,可以自行测试并体会。

4. 分支语句之switch语句

switch是一种特殊形式的if…else结构,用于判断条件有多个结果的情况。它把多重的else if 改成了更易用、可读性更好的形式。
switch的语法结构:

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

根据expression得到的不同的值,执行不同的case不同分支,如果找不到对应的值,那么就执行default分支。

注:

  • switch后的expression必须是整型表达式
  • case后的value必须是整形常量表达式

4.1 switch语句与if语句的比较

比如:求一个除3后的余数
先用if语句来写:

#include<stdio.h>

int main()
{
	int i = 0;
	scanf("%d", &i);
	if (i % 3 == 0)
	{
		printf("整除,余数为0\n");
	}
	else if (i % 3 == 1)
	{
		printf("余数是1\n");
	}
	else
	{
		printf("余数是2\n");
	}
	return 0;
}

再用switch语句来写:

#include<stdio.h>

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

注意:

  1. case的后边的数字之间必须有一个空格
  2. 每一个case语句执行完后,需要加上break语句,才能跳出switch语句
  3. 每个case分支后需要控制多条语句时,一般情况不加大括号,加了也没错

4.2 switch语句中break

上面的代码如果不加break会怎么样呢?看如下图
在这里插入图片描述

我们首先输入7,7除3,余1,执行case 1,即打印余数是1,执行完case1后,代码继续往下走,执行case 2,也就会打印余数是2。所以,在switch语句的每一个case分支执行完后需要加上break,跳出switch语句

注:
在if else语句中,是不能直接用break和continue的。除非是在for循环中嵌套if else语句,可以加,但那也是循环语句的break与continue,对循环结构进行break和continue

4.3 switch语句中的default

在使用switch语句中,可能会碰到switch后的表达式无法与任何一个case匹配,这时就执行default语句

**比如:**输入1-5,输出工作日;输入6-7,打印休息日

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;
}

当我们输入8时,会打印出输入错误。


end

  • 41
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1. 智慧社区背景与挑战 随着城市化的快速发展,社区面临健康、安全、邻里关系和服务质量等多方面的挑战。华为技术有限公司提出智慧社区解决方案,旨在通过先进的数字化技术应对这些问题,提升城市社区的生活质量。 2. 技术推动智慧社区发展 技术进步,特别是数字化、无线化、移动化和物联化,为城市社区的智慧化提供了可能。这些技术的应用不仅提高了社区的运行效率,也增强了居民的便利性和安全性。 3. 智慧社区的核心价值 智慧社区承载了智慧城市的核心价值,通过全面信息化处理,实现对城市各个方面的数字网络化管理、服务与决策功能,从而提升社会服务效率,整合社会服务资源。 4. 多层次、全方位的智慧社区服务 智慧社区通过构建和谐、温情、平安和健康四大社区模块,满足社区居民的多层次需求。这些服务模块包括社区医疗、安全监控、情感沟通和健康监测等。 5. 智慧社区技术框架 智慧社区技术框架强调统一平台的建设,设立数据中心,构建基础网络,并通过分层建设,实现平台能力及应用的可持续成长和扩展。 6. 感知统一平台与服务方案 感知统一平台是智慧社区的关键组成部分,通过统一的RFID身份识别和信息管理,实现社区服务的智能化和便捷化。同时,提供社区内外监控、紧急救助服务和便民服务等。 7. 健康社区的构建 健康社区模块专注于为居民提供健康管理服务,通过整合医疗资源和居民接入,实现远程医疗、慢性病管理和紧急救助等功能,推动医疗模式从治疗向预防转变。 8. 平安社区的安全保障 平安社区通过闭路电视监控、防盗报警和紧急求助等技术,保障社区居民的人身和财产安全,实现社区环境的实时监控和智能分析。 9. 温情社区的情感沟通 温情社区着重于建立社区居民间的情感联系,通过组织社区活动、一键呼叫服务和互帮互助平台,增强邻里间的交流和互助。 10. 和谐社区的资源整合 和谐社区作为社会资源的整合协调者,通过统一接入和身份识别,实现社区信息和服务的便捷获取,提升居民生活质量,促进社区和谐。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值