C语言速成秘籍——循环结构(while、do while、for)和跳转语句(break,continue)

目录

📝学习预警:

我们前面学习了选择结构,C语言有三种结构(顺序、选择循环

下面我们将学习循环结构

  • for循环
    • for(exp1;exp2;exp3) 语法学习
      exp1:用来表示循环变量的 初始化
      exp2:用来表示循环结束 条件的判断
      exp3:用来循环 变量的调整
    • for循环中break(永久 跳离循环语句)和continue(暂时跳离循环语句)的用法
  • while循环
    • 语句的语法学习while循环中breakcontinue的用法
  • do while循环
    • 语句的语法学习do while循环中breakcontinue的用法
    • do while循环的breakcontinue的使用和while类似
  • for 和 while循环语句的continue对比使用
    • for是会跳到循环变量的调整(exp3),安全性高
    • while是会跳到条件判断语句,安全性低
  • 通过调试和监视窗口 来看语句的执行和变量的变化 , 这是相关的链接,后面的学习中都会用到这个工具来进行理解 🔗监视变量和调试语句学习

1️⃣for循环

1.1、for循环的语法形式 and 执行流程

c 复制代码
for(exp1;exp2;exp3)//注意这些之间是分号隔开的,别写成逗号了
{
	语句;
}
//exp1:用来表示循环变量的初始化
//exp2:用来表示循环结束条件的判断
//exp3:用来循环变量的调整

for循环的执行流程:

  • 先执行exp1,初始化循环变量
  • 进入exp2
    • 判断表达式是否为真(==1) ,进入循环语句;
      • break:
        • break)循环语句执行了后,再进行exp3变量调整 (通常为自增或自减),再判断直到不满足结束循环。
        • break)直接跳出循环体,结束循环。
      • continue:
        • continue)循环语句执行了后,再进行exp3变量调整 (通常为自增或自减),再判断直到不满足结束循环。
        • continue)直接跳到变量调整,结束循环。
    • 判断表达式是否为假(!=0) ,不进入循环语句,结束for循环

上面我们已经学习了for循环的语法形式,我们写一道题来练习一下吧

  • 练习1:打印1-10的值
    • 提升难度:每5个值之间要换行
  • 练习2:计算1-100之间3的倍数的数字和
    • 我们通过打印3的倍数的数值会发现什么规律?对此我们可以进一步改进代码
c 复制代码
练习1:
#include<stdio.h>
int main()
{
	int num = 0;
	for (num = 1; num <= 10; num++)
	{
		printf("%d ", num);
		/*这部分是难度提升的代码:
		if (num % 5 == 0)
			printf("\n");
		*/
	}
	return 0;
}
*******************************
练习2:
#include<stdio.h>
int main()
{
	int num = 0;
	int sum = 0;
	for (num = 1; num <= 100; num++)
	{
		if (num % 3 == 0)
		{
			printf("3的倍数的值为:%d\n", num);//检验3的倍数的数值
			sum = sum + num;
		}
	}
	printf("sum=%d\n", sum);
	return 0;
}
**********************
练习2:(改进)发现3的倍数中两个数值是相差3,
		改进后可以减少循环和判断的次数,进行代码的优化
#include<stdio.h>
int main()
{
	int num = 0;
	int sum = 0;
	for (num = 3; num <= 100; num += 3)
	{
			printf("3的倍数的值为:%d\n", num);//检验3的倍数的数值
			sum = sum + num;
	}
	printf("sum=%d\n", sum);
	return 0;
}

2️⃣while循环

2.1、while循环的语法 和 执行流程

while语句的语法结构和if语句非常相似

  • if语句相当于while语句的循环一次
c 复制代码
#include <stdio.h>
int main()
{
	int i = 4;
	if (i)			//表达式非0,执行一下语句
	{
		printf("hhhh\n");
	}
	printf("\n\n");
	while (i)		//表达式非0,执行一下语句
	{
		printf("hhhh\n");		//执行语句
		i--;			//i自减直到减到0,在进行while(i),判断表达式,为0,不执行语句,跳出循环
	}
	return 0;
}
  • while语句的执行流程:
    • 先执行判断表达式
    • 1、表达式值为0 ,循环结束
    • 2、表达式值非0执行 循环语句,语句执行后继续判断是否再执行语句
    • break:遇到break直接跳离循环语句,结束循环语句
    • continue:遇到continue直接跳到while的条件判断表达式

while循环代码练习:

  • 1、在屏幕上打印1-10的值
  • 2、输入一个正的整数,逆序打印这个整数的每一位
    • 输入:1234,输出:4 3 2 1
    • 输入:128,输出:8 2 1
