【Amazing! C】分支和循环语句(二)

前言

二、循环语句

1. while语句

1.1 语法结构

1.2 示例演示

1.3 while语句中的break和continue

2. for语句

2.1 语法结构

2.2 示例演示

2.3 for语句中的break和continue

2.4一些for循环的变种

3. do while语句

3.1 语法结构

 2.2 示例演示

2.3 do while语句中的break和continue

4. goto语句


前言

        接上章,我们大致了解了分支语句中if和switch语句的用法,那么接下来,我们将继续了解循环语句中while、for、do while语句的用法。

二、循环语句

        循环语句可用于重复执行某条语句(循环体),若判断表达式为真,则进入循环语句,执行完毕后再次对判断表达式的真假进行判断。

1. while语句

1.1 语法结构

while(条件语句)//判断条件语句是否为真
{
    循环语句;
}

        while语句执行的流程图如图所示:

        从图中可知,当程序进行到循环语句时,首先执行判断语句,若表达式不为0(表达式为真),则执行循环体,接着再次判断控制表达式。若表达式为0(表达式为假)则循环结束。

1.2 示例演示

        基于此,我们举个例子:打印1~10这十个数字。

#include<stdio.h>

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

1.3 while语句中的break和continue

        while循环中,continue可跳过本次循环后边的代码,直接去判断部分,看是否进行下一次循环。break的作用是跳出循环,即只要遇到break,则循环中止。

        我们以2.2的代码为例,并做进一步修改:打印1~10中除了5的所有数字。

#include<stdio.h>
int main()
{
	int i = 0;
	while (i < 10)
	{
		i++;
		if (i == 5)
			continue;
		printf("%d ", i);
	}

	return 0;
}

2. for语句

2.1 语法结构

for(表达式1 - 初始化部分;表达式2 - 循环判断部分;表达式3 - 调整部分)
	循环语句;

        for语句执行的流程图如图所示:

for循环语句有三个表达式:

        表达式1用于对循环变量进行初始化;

        表达式2给定一个范围,起到在有限范围内循环执行语句的作用,用于判断循环是否结束;

        表达式3用于对循环变量的调整。

2.2 示例演示

        我们采用for循环语句对1.2进行改写。

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

	return 0;
}

2.3 for语句中的break和continue

        break在while循环和for循环中的作用一样,即遇到break,则循环中止;然而continue的用法稍有区别,在for循环语句中,遇到continue时,会跳过循环语句中continue后边的代码,然后直接跳至循环的调整部分。

        我们以2.2为例,同样实现打印除5以外1~10的数字。

#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;//跳过后边部分,来到调整部分

		printf("%d", i);
	}

	return 0;
}

2.4一些for循环的变种

        for循环语句中有三个表达式,分别是初始化、判断、调整表达式,当我们在阅读代码的时候,有时会看到三个表达式中的1个或几个被省略掉了,例如:

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	
	for ( ; i < 3 ; i++)
	{
		for (; j < 3; j++)
		{
			printf("hehe\n");
		}
	}
	return 0;
}//只打印三次hehe

         由此,我们可以知道,三个表达式是可以省略的,由上例可知,当j = 3时,跳出这个循环,到i++,此时,i=1,进入这个循环,但是j没有初始化,此时j = 3,所以不执行循环。

        此外,如果省略掉判断部分,则意味着判断部分恒为真。

#include<stdio.h>
int main()
{
	for (;;)
	{
		printf("hehe\n");
	}
	return 0;
}//死循环

3. do while语句

3.1 语法结构

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

        do while语句执行的流程图如图所示:

从流程图中,我们可以看出来:

1.while和for语句中,判断语句在前。while和for语句的顺序是先对条件进行判断。若判断为真,则进入并执行循环语句,若不为真,直接跳过循环。

2.do while语句中,判断语句在后。do while语句的顺序是程序上来以后直接先进入循环并执行一次循环体语句,然后再对条件进行判断。若判断条件为真,则继续下一次循环,若不为真,则跳出循环。

 2.2 示例演示

        采用do while语句打印1~10,程序代码如下:

#include<stdio.h>

int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i++;
	} while (i <= 10);

	return 0;
}

2.3 do while语句中的break和continue

        do while循环中,break和continue和在while循环中是一样的。break都是用于终止循环,continue是跳过本次循环后边的代码,直接去判断部分。

#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			continue;//跳至判断语句
		printf("%d ", i);//1 2 3 4 
		i++;
	} while (i <= 10);

	return 0;
}

        代码执行并打印1 2 3 4后进入死循环。原因在于,当i == 5时,if条件成立执行continue,跳过后边printf()和i++语句,直接判断语句while(i <= 10),此时判断条件成立,但i的值并没有发生改变,因此会反复执行if条件语句中的continue,从而造成代码死循环。

4. goto语句

        C语言中提供了可以随意滥用的语句和标记跳转的标号,可直接跳转至设置好的标号处。只能在同一个函数内部跳转,不能跨函数。最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

#include<stdio.h>
int main()
{
flag:	
	printf("hehe\n");
	printf("haha\n");
	goto end;

	printf("heihei\n");
end:
	printf("xxxxx\n");

	return 0;
}

        上述代码没有执行printf("heihei\n")语句,而是执行了printf("xxxxx\n")语句。

        goto语句使用不当,会导致执行步骤在函数内部随意跳转,从而可能会打乱程序正常的执行流程。因此,尽量不要过多使用go to语句。但在深层嵌套结构的代码中使用就比较方便了。例如:

for(...)
 {
 	for(...)
	 {
 		for(...)
 			{
 				if(...)
	 				goto test;
 			 }
 	  }
 }
test:

        上述代码执行过程中,若要完全跳出循环语句,需要使用三个break,因为一个break只能跳出一层循环。因此,使用go to语句会方便很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值