C语言分支与循环语句

C语言分支与循环语句

C语言中的三种最基本控制结构分别为
1,顺序机构
2,选择结构
3,循环结构
这里简单介绍一下选择结构(分支语句)和循环结构(循环语句)

目录

  • C语言分支与循环语句
  • 1.选择结构(分支语句)
    • 1.1if语句
    • 1.2switch语句
  • 2.循环结构(循环语句)
    • 2.1while循环
    • 2.2do while循环
    • 2.3for循环
  • 3.扩展:break,continue在循环语句中的作用
    • 3.1break在循环中的作用
    • 3.2continue在循环中的作用

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

1.1if语句

以下为if语句的几种用法

if(条件判断)
   语句;
----------------------
if(条件判断1)
   语句1else(条件判断2)
   语句2;
----------------------
if(条件判断1)
   语句1;
else if(条件判断2)
   语句2;
else if(条件判断3)
   语句3//第二种和第三种用法可以实现多分支语句      

在if语句中,程序执行的时候会从前往后依次判断条件是否成立,如果成立则进入该分支中;不成立则继续下一个分支的条件判断 。直到条件成立进入分支或所有分支判断完全。

如下图所示:

Created with Raphaël 2.3.0 开始 条件1 语句1 结束 条件2 语句2 条件3 语句3 yes no yes no yes no

需要注意!C语言中0表示假,非0表示真
例如

if(0)
printf("hehe");

该代码不会输出任何东西

int a=0;
if(a==0)
printf("hehe");

就能正常打印出hehe。
因为a==0成立,所以实际上该判断的值为1,即为真。

1.2switch语句

switch的基本语法结构为

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

在switch语句中,我们需要选择分支的入口;
  例如:

int day=0;
scanf("%d",&day);
switch(day)
{case(1):
printf("星期一\n");
case(2):
printf("星期二\n");
case(3):
printf("星期三\n");
case(4):
printf("星期四\n");
case(5):
printf("星期五\n");
 }

按照上面说的,这个程序实现起来应该是输入1,输出星期一;输入2,输出星期二……但实际执行起来的结果是如下
C语言分支与循环语句_第1张图片
这里可以看到,当我们输入3时,程序输出了星期三,星期四,星期五。这是因为switch语句单独使用时选择的是程序的入口,当我们选择后,程序会从该入口开始执行直到结束。所以switch单独使用时是无法实现分支的。应该搭配break来使用。break可以使switch语句执行完分支语句后跳出switch语句
C语言分支与循环语句_第2张图片
如图,当在每个分支后加上break,就可以实现跳出switch了。
如果输入的选择不是任何一条分支的时候应该如何处理?switch语句中提供了default来处理这种情况
C语言分支与循环语句_第3张图片
当输入的值不是任何一条确定分支时,就会进入到default语句中。

2.循环结构(循环语句)

编程中,我们经常会遇到需重复执行某条程序,这时候就可以用循环语句来快速实现

2.1while循环

while循环语句的基本语法结构为:

while(条件判断)
{
  循环体;
 }

当满足条件后,程序便会进入到while语句的循环体中,每一次执行完后便会再次判断条件,如果满足则再一次进入到循环中,也就是先判断在循环。如下图所示:

Created with Raphaël 2.3.0 开始 while条件判断 while循环体 结束 yes no

直到条件不满足,循环结束。我们来看一个例子:

int a=0;
while(a<3)
{
printf("hehe\n");
}

该程序就能不断打印输出hehe。但该程序有一个致命的问题,每次循环过后a的值没有任何变化,导致每次条件判断都成立,程序进入死循环,不断重复输出hehe。
为了避免这种情况的出现,我们应完善代码,让每次循环过后,变量a的值发生变化。

int a=0;
while(a<3)
{
printf("hehe\n");
a++;
}

更改过后的代码在运行时,第一次a的值为0,进入while循环打印一个hehe后,a的值变为1;再次判断符合条件进入while循环打印hehe,a的值变为2;再重复打印一次hehe后a的值变为3。此时a=3不符合条件,循环结束,一共打印了三个hehe。
C语言分支与循环语句_第4张图片

2.2do while循环

do while语句的基本语法为

do
{
循环体;
}
while(条件判断);

do while循环执行的流程图如下:

Created with Raphaël 2.3.0 开始 循环体 while条件判断 结束 yes no

do while循环与while循环十分相似,二者不同的区别在于while循环是先进行条件判断符合条件在进入循环体,条件判断次数要比循环执行次数多一次;而do while循环是先执行一次循环体后在进行条件判断,条件判断次数与循环体执行次数是一致的。

2.3for循环

for循环的基本语法为

for(初始化变量;条件判断;变量改变)
{
 循环体;
}

例如用for循环打印1~3:

for(int a=1;a<4;a++)
{
printf("%d\n",a);
}

C语言分支与循环语句_第5张图片
实际上for循环其实与while循环类似,先判断条件,满足条件后进入循环体中,执行完一次后变量改变,再一次进行条件判断,直到条件不满足循环结束。
以该代码为例,for循环的流程图如下:

Created with Raphaël 2.3.0 开始 a<3 打印a a++ 结束 yes no

同while循环,for循环语句中条件判断次数也要比循环体执行次数多一次。

3.扩展:break,continue在循环语句中的作用

3.1break在循环中的作用

在之前的switch语句中,我们已经知道了break可以跳出switch语句,同理,在循环语句中,我们也可以用break来提前结束循环,我们用for循环来举例:

for(int a=1;a<4;a++)
{
printf("%d\n",a);
}

已知该代码可以打印1~3,如果我们想让程序打印完2之后直接结束循环,可以在循环体中增加一个if语句来判断是否要结束循环:

for(int a=1;a<4;a++)
{
printf("%d\n",a);
if(a==2)
 break;
}

该代码的输出结果为:
C语言分支与循环语句_第6张图片
可以发现,当程序打印到2时循环就结束了,这是因为当if(a==2)成立,break直接跳出了for循环。用流程图来表示,如下:

Created with Raphaël 2.3.0 开始 a<3 打印a a==2 结束 a++ yes no yes no

要注意,当多层for循环嵌套时,break只能跳出当前所属的一层for循环

3.2continue在循环中的作用

continue在循环中的作用是跳过该次循环后面的程序,同样我们用for循环来举例:

for(int a=1;a<4;a++)
{if(a==2)
continue;
printf("%d\n",a);
}

该代码的执行结果为:
C语言分支与循环语句_第7张图片
可以看到,循环直接跳过了2,只打印了1,3两个数字。这是因为当if(a==2)成立,continue跳过了该次打印的步骤。用流程图表示如下:

Created with Raphaël 2.3.0 开始 a<3 a==2 continue a++ 打印a 结束 yes no yes no

上述break和continue的用法在while语句和do while语句中同样适用。
但是,需要注意!!!

在while和do while 语句中使用continue是要将变量改变放在continue前,否则容易进入死循环
如下面的代码:

int a=0;
while(a<3)
{
printf("%d\n",a);
if(a==2)
continue;
a++;
}

输出结果为:
C语言分支与循环语句_第8张图片
死循环打印2。因为当a==2时,continue跳过了a++这个步骤,导致a的值等于2后就不再变化了!

你可能感兴趣的:(c语言)