c 复制代码
1、在屏幕上打印1-10的值
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i++;
	}
	return 0;
}
***************************
2、输入一个正的整数,逆序打印这个整数的每一位(下面有解释)
#include<stdio.h>
int main()
{
	int n = 0;
	int b = 0;
	printf("请输入一个整数:");
	scanf("%d", &n);
	while (n)
	{
		b=n % 10;
		printf("%d ", b);
		n = n / 10;
	}
	return 0;
}

2.2、🤔:while循环和for循环compare

例如:打印1-10的数字

  • 会发现while循环和for循环时相似的,它们都有变量初始化、判断条件、变量调整、循环语句
  • 只是它们的位置不同,for循环的初始化、判断、调整是集中 的,利于代码 的维护;而while循环的这三部分是分散
  • 所以形式上,for循环时while循环的
    *但在具体使用中我们根据具体问题使用恰当的语句

3️⃣do while循环

3.1、do while 的语法 和 执行流程

  • 通常在循环结构中,do while的循环语句是使用最少的,其语法如下:
c 复制代码
do
{
	语句;
}while(exp);
//语句是:循环体
//exp是:判断条件
  • 在我们前面的学习中,for循环和while循环都是先判断,再决定是否进入循环语句
  • 但是do while先进入循环语句再判断 表达式是否成立
    • 表达式为真(!=0)再次进入循环语句,直到结束循环
    • 表达式为假(==0)直接结束循环
  • do while循环语句中的循环体是至少被执行一次的,这就是其特殊的地方之处

do while循环的执行流程:

  • 执行循环语句,
  • 进行exp判断条件是否满足
    • exp != 0(真),继续执行循环语句,直到遇到break(跳出循环语句,结束循环 ),遇到continue(跳到循环的跳到条件判断语句);或者条件不满足,结束循环
    • exp == 0(假),结束循环

上面我们已经大致学习了do while的循环结构,让我们实操一下吧!

  • 练习1:打印1-10的值
  • 练习2:输入一个正整数,计算这个整数时几位数
    • 输入:1234 ,输出:4
    • 输入:432 ,输出:3
c 复制代码
练习1:
#include<stdio.h>
int main()
{
	int num = 0;
	do
	{
		num++;
		printf("%d ", num);
	} while (num < 10);
	return 0;
}
*******************
练习2:
#include<stdio.h>
int main()
{
	int num = 0;
	int count = 0;//计数
	printf("请输入一个正整数:");
	scanf("%d", &num);
	do
	{
		num = num / 10;
		count++;
	} while (num);
	printf("这个整数是:%d位\n", count);
	return 0;
}
  • 练习2 的解题思路,如下:
  • 上面的练习2 不一定要用do while 循环,但用do while循环是比较好的,因为n=0 的时候,是1位数,要统计位数的。

4️⃣跳转语句:breakcontinue语句

在我们循环执行的过程中,如果发生某些特殊状况时,需要提前终止循环。

  • 在C语言中提供了breakcontinue这两个关键字,来进行循环的终止的。
  • break:这个是永久终止循环,只要break被执行,就会直接跳出第一层循环(如果后嵌套循环中有个别循环层有break,就是跳离该层的循环),继续往后执行循环外的内容。
  • continue:这个是暂时跳过本次循环中continue后面的代码,跳过后还会继续执行循环代码,在for循环和while循环中是有差异
  • 下面关于breakcontinue的代码,我们可以通过调试和监视窗口 来看语句的执行和变量的变化

4.1、while循环中的breakcontinue

4.1.1、break举例

c 复制代码
练习1:
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
		{
			printf("\n");
			break;
		}
		printf("%d ", i);
		i += 1;
	}
	printf("www\n");
	return 0;
}
***************************
输出:
1 2 3 4
www

在打印完1 2 3 4 后,i = 5的时候执行break,跳出while循环 ,执行循环外的代码 ,输出www

  • 其执行流程如下:


c 复制代码
练习2:练习1的提升(二层循环)
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 1)
	{
		while (i <= 10)
		{
			if (i == 5)
			{
				printf("\n");
				break;//跳出第一层while循环
			}
			printf("%d ", i);
			i += 1;
		}
		printf("hhh\n");
		i++;
	}
	printf("www\n");
	return 0;
}
***************************
输出:
1 2 3 4
hhh
www

在打印完1 2 3 4 后,i = 5的时候执行break,跳出第一层 while循环 ,执行第一层循环外的代码 ,输出hhh,然后判断第二层while循环条件是否满足,不满足结束二层while循环。

  • 该练习的执行流程如下:

4.1.2、continue 举例

  • continue继续 的意思,在循环中的作用是跳出本次循环中continue后边的代码,继续进行下一次循环的判断

如果把上面的代码中的break替换成continue会怎么样呢?

