C语言速成秘籍——循环结构(while、do while、for)和跳转语句(break,continue)
目录
- :one:`for`循环
- 1.1、`for`循环的语法形式 and 执行流程
- :two:`while`循环
- 2.1、`while`循环的语法 和 执行流程
- 2.2、:thinking::`while`循环和`for`循环compare
- :three:`do while`循环
- 3.1、`do while` 的语法 和 执行流程
- :four:跳转语句:`break`和`continue`语句
- 4.1、`while`循环中的`break`和`continue`
- 4.1.1、`break`举例
- 4.1.2、`continue` 举例
- 4.2、`do while`循环中的`break`和`continue`
- 4.2.1、`break`举例
- 4.2.2、`continue`举例
- 4.3、`for`循环中的`break`和`continue`
- 4.3.1、`break`举例
- 4.3.2、`continue`举例
- :pushpin:`for`和`while`中`continue`对比
📝学习预警:
我们前面学习了选择结构,C语言有三种结构(顺序、选择、循环)
- 🔗选择结构学习
这个是专栏学习,里面收录了C语言的教学内容,欢迎大家进去学习
- C语言学习专栏🔗
下面我们将学习循环结构:
for
循环
for(exp1;exp2;exp3)
语法学习
exp1:用来表示循环变量的 初始化
exp2:用来表示循环结束 条件的判断
exp3:用来循环 变量的调整for
循环中break
(永久跳离循环语句)和continue
(暂时跳离循环语句)的用法while
循环
- 语句的语法学习和
while
循环中break
和continue
的用法do while
循环
- 语句的语法学习和
do while
循环中break
和continue
的用法do while
循环的break
和continue
的使用和while
类似- for 和 while循环语句的
continue
对比使用
- for是会跳到循环变量的调整(exp3),安全性高
- while是会跳到条件判断语句,安全性低
- 通过调试和监视窗口来看语句的执行和变量的变化, 这是相关的链接,后面的学习中都会用到这个工具来进行理解 🔗监视变量和调试语句学习
1️⃣for
循环
1.1、for
循环的语法形式 and 执行流程
for(exp1;exp2;exp3)//注意这些之间是分号隔开的,别写成逗号了
{语句;
}
//exp1:用来表示循环变量的初始化
//exp2:用来表示循环结束条件的判断
//exp3:用来循环变量的调整
for
循环的执行流程:
- 先执行
exp1
,初始化循环变量 - 进入
exp2
,- 判断表达式是否为真(==1),进入循环语句;
- break:
- (无
break
)循环语句执行了后,再进行exp3
变量调整(通常为自增或自减),再判断直到不满足结束循环。 - (有
break
)直接跳出循环体,结束循环。
- (无
- continue:
- (无
continue
)循环语句执行了后,再进行exp3
变量调整(通常为自增或自减),再判断直到不满足结束循环。 - (有
continue
)直接跳到变量调整,结束循环。
- (无
- break:
- 判断表达式是否为假(!=0),不进入循环语句,结束
for
循环
- 判断表达式是否为真(==1),进入循环语句;
上面我们已经学习了
for
循环的语法形式,我们写一道题来练习一下吧
- 练习1:打印1-10的值
- 提升难度:每5个值之间要换行
- 练习2:计算1-100之间3的倍数的数字和
- 我们通过打印3的倍数的数值会发现什么规律?对此我们可以进一步改进代码
练习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
语句的循环一次
#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
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
的循环语句是使用最少的,其语法如下:
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
练习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️⃣跳转语句:break
和continue
语句
在我们循环执行的过程中,如果发生某些特殊状况时,需要提前终止循环。
- 在C语言中提供了
break
和continue
这两个关键字,来进行循环的终止的。break
:这个是永久终止循环,只要break
被执行,就会直接跳出第一层循环(如果后嵌套循环中有个别循环层有break
,就是跳离该层的循环),继续往后执行循环外的内容。continue
:这个是暂时跳过本次循环中continue
后面的代码,跳过后还会继续执行循环代码,在for
循环和while
循环中是有差异的
- 下面关于
break
和continue
的代码,我们可以通过调试和监视窗口来看语句的执行和变量的变化- 这是相关的链接 🔗监视变量和调试语句,可以打开链接学习相关内容
4.1、while
循环中的break
和continue
4.1.1、break
举例
练习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
- 其执行流程如下:
练习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
会怎么样呢?
练习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
会如何呢?
练习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
循环中的break
和continue
4.2.1、break
举例
是和
while
循环一样的,运行到break
时就直接跳离do while
循环代码块,执行printf("www\n");
- 可以调试代码查看具体代码语句的运行流程
#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
,导致死循环
- 可以调试代码查看具体代码语句的运行流程
#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
循环中的break
和continue
4.3.1、break
举例
for
循环中的break
其实适合while
循环中的一样作用,break
是跳离第一层的循环,可以通过调试查看语句的运行能过程
#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
循环中的continue
和while
循环中的不太一样
- 会自动执行循环变量的更新
- 下面的代码中
i=5
时执行语句printf()和continue
,遇到continue
不会执行下面的语句,接着循环变量更新(i++)i=6
#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
📌for
和while
中continue
对比
- 我们可以看到下面两个代码中,
continue
执行后,它们跳转的位置是不一样的,导致最后的运行结果不一致for
循环中的continue
是会自动执行循环变量的更新,安全性高while
循环中的则是执行条件判断语句 ,安全性低,容易死循环
✒️小结:
上面我们学习了循环语句(for、while、do while)的使用和跳转语句(break、continue)在循环语句的用处,我们学习了两种跳转语句还会不会有其他跳转语句呢?
- 跳转语句
goto
,这个较break和continue来说,复杂很多,这个会作为单独的知识点来教学,后面会更新goto的使用和应用- 后面会更新循环语句的嵌套,嵌套循环不作为单独的知识点学习,会放在C语言小游戏的专栏里,作为练习题
如果上面的内容有错误和不足欢迎大家在评论区指出,会积极修正!
感谢大家的阅读🌹🌹