C语言 流程控制二 —— 循环语句

目录

1.for循环

1.1 基本语法

1.2 for循环的执行流程

1.3 练习

2.while循环

2.1 while循环基本结构

2.2 while语句的执行流程

2.3 while循环的练习

3.do while循环

3.1 基本格式

3.2 do while循环的执行流程

3.3 do while循环的实例

 4.break语句和continue语句

4.1 while循环中break和continue

4.1.1 break实例

 4.1.2 continue实例

4.2 for循环中 break 和 continue

4.2.1 break实例

4.2.2 continue实例

4.3 do while循环中的break和continue

4.3.1 break实例

4.3.2 continue实例

5.循环的嵌套

5.1 练习

6.goto语句


C语言提供了三种循环语句,分别是for循环、while循环及do while循环语句。下面介绍第一种循环for循环语句。

1.for循环

1.1 基本语法

for循环是一种最常用的循环,for循环的基本语法格式如下:

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

说明:

表达式1:循环变量的初始化;

表达式2:循环结束条件的判断;

表达式3:每次调整循环变量。

1.2 for循环的执行流程

 执行顺序为:先执行表达式1对变量进行初始化,再执行表达式2判断条件,表达式2的结果 == 0,则直接结束循环;表达式2的结果 != 0,则执行循环语句,执行完成后执行表达式3调整变量,再继续执行表达式2判断结果是否为0,决定是否进行下一次循环。

1.3 练习

练习1:需求:计算1~100之和。

#include <stdio.h>
int main()
{
	int sum = 0;
	int i = 0;
	for (i = 0; i <= 100; i++)
	{
		sum += i;
	}
	printf("%d\n", sum);
	return 0;
}

 练习2:需求:计算1~100之间能被5整除的数字之和

//优化之后的
#include <stdio.h>
int main()
{
	int sum = 0;
	int i = 0;
	for (i = 5; i <= 100; i+=5)
	{
		sum += i;
	}
	printf("%d\n", sum);
	return 0;
}


//不优化
#include <stdio.h>
int main()
{
	int sum = 0;
	int i = 0;
	for (i = 1; i <= 100; i++)
	{
        if(i % 5 == 0)
		    sum += i;
	}
	printf("%d\n", sum);
	return 0;
}

2.while循环

2.1 while循环基本结构

while(表达式)
{
    执行语句;
}

例如:用while语句写一个循环,下列示例中while表达式不为0,则死循环打印"hello world"。

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	while (n != 0)
	{
		printf("hello world\n");//while后的表达式不为0,则死循环打印hello world
	}
	return 0;
}

2.2 while语句的执行流程

程序开始执行时,首先判断while的表达式是否成立,表达式的结果不为0,则执循环语句,执行完本次循环再继续判断表达式,是否继续进行下一次循环;如果表达式的结果为0,则循环直接结束。

2.3 while循环的练习

需求:打印1~100的偶数。(这里终止条件为 i < 100的原因是,条件表达式的执行次数总是比循环体的执行次数多一次,所以如果终止条件为 i <=100 ,则输出结果会多打印一个数据 102).

#include <stdio.h>
int main()
{
	int i = 0;
	while (i < 100)
	{
		i += 2;
		printf("%d ", i);
	}
	return 0;
}

 小练一下:

输入一个正整数,逆序打印这个整数的每一位

例如:

输入:1234,输出 4 3 2 1

#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	while (num != 0)
	{
		printf("%d ", num % 10);
		num = num / 10;
	}
	return 0;
}

3.do while循环

3.1 基本格式

循环语句的使用中do while相对前两种循环,使用较少。它的语法格式如下:

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

do while循环和for循环及while循环的区别:while循环和for循环都是先判断条件是否成立,如果成立则进入循环,执行循环语句,否则跳出循环。

而do while循环则先执行循环体,再判断while后的条件是否成立,表示式为真,则进行下一次循环,表达式为假,就跳出循环。

3.2 do while循环的执行流程

在do while 循环中先执行循环体,执行完循环体之后,再去“判断表达式” ,表达式的结果不为0,则继续执行循环体;判断表达式的结果为0,则结束循环。

do while循环的特殊在于语句中的循环至少会执行一次。

3.3 do while循环的实例

需求:打印1~100的值。

#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i += 1;
	} while (i <= 100);
	return 0;
}

 实际生活中,循环体至少被执行一次的场景比较少,所以do while循环不常使用。

小试牛刀:

需求:输入一个正整数,判断这个整数是由几位数字组成?

例如:输入:321   输出:4