c 复制代码
练习1:
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
		{
			printf("\n");
			continue;
			/*当 i == 5 的时候,执行continue代码,跳过后面语句,去到判断条件
				此时因为跳过后面语句 i的值一直没有发生变化(i == 5),
				因此会导致死循环
			*/
		}
		printf("%d ", i);
		i += 1;
	}
	printf("www\n");
	return 0;
}
  • 该代码执行流程,可根据流程图进行理解

嵌套循环中continue会如何呢?

c 复制代码
练习2 :嵌套循环
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 1)
	{
		while (i <= 10)
		{
			if (i == 5)
			{
				printf("\n");
				continue;
				/*当 i == 5 的时候,执行continue代码,跳过后面语句,去到判断条件
				此时因为跳过后面语句 i的值一直没有发生变化(i == 5),
				因此会导致死循环
				*/
			}
			printf("%d ", i);
			i += 1;
		}
		printf("hhh\n");
		i++;
	}
	printf("www\n");
	return 0;
}
  • 代码执行流程图:

4.2、do while循环中的breakcontinue

4.2.1、break举例

是和while循环一样的,运行到break时就直接跳离do while循环代码块,执行printf("www\n");

  • 可以调试代码查看具体代码语句的运行流程
c 复制代码
#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i++;
	}while (i <= 10);
	printf("www\n");
	return 0;
}

4.2.2、continue举例

是和while循环一样的,运行到continue时就直接跳到do while循环的条件判断i永远5,导致死循环

  • 可以调试代码查看具体代码语句的运行流程
c 复制代码
#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i++;
	}while (i <= 10);
	printf("www\n");
	return 0;
}

4.3、for循环中的breakcontinue

4.3.1、break举例

for循环中的break其实适合while循环中的一样作用,break是跳离第一层的循环,可以通过调试查看语句的运行能过程

c 复制代码
#include<stdio.h>
int main()
{
	int i = 1;
	for(i=1;i<=1;i++)
	{
		for(i=1;i <= 10;i++)
		{
			if (i == 5)
			{
				printf("\n");
				break;//跳出第一层for循环
			}
			printf("%d ", i);
		}
		printf("hhh\n");
	}
	printf("www\n");
	return 0;
}
********************
输出:
1 2 3 4
hhh
www

4.3.2、continue举例

for循环中的continuewhile循环中的不太一样

  • 自动执行循环变量的更新
    • 下面的代码中i=5时执行语句printf()和continue,遇到continue不会执行下面的语句,接着循环变量更新 (i++)i=6
c 复制代码
#include<stdio.h>
int main()
{
	int i = 1;
	for(i=1;i <= 10;i++)
	{
		if (i == 5)
		{
			printf("\n");
			continue;
			/*当 i == 5 的时候,执行continue代码,跳过后面语句,去到for( )里面
			来到了i++的调整部分,i == 6
			*/
		}
		printf("%d ", i);
	}
	printf("www\n");
	return 0;
}
**************************
输出:
1 2 3 4
6 7 8 9 10 www

📌forwhilecontinue对比

  • 我们可以看到下面两个代码中,continue执行后,它们跳转的位置是不一样的,导致最后的运行结果不一致
    • for循环中的continue是会自动执行循环变量的更新,安全性高
    • while循环中的则是执行条件判断语句 ,安全性低,容易死循环

✒️小结:

上面我们学习了循环语句(for、while、do while)的使用和跳转语句(break、continue)在循环语句的用处,我们学习了两种跳转语句还会不会有其他跳转语句呢?

  • 跳转语句goto,这个较break和continue来说,复杂很多,这个会作为单独的知识点来教学,后面会更新goto的使用和应用
  • 后面会更新循环语句的嵌套,嵌套循环不作为单独的知识点学习,会放在C语言小游戏的专栏里,作为练习题

如果上面的内容有错误和不足欢迎大家在评论区指出,会积极修正!

感谢大家的阅读🌹🌹

相关推荐
秦.赢渠梁2 小时前
各种通信(三):GPS模块数据解析
c语言
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 HTTP 缓存机制 笔记29
spring boot·笔记·缓存
大白的编程日记.3 小时前
【Linux学习笔记】线程同步与互斥之生产者消费者模型
linux·笔记·学习
新子y3 小时前
【小白笔记】strip的含义
笔记·python
摇滚侠3 小时前
Spring Boot 3零基础教程,WEB 开发 内容协商 接口返回 YAML 格式的数据 笔记35
spring boot·笔记·后端
Chunyyyen4 小时前
【第十八周】自然语言处理的学习笔记03
笔记·学习·自然语言处理
聪明的笨猪猪4 小时前
Java JVM “类加载与虚拟机执行” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
im_AMBER4 小时前
React 02
前端·笔记·学习·react.js·前端框架
怀揣小梦想4 小时前
跟着Carl学算法--哈希表
数据结构·c++·笔记·算法·哈希算法·散列表
zyq~4 小时前
【课堂笔记】概率论-1
笔记·概率论