c语言分支和循环语句

文章目录

  • 前言
  • 一、控制语句是什么?
  • 二、分支语句(选择结构)
    • 1.if语句
      • 1.悬空else
    • 2.switch语句
  • 三、循环语句
    • 1.for
      • a.语法
      • b.for循环中的break和continue
      • c.for循环的变种
    • 2.while
      • a.语法
      • b.while语句中的break和continue
    • 3.do while
      • a.语法
      • b. do while循环中的break和continue
  • 四、goto语句

前言

语句是什么?
C语言中可以分为下面五类:

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句

本文主要记录的是控制语句

一、控制语句是什么?

控制语句用于控制程序的执行流程,以实现程序的各种结构方式。

可分成以下三类:

  1. 条件判断语句也叫分支语句:if语句、switch语句;
  2. 循环执行语句:do while语句、while语句、for语句;
  3. 转向语句:break语句、goto语句、continue语句、return语句。

二、分支语句(选择结构)

1.if语句

代码如下(示例):

//语法结构
//单分支
if(表达式)
	语句;

//多分支
if(表达式)
	语句;
else if(表达式)
	语句;
...
else
	语句;

注意:多分支中的else可有可无。

1.悬空else

#include 
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
    //思考运行结果是·什么?
}

运行结果是什么都不输出。
原因:else 与它最近的if匹配,上面代码相当于下面代码

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

小总结:写代码要有良好的代码风格, 良好的代码风格更让人通俗易懂。

2.switch语句

switch语句也是一种分支语句,它常常用于多分支的情况

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


注意:如果选择case 整形常量表达式1 为入口进入语句中,整形常量表达式1后的语句都执行,因此switch语句中,没有办法直接实现分支,要搭配break才能实现真正的分支

例如

	int main
	{
		int day=0
		scanf("%d",&day);
		switch
		{
			case 1:
				printf("星期一\n");
				break;
			case 2:
				printf("星期二\n");
				break;
			...
		}
		return 0;
}

三、循环语句

1.for

a.语法

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

表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。

例题:打印1-5的数字

int main()
{
	int i=0;
	for(i=1;i<=5;i++)
	{
		printf("%d ",i);
	}
	return 0;
}

for循环的执行流程图:

c语言分支和循环语句_第1张图片

b.for循环中的break和continue

例子1:

int main()
{
	 int i = 0;
	 for(i=1; i<=10; i++)
	 {
		if(i == 6)
			break;
		printf("%d ",i);
	 }
	 return 0;
}

运行结果:1 2 3 4 5

int main()
{
	 int i = 0;
	 for(i=1; i<=10; i++)
	 {
		 if(i == 6)
		 	continue;
		 printf("%d ",i);
	 }
	 return 0;
}

运行结果:1 2 3 4 5 7 8 9 10

c.for循环的变种

例子1:

int main()
{
	for(;;)
	printf("haha\n");
	//运行结果:死循环
	return 0;
}

原因:判断部分省略被默认为真,调整部分也被省略,使得判断部分一直为真,导致死循环

例子2:

int main()
{    
	int i = 0;
    int j = 0;
    //如果省略掉初始化部分,这里打印多少个haha?
    for(; i<10; i++)
   {
        for(; j<10; j++)
       {
			 printf("haha\n");
       }
   }
   return 0;
}

运行结果:10个哈哈
原因:i和j开始都被初始化为0,i循环10次。i第一次循环结束后,j就被改为了10。i第二次循环时,j并没有再次初始化,所以j依然为10,第二层for循环不会进入循环语句。后面原理也一样。直到i++到10结束第一层循环。

2.while

a.语法

while(表达式)
 	循环语句;

while语句执行的流程:
c语言分支和循环语句_第2张图片
例子:打印1到5的数字

int main
{
	int i=1;
	while(1<=5)
	{
		printf("%d ",i);
		i++;
	}
	return 0;
}

b.while语句中的break和continue

例子:

int main()
{
	int i=0;
	while(i<=10)
	{
		if(i==6)
			break;
		printf("%d",i);
		i++;
	}
	return 0;
}

运行结果:1 2 3 4 5

例子

int main()
{
	 int i = 1;
	 while(i<=10)
	 {
		 if(i ==6)
			 continue;
		 printf("%d ", i);
		 i = i+1;
	 }
	 return 0;
}

运行结果:1 2 3 4 5 死循环
程序会一直循环,但不打任何数字,因为当i=6时continue会跳到判断条件,但 i 不会改变一直为6,又进入if语句中,一直循环不会停止。

总结
1.continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行
2.循环中只要遇到break,就停止后期的所有的循环,直接终止循环。所以:while中的break是用于永久终止循环的。

3.do while

a.语法

do
	循环语句;
while(表达式);

do …while()循环的执行流程图:
c语言分支和循环语句_第3张图片
特点:循环最少执行一次。

b. do while循环中的break和continue

和while循环中的用法差不多,可以参考

四、goto语句

当想跳出多层循环,用break是达不到目的的,break只能从最内层循环退出到上一层循环,而goto可以跳到标记的标号位置
例如:

again:
...
while(..)
{
	while(..)
	{
		if(...)
		goto again;
	}
}

例子:
有趣的小程序

c语言分支和循环语句_第4张图片


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