首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言——分支与循环

C语言——分支与循环

作者头像
用户11352420
发布于 2024-11-07 21:27:46
发布于 2024-11-07 21:27:46
1.9K0
举报
文章被收录于专栏:编程学习编程学习

引言

由前面的知识我们可以知道C语⾔是一种结构化的程序设计语⾔,这⾥的结构包括顺序结构、选择结构、循环结构,在C语言中我们可以使⽤ if 、 switch语句 实现分⽀结构,使⽤ for 、 while 、 do while语句实现循环结构。

接下来,我们一一介绍:

分支(选择)语句

if语句

if语句的一般形式为:

if(表达式)

语句1

当表达式为真(非0)时,语句1执行;当表达式为假(0)时,语句1就不会执行。

通常if会与else一起用,一般形式为:

if(表达式)

语句1

else

语句2

当表达式1不成立时,就会执行else后面的语句2.

需要特别注意的是if后面默认只控制一条语句,如果需要if后面执行多条语句的话,就需要将控制的多条语句用{ }括起来。

这里通过一个代码来更好地理解:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
  int a = 0;
  if(a >= 18)
     printf("成年人");
  else
     printf("未成年人");
  return 0;
}

同时在多种分支的情况下,可以在else部分又嵌套多层的if语句,它的一般形式为:

if(表达式1)

语句1

else if

语句2

else if

语句3

else

语句4

悬空else问题

在这里,我们需要记住的是“如果有多个 if 和 else , else 总是跟最接近的 if 匹配,而不是与对齐的if匹配。

你知道下面的代码输出结果是什么吗?

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hello\n");
	else
			printf("haha\n");

	return 0;
}

事实上,它什么也不会输出,else与第二个if进行匹配,因为第一个if后面的表达式为假,就不会执行后面的了。

switch语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 事实上switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况,适合多分支结构,它把多重 的 else if 改成更易⽤、可读性更好的形式。

它的一般形式为:

switch(表达式)

{

case 常量1:

语句1

case 常量2:

语句2

..................

case 常量n:

语句n

default:

语句n+1;

}

注意:

1.表达式必须是整型(包括字符型-----字符的本质是ASCII值,所以字符类型也归类到整型类型)表达式。

2.switch后面的{ }中是一个复合语句,一般来讲会有多个以关键字case开头的语句行和最多一个以default开头的行。当switch 后的表达式中的值⽆法匹 配代码中的 case 语句的时候,这时候可以不做处理,也可以在在 switch 语句中加⼊ default ⼦句。

3.case后面的值必须是整型常量(表达式),同时case 和后边的表达式之间必须有空格,如:case ‘A',case 1,它们和default都是起标号的作用,来标志一个位置

4.在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以了,不过我们通常是把 default ⼦句放在最后处理的。

5.每一个case常量必须互不相同,否则会出现互相矛盾,一个常量有多个执行方案。

6.switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。 当然,使用时需要结合实际情况,并不是每个 case 语句都得有break。

下面就来使用一个switch语句的代码来体会它的效果:

可以看出使用switch语句来处理多分支结构比if else语句更加简便。

循环语句

while语句

while语句一般形式:

while(表达式)

{

}

while的执行流程是: ⾸先执⾏判断表达式 ,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

for语句

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

语句; // 如果循环体想包含更多的语句,可以加上⼤括号

表达式1 : ⽤于循环变量的 初始化 ,只需要执行一次,可以给零个、一个或者多个变量设置初始值。

表达式2 :⽤于循环结束条件的 判断 ,每一次执行循环体前先执行这个表达式,决定是否继续执行循环。

表达式3 :⽤于循环变量的 调整

表达式1和表达式3可以是一个简单的表达式,也可以是一个逗号表达式(包含多个简单表达式)

事实上,for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部 分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形 式上 for 循环要更优⼀些。

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

语句;

for语句一般形式可以改写成:

表达式1;

while(表达式2)

{

语句

表达式3;

}

这两个无条件等价。

do while语句

dowhile一般形式:

do

{

语句

}while(表达式 ); 后面有分号;

前面所说的 while 和 for 这两种循环都是 先判断 ,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳 出循环;

do while 循环语句则是 先直接进⼊循环体,执⾏循环语句 ,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次循环,表达式为假,则不再继续循环。 所以在 do while 语句中 循环体是⾄少执行⼀次。

应用

接下来我们用这三个代码来解决同一个问题:输出1--50可以被3整除的数

while循环

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 50)
	{
		if (i % 3 == 0)
			printf("%d ", i);
		i++;
	printf("\n");
	return 0;
}

for循环

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int i = 1;
	for (i = 1; i <= 50; i++)
	{
		if (i % 3 == 0)
			printf("%d ", i);
	}
	printf("\n");
	return 0;
}

do while循环

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i % 3 == 0)
			printf("%d ", i);
		i++;
	} while (i <= 50);
	printf("\n");
	return 0;
}

可以看出它们输出的结果是一致的

改变循环执行状态

break

break 的作⽤是⽤于 永久的终⽌循环 ,只要 break 被执⾏,直接就会跳出循环,继续往后执

⾏。

continue

continue 的作⽤是 跳过本次循环中 continue 后边的代码 ,只是 结束本次循环 ,继续执行下次的循环的判断。

使用

在使用上,break在三种循环语句差别不大。

这里需要特别注意的是 continue在 for 循环和 while 循环中是有所差异的。

在while循环中:continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成 死循环。

在 for 循环 中 : continue 的作⽤是跳过本次循环中 continue 后的代码, 直接到循环的调整部分 。

我们用下面的代码来进行更好的理解!(输出1--50被3整除的数,使用continue版)

可以看出当使用continue时,在while循环中循环的调整是在 continue 后边,造成了死循环(i一直等于36)

除此之外,我们需要注意的是continue只能在循环中使用,而break可以在switch和循环语句中使用,但是break不能与if语句单独使用。

goto语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。

但是如果goto 语句使⽤不当,就会导致在函数内部随意乱跳转打乱程序的执⾏流程,所以建议是能不⽤尽量不去使⽤。

如果在多层循环的代码中,循环想提前退出得使⽤ break ,⼀个 break 只能跳出⼀层循环,所以如果想快速跳出循环的话使⽤ goto语句就更加的方便。

循环的嵌套使用

用两个例子来说明:

1.打印100--150的素数

2.打印4*4矩阵

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 引言
  • 分支(选择)语句
    • if语句
    • switch语句
  • 循环语句
    • while语句
    • for语句
    • do while语句
    • 应用
  • 改变循环执行状态
    • break
    • continue
    • 使用
  • goto语句
  • 循环的嵌套使用
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档