分支与循环结构

本文详细介绍了C语言中的分支结构,包括if、if-else、多重if-else和嵌套if-else,以及switch语句。同时涵盖了循环结构,如while、do-while和for循环的使用及其比较。
摘要由CSDN通过智能技术生成


前言

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实
现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种
结构的组合。
我们可以使⽤ if switch 实现分⽀结构,使⽤ for while do while 实现循环结构。

一、分支结构

(一)if语句

1.if语句

if语句的基本结构:
if语句通过对一个条件判断,当条件为真时,执行{}中的语句,否则,则不执行该语句。
if语句的语法格式如下:

if(表达式)
{
   执行语句;
}
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏
在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不 是0,则语句执⾏。

注意:if()后面不加入分号,在其之后直接加入{}

2.if—else语句

if-else语句通过对一个条件进行判断,当条件为真时,执行一个操作,否则执行另一个不同的操作。
if-else语句的语法格式如下:

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

注意:
(1)if()后面没有分号!如果不小心在后面加了分号,会有语法错误,错误提示会指向else:非法的else,没有与之匹配的if
(2)如果if和else后的语句只有一句,可以去掉{},当语句超过两句时,必须要加入{}。加入花括号可以明确表示if 或else的控制范围。

(3)else子句不能单独使用,必须与if配对,且一个if只能配对一个else。

3.多重if—else语句

多重if-else语句通过依次判断表达式的值,当出现某个表达式的值为真时,则执行表达式所对应的操作,否则则执行else所对应的操作。
多重if-else语句的语法格式:

if(表达式1)
{
  语句1;
}
else if(表达式2)
{
  语句2;
}
······
else if(表达式m)
{
  语句m;
}
else
{
  语句n;
}

注意:当某一个表达式为真时,则不会向下执行该分支结构的其他语句。

4.嵌套if—else语句

通常将一个if-else语句放在另一个if-else语句中形成嵌套的if-else语句。
嵌套if-else语句的语法格式:

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

注意:在嵌套的if—else语句结构层次中,必然会产生else部分和哪一个if部分配对的问题,配对的原则是else部分应属于最靠近且未配对的“if”

(二)switch语句

当问题需要处理的分支情况比较多时(一般大于3种),通常使用开关语句代替条件语句来简化程序设计。开关语句就像多路开关一样,使程序控制流程形成多个分支,根据一个表达式的不同取值,选择一个或几个分支执行。C语言的开关语句也称为switch语句。
switch语句的最常用格式:

switch(表达式)
{
	case 常量表达式1:语句序列1 break;
	case 常量表达式2:语句序列2 break;
	……
	case 常量表达式n:语句序列n break;
	default : 语句序列 n+1
}

switch 语句往往比多分支if语句更容易阅读。另外,switch语句往往比if语句执行速度快,特别是在有许多情况需要判定的时候。
注意:
(1)在case后的各常量表达式的值不能相同,否则会出现错误
(2)在case后面,如果没有break,会一直执行直到遇见break,才会跳出switch语句
(3)switch后面的表达式语句只能是整形或字符型。
(4)在case后,允许有多个语句,可以不用{}括起来
(5)各case和default语句的先后顺序可以变动,而不会影响程序的执行结果。
(6)default语句可以省略不用。

二、循环结构

在C语言中,反复不停的执行某个动作就是我们常称的循环,C语言提供了循环语句来实现重复处理。在C语言中,每个循环都有一个控制表达式,每执行一次循环体,都对控制表达式进行求值,如果表达式非0,则继续执行循环。C语言有三种循环语句,即while语句,do语句和for语句。while循环再执行循环体之前测试控制表达式,do循环在循环体执行之后测试控制表达式,for循环则非常适合那些指定循环次数的循环。

1.while循环

while循环适用于如果某个条件为真的情况下,希望反复执行一个操作,那么while语句最为简单易用。
while语句的一般格式如下:

while(表达式)
{
  循环体语句;
}

功能:当表达式值非0时,重复执行循环体语句。
执行过程:首先计算圆括号中的表达式的值,如果值非0,则继续执行循环体语句,接着再判定表达式。这个过程持续到表达式值为0时才结束。

注意:

(1)对控制语句头所控制的内部语句要进行缩进,控制语句的前后都要留出空行,能使程序具有二维的层次感,极大地提高了程序的可读性。
(2)如果while循环的循环体中,没有最终将条件改变为假的操作,那么循环将永远不会终止——这就是所谓的死循环(也就是为无限循环)。

2.do—while循环

do-while循环是先执行循环中的语句,再判断while中的表达式是否为真,如果为真,则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。
do-while语句的一般格式如下:

do
{
  语句1;
}while(表达式);//注意分号

注意:当使用do-while语句时,while的括号后面必须加分号。

3.for循环

for循环语句能够处理计数控制的所有细节,是功能最强大的一种循环语句,是编写许多循环的最佳方法。
for语句的标准格式如下:

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

执行过程:
(1)执行表达式1,对循环变量做初始化,只执行一次。
(2)判断表达式2,若其值为真(非0),则执行for循环中的语句,然后向下执行;若其值为假(为0),则结束循环。
(3)每次循环中最后一个被执行的操作。设置循环的步长,改变循环变量的值,从而可改变表达式2的真假性。
(4)当循环结束时,程序向下执行。
在绝大多数情况下,上述for语句可以表示成如下的while语句

表达式1
while(表达式2)
{
	语句;
	表达式3;
}

在for循环中:
(1)表达式1是一个或多个赋值语句,它用来控制变量的初始值;
(2)表达式2是一个关系表达式,他决定什么时候退出循环;
(3)表达式是循环变量的步进值,定义控制循环变量每循环一次后按什么方式进行变化。
(4)这三个部分用分号;隔开;千万记得不要写成逗号。
for语句的注意事项:
(1)for语句头中的三个表达式:初始化,循环继续条件和增量操作都可以包含算术表达式
例如:

for(i=0;i<=10*n;i+=n/5)

(2)控制变量的增量可以是负值,在这种情况下,循环计数是递减的。

(3)for语句中的三个表达式是可选的。如果将表达式2省略,则认为循环继续条件总是真,这将导致一个无限循环。如果对循环控制变量的初始化工作已经在程序的其他地方完成了,那么表达式1可以省略。如果循环控制变量的增值工作是由for循环体中的语句完成的,或者根本不需要增量工作,那么表达式3也可以省略。for循环语句中的增量表达式可以用循环体末尾的单独一句来替换。
(4)表达式1和表达式3可以是一个简单的表达式也可以是多个表达式以逗号分隔

int sum,num;
for(sum=0,num=0;num<=3;num++,sum++)
{
	sum+=num;
	printf("num=%d,sum=%d\n",num,sum);
}

(5)如果循环范围多于一个语句,必须加{}构成复合语句,初学者很容易忘掉{},结果造成错误。

4.三种循环的比较

while,do-while和for三种循环在具体使用场景中是有区别的:
1.在知道循环次数的情况下更适合使用for循环
2.在不知道循环次数时适合使用while或do-while
(1)如果有可能一次都不循环应该考虑使用while循环
(2)如果至少有一次循环应考虑使用do-while循环

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值