#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	int count = 0;
	do
	{
		num = num / 10;
		count++;
	} while (num != 0);
	printf("%d\n", count);
	return 0;
}

 说明:这里并非只能使用 do while 语句,但这个场景使用do while循环更适合一些,因为即使输入0,也是1位数,要统计到位数中。

 4.break语句和continue语句

执行循环的过程中,如果遇到某个状况,需要提前终止循环的场景非常常见。C语言提供了 breakcontinue 两个关键字,和循环配合使用。

  • break 的作用为永久的终止循环,只要执行到break语句,直接跳出循环结构,继续执行循环后面的语句。
  • continue 的作用为跳过本次循环,继续执行下一次循环。在for循环和while循环中有所差异。

4.1 while循环中break和continue

4.1.1 break实例

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

执行结果,如下: 

 4.1.2 continue实例

continue 为”继续“的意思,在循环中的作用为跳过本次循环中continue后面的代码,继续执行下一次循环。

把上例代码中的 break语句 修改为 continue语句 会是什么结果呢?

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

分析:当 i == 8后,就执行 continue ,直接跳过了continue后面的代码,继续判断循环条件。因为这里跳过了 i++;语句,所以i 的值一直为8,程序陷入死循环中。

continue 语句可以帮助我们跳过某一次循环中continue后面的代码,直接跳到循环条件部分,进行下一次循环的判断,如果循环变量的调整在continue语句后面,就有可能出现死循环。

4.2 for循环中 break 和 continue

4.2.1 break实例

for循环中使用break语句和while循环中的使用类似,在for循环中使用break 也是用于终止循环。只要执行到break,直接跳出循环。

#include <stdio.h>
int main()
{
	int i = 1;
	for(i = 1 ; i <= 10 ; i++)
	{
		if (i == 8)
			break;
		printf("%d ", i);
	}
	return 0;
}

运行结果:

4.2.2 continue实例

上述代码中的break修改为continue会是什么结果呢?

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

运行结果:

显然输出结果并没有 ”8“.所以在for循环中continue语句的作用是跳出本次循环中continue后面的代码,直接执行循环调整部分。在实际生活中,如果发生某个条件就无需执行后续某些操作时,可以使用continue语句实现。

4.3 do while循环中的break和continue

do while语句 中的 breakcontinue的作用和while循环中类似。

4.3.1 break实例

#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 8)
			break;
		printf("%d ", i);
		i++;
	}while (i <= 10);
	return 0;
}

运行结果: 当 i == 8时,终止循环。

4.3.2 continue实例

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

运行结果为当i == 8时,由于跳过coninue后面的代码,执行不到循环的调整部分,所以程序陷入死循环中。

5.循环的嵌套

到这里我们已经学习完三种循环结构,分别是for循环,while循环和do while循环,这三种循环一般都可以嵌套在一起使用,来解决更多复杂的问题,这就是接下来要讲的循环嵌套 。

5.1 练习

需求:找出100~999之间的素数,并打印输出

注:素数又称为质数,只能被 1 和 本身整除的数字。

需求分析:首先假设要判断 i 是否为素数,需要拿 2~i-1 之间的数字去试除i,则要先产生 2~i-1 之间的数字,也可以使用循环解决。如果 2~i-1 之间有数字能整除 i ,则 i 不是素数,如果都不能整除 i,则 i 是素数。

	#include <stdio.h>
	int main()
	{
		int i = 0;
        //循环产生100~999的数字
		for (i = 100; i <= 999; i++)
		{
			int j = 0;
			int flag = 1;//假设 i 是素数
			for (j = 2; j < i; j++)
			{
				if (i % j == 0)
				{
					flag = 0;
					break;
				}
			}
			if (flag == 1)
			{
				printf("%d ", i);
			}
		}
	return 0;
}

6.goto语句

goto语句跳转标号是搭配使用的,goto语句可以实现在同一个函数内跳转到设置好的标号处。

例如:

#include <stdio.h>
int main()
{
    printf("hello\n");
    goto past;
    printf("world\n");
past:
    printf("跳过world打印\n");
    return 0;
}

goto语句在使用时,位置如果没有放置得当,容易导致在函数内部随意跳转,打乱程序的执行流程,所以建议能不使用就不使用;但goto语句也有能够发挥它的作用的场景,如在多层循环的代码中,如果想要快速跳出循环,使用 goto语句就非常容易。

for(……)
{
    for(……)
    {
        for(……)
        {
            if(disaster)
                goto go;    
        }
    }
}

go:
……

原本在for循环中想要提前跳出循环得使用break语句,但一个break语句只能跳出一层for循环,如果有3层循环嵌套就要使用 3 个break语句才能跳出循环,因此在这种场景下使用 goto语句就会更加便捷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值