勤时当勉励 岁月不待人
C/C++ 游戏开发
Hello米娜桑,这里是君兮_,今天又抽空为大家更新我们的主线0基础C语言啦!今天要将的内容是循环语句的具体用法。同时如果你是0基础小白的话,建议先看看下面两篇博客哦!以下是链接:
【C语言初阶】万字解析,带你0基础快速入门C语言(上)
【C语言初阶】万字解析,带你0基础快速入门C语言(下)
- 废话不多说咱们直接开始吧!!
循环语句详解
- 一. 循环语句具体解析
- 什么是循环语句,分别又有哪些?
- 1.while循环
- while语句中的break和continue
- break
- continue
- 2.for循环
- for循环中的break和continue
- for语句的循环控制变量
- for循环中的一些变体
- 3.do-while循环
- do-while语句中的break与continue
- 4.goto语句
- 整蛊游戏-关机程序
- 二.循环语句的实战应用
- 总结
一. 循环语句具体解析
什么是循环语句,分别又有哪些?
- 以上图片的例子就叫循环,也就是说满足某个条件就进入循环语句直至该条件不再满足就跳出循环。
- 循环语句通常分为以下三类:
- 接下来我们逐一介绍。
1.while循环
- 在我们之前的介绍中相信你已经掌握了,if语句:
当条件满足的情况下,if语句后的语句执行,否则不执行。
但是这个语句只会执行一次。 - 由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢? - C语言中给我们引入了: while 语句,可以实现循环。
- 语法结构
//while 语法结构
while(表达式)
循环语句;
- while语句执行流程
- 图中expr表条件判断,如果!=0(为真)就进入循环执行循环中的stmt,执行完或者使用continue跳出该次循环后进入下一次循环继续判断此时是否为真,如果此刻条件==0(为假)或者在上次循环中用break跳出循环,那么此时循环停止,执行循环后的语句。
- 举一个简单的例子
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
- 上面代码的结果是在屏幕上打印1-10的数,我在这里想让大家注意的地方是:
i = i+1;
- 在通常情况下我们使用循环语句时,得让它的条件朝着不满足循环条件的方向发生变化,否则就一直跳不出循环语句,陷入死循环。
while语句中的break和continue
了解了while循环的基本用法,我们来聊聊循环语句中会多次出现的break与continue
break
- 还是引例来说明:
//break 代码实例
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
{
break;
}
printf("%d ", i);
i = i + 1;
}
return 0;
}
- 这段代码的输入结果是什么?
- 当i==5时,就已经通过break跳出该循环了,因此只打印前面四个数
总结:
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
continue
//continue 代码实例1
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}
- 虽然从结果上看,打印的依然是1 2 3 4,但是两者现在处于的状态确是截然不同的:
- 对比两个结果图我们可以发现,用break时,循环已经停止了,而使用continue时,光标仍然在闪烁说明此时循环压根没停止,陷入了死循环。
- continue的作用是跳过此次循环continue下面的部分直接进入下次循环,由于i=i+1在continue下面未被执行,此时i还是等于5满足循环条件并且一直不会变化,这时程序就进入了死循环。
总结:
continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
2.for循环
- for循环也是我们常用的一种循环语句
语法
for(表达式1; 表达式2; 表达式3)
循环语句;
-
表达式1为初始化部分,用于初始化循环变量的。
-
表达式2为条件判断部分,用于判断循环时候终止。
-
表达式3为调整部分,用于循环条件的调整。
-
举个实际应用的问题来说明:
使用for循环 在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
- for循环的执行流程
- 图中expr1表示初始化变量,expr2表示判断循环条件,expr3表示调整变量,stmt表示f执行or中的代码
- 我们来对比以下for循环与while循环:
int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
printf("hehe\n");
i = i+1;//调整部分
}
//实现相同的功能,使用for
for(i=1; i<=10; i++)
{
printf("hehe\n");
}
- 通过两者的对比我们可以发现:
- 在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。
for循环中的break和continue
- 和在while循环中类似,但是还是有部分差异的,我们来看看下面两段代码:
//代码1
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
//代码2
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
-
与whlie中代码类似,但是运行结果却不尽相同:
-
代码1是相同的这里不做讨论,代码2的运行结果却有较大差异。
-
原因:
-
在for循环中,我们可以看到,即使continue跳过了i==5这次循环,但由于i是在for语句中表达式3上就已经++了,所以跳过5也不会对后面的运行有什么影响,只需省略对5的打印即可。
for语句的循环控制变量
建议:
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}
- 这两种写法都是对的,但是对于初学者来很容易误判循环需要执行的次数,此时采用前闭后开区间的写法就能很好的判断出循环的次数。
- 也就是说,此时循环的次数就等于你后开(i<10)中的那个数,对上面代码来说就是10次!
for循环中的一些变体
- 1.可省略
//代码1
for(;;)
{
printf("hehe\n");
}
- for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题
- 2.可嵌套
//代码2
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("hehe\n");
}
- 此时打印的hehe数应该为10*10个
- 3.可使用多个变量控制循环
//代码4-使用多余一个变量控制循环
int x, y;
for (x = 0, y = 0; x<2 && y<5; ++x, y++)
{
printf("hehe\n");
}
3.do-while循环
- 与while循环类似,但是它是先执行一次,再判断循环条件。
- 语法
do
循环语句;
while(表达式);
- 执行流程
- stmt表示需要执行的语句,expr表示判断循环的条件。
- do-while语句的特点
- 循环至少执行一次,使用的场景有限,所以不是经常使用。
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i=i+1;
}while(i<=10);
return 0;
}
do-while语句中的break与continue
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(5 == i)
break;
printf("%d ", i);
i=i+1;
}while(i<=10);
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(5 == i)
continue;
printf("%d ", i);
i=i+1;
}while(i<=10);
return 0;
}
- 实际使用下来与while类似,我就不具体展开了。
4.goto语句
- C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
- 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
- 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
- 例如:一次跳出两层或多层循环。
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。 - goto语言真正适合的场景如下:
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况
- 这样就能直接跳出多层循环直接来到error了
整蛊游戏-关机程序
- 下面我们来讲一个goto实战的小例子–关机程序
- 注意:这里博主用切身经历告诉大家,如果不想遭到毒打,就不要整蛊室友!!切记切记!!尤其是在ta打游戏的时候。
- 代码如下:
#include<stdlib.h>
#include<windows.h>
int main()
{
char i[10] = { 0 };
system("shutdown -s -t 60");//系统指令让电脑关机
again:
printf("你的电脑将在一分钟后关机,请输入“我是猪”停止关机\n请输入:>");
scanf("%s", &i);
if ((strcmp(i, "我是猪") != 0))//判断是否输入“我是猪”
goto again;
else
system("shutdown -a");//停止关机
return 0;
}
- 当然,while也可以实现:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char input[10] = { 0 };
system("shutdown -s -t 60");
while (1)
{
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if (0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
break;
}
return 0;
}
}
- 这种算是比较好心的了,你如果想恶搞的话完全可以错误的提示ta,ta永远都猜不对。甚至能把这个程序安装在系统里只要电脑一启动就运行该程序。
- 当然这里博主墙裂不推荐大家这么做,博主上回这么做已经是18年前了,现在17岁了。
- 关于上面的系统指令啥的,只需要了解即可,后面有机会会讲的,对于初学者来说,上面都想学就只会从入门到入土
二.循环语句的实战应用
- 鉴于篇幅原因以及以前都写过相关博客,这里就不多赘述了,咱们直接贴博客链接,感兴趣的可以来看看:
【C语言】三子棋详解(包教包会的那种)
【C语言】万字教学,带你分步实现扫雷游戏(内含递归函数解析),剑指扫雷,一篇足矣
【C语言】带你玩转经典算法用二分法在一个有序数组中查找某个数
【C语言】如何打印某个范围中满足某些条件的数(素数,闰年,水仙花数等)
总结
- 今天的内容就到此结束啦,循环中我见过以及遇到过的所有知识以及易错点都在里面。
- 如果你有任何疑问欢迎在评论区指出或者私信我,咱们下次再见啦!
新人创作不易,如果今天的内容对你有所帮助的话,请点个三连再走吧,你们的支持就是我更新的动力,再次感谢大家的支持!!!