目录
在c语言中,循环共有三种,while循环,for循环,do while循环。在之前我们粗略的了解了while循环,现在我们来详细了解这三种循环。
我们在上一篇文章中已经了解了if语句的使用,我们这里复习一个简单的if语句。
- #define _CRT_SECURE_NO_WARNINGS 1
- #include<stdio.h>
- int main()
- {
- int num = 0;
- if (num == 0)
- printf("hehe");
- return 0;
- }
这段代码的意思很简单,只要if里面条件成立,则打印hehe。其实while循环和if语句是非常相似的。我们这里在上面的代码稍作修改,将if改为while会发生什么呢?
- #include
- int main()
- {
- int num = 0;
- while (num == 0)
- printf("hehe");
- return 0;
- }
输出结果为一个无限打印hehe。对于while语句
一般是这样的形式
while(判断语句)
循环体;
只有当判断语句为真的时候,可以执行下面的语句。执行完以后重新判断,如果仍为真,继续判断,直到为假才能跳出循环。当然上面这种情况下,循环体只能是一条语句,如果想要是多条语句则需要加上大括号
while(判断语句)
{
循环体;
}
这样的话就是多条语句的循环,不难看出,和if语句是很相似的。
我们来实现一个简单的题目,打印出1---10的数字
- #include<stdio.h>
- int main()
- {
- int i = 1;
- while (i <= 10)
- {
- printf("%d ",i);
- i++;
- }
- return 0;
- }
我们看这样一段代码
- #include<stdio.h>
- int main()
- {
- int i = 1;
- while (i <= 10)
- {
- if (5 == i)
- {
- break;
- }
- printf("%d ", i);
- i++;
- }
- return 0;
- }
这段代码的运行结果是1 2 3 4
也就是说,我们可以调试一下分析该代码,我们会发现当i等于5时,满足if的条件,执行了break,然后下一步我们的代码就跳出了while循环。程序就结束了。
也就是说break的作用是打破循环
结论:break在while循环中的作用:
在while循环中遇到break,就会停止后期所有的循环,直接终止循环
所以,while中的break是用于永久终止循环的
我们先看一段代码,并思考一下运行结果是什么
- #include<stdio.h>
- int main()
- {
- int i = 1;
- while (i <= 10)
- {
- if (5 == i)
- {
- continue;
- }
- printf("%d ", i);
- i++;
- }
- return 0;
- }
运行结果为,1234然后死循环但是不打印任何东西。
我们在给出一段代码。看看这个运行结果是什么
- #include<stdio.h>
- int main()
- {
- int i = 1;
- while (i <= 10)
- {
- i++;
- if (5 == i)
- {
- continue;
- }
- printf("%d ", i);
- }
- return 0;
- }
运行结果为
现在已经不是死循环了,可以打印出来值,并且使得循环结束。
那么continue的作用到底是什么呢?我们给出结论
continue在while循环中的作用:
continue是用于终止本次循环的,也就是本次循环中continue后面的代码都不会被再次执行
而是直接跳转到while语句的判断部分,进行下一次的循环入口判断。
- #include<stdio.h>
- int main()
- {
- for (表达式1; 表达式2; 表达式3)
- {
- 表达式4;
- }
- return 0;
- }
如图所示,for循环先执行表达式1,然后表达式2为判断,如果成立,则执行表达式4,然后执行表达式3,在进行表达式2判断,如此循环下去。
其中
表达式 1表达式 1 为 初始化部分 ,用于初始化循环变量的。表达式 2表达式 2 为 条件判断部分 ,用于判断循环时候终止。表达式 3表达式 3 为 调整部分 ,用于循环条件的调整。
我们举一个简单的例子,打印1--10之间的数字
- #include<stdio.h>
- int main()
- {
- int i = 0;
- for (i = 0; i <= 10; i++)
- {
- printf("%d ", i);
- }
- return 0;
-
- }
我们来看这样一段代码
- #include<stdio.h>
- int main()
- {
- int i = 0;
- for (i = 1; i <= 10; i++)
- {
- if (i == 5)
- {
- break;
- }
- printf("%d ", i);
- }
- return 0;
-
- }
运行结果为1 2 3 4
可见,break在for循环中的作用与while循环一样
- #include<stdio.h>
- int main()
- {
- int i = 0;
- for (i = 1; i <= 10; i++)
- {
- if (i == 5)
- {
- continue;
- }
- printf("%d ", i);
- }
- return 0;
-
- }
运行结果为
我们发现于while循环中有一定差异,因为while循环中不执行调整语句,而for循环执行调整语句,可见存在稍微的差异,导致结果不同,但是其实仍然具有一定的统一性,因为都是只跳过了本次循环的大括号里面的语句,while循环中,调整语句就在大括号里面,所以跳过,而for循环调整语句不在大括号里面,所以不跳过调整语句。
①不可在for循环体内修改循环变量,防止for循环失去控制。
②建议for语句的循环控制变量的取值采用“前闭后开区间”写法
①下面代码中,for循环可以省略初始化部分,判断部分,调整部分,如果省略了判断部分,则判断恒为真。为死循环。
- #include
- int main()
- {
- for (;;)
- {
- printf("hehe\n");
- }
- return 0;
- }
②这条语句总共打印9个hehe,因为是两个for循环的嵌套使用
- #include<stdio.h>
- int main()
- {
- int i = 0;
- int j = 0;
- //这里打印多少个hehe?
- for (i = 0; i < 3; i++)
- {
- for (j = 0; j < 3; j++)
- {
- printf("hehe\n");
- }
- }
- }
③这段代码省略了初始化部分,只打印3个hehe,因为j不会被再次初始化
- #include<stdio.h>
- int main()
- {
- int i = 0;
- int j = 0;
- //如果省略掉初始化部分,这里打印多少个hehe?
- for (; i < 3; i++)
- {
- for (; j < 3; j++)
- {
- printf("hehe\n");
- }
- }
- }
④使用了多余一个变量来控制循环,如下所示,结果为两个hehe
- #include<stdio.h>
- int main()
- {
- //使用多余一个变量控制循环
- int x, y;
- for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
- {
- printf("hehe\n");
- }
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int i = 0;
- int k = 0;
- for (i = 0, k = 0; k = 0; i++, k++)
- k++;
- return 0;
- }
这段代码中,判断语句是赋值的,k赋值后是0,为假,因为只有0为假,非零都为真。所以,这道题什么都不打印。
#include
int main()
{
do
{
//代码块
} while();
return 0;
}
在do while语句中,无论条件是否成立,代码是先执行一次,然后在进行判断的,如果为真,则进入循环。值得注意的是,do while的判断语句后面有一个分号,这点于while和for循环不太一样。
我们仍然举一个简单的例子,打印1---10
- #include
- int main()
- {
- int i = 1;
- do
- {
- printf("%d ", i);
- i++;
- } while (i <= 10);
- return 0;
- }
我们看这样一段代码
- #include<stdio.h>
- int main()
- {
- int i = 1;
- do
- {
- printf("%d ", i);
- if (i == 5)
- {
- break;
- }
- i++;
- } while (i <= 10);
- return 0;
- }
输出结果为
可见,break的作用为打破循环。与在while和for循环中的作用一样
我们看这样一段代码
- #include<stdio.h>
- int main()
- {
- int i = 1;
- do
- {
- printf("%d ", i);
- if (i == 5)
- {
- continue;
- }
- i++;
- } while (i <= 10);
- return 0;
- }
输出结果为12345555555555555
可见continue的作用仍为,结束本轮循环,也就是跳过本次循环的大括号内剩余的内容。重新进入判断。
为了使文章条理更加清晰一些,我们将这一部分放在了另外一篇博客中,读者可以通过该链接进行跳转经典题目详解
为了使得文章条理清晰,我们将该部分放在了另外一篇博客中,这是链接 猜数字游戏
C 语言中提供了可以随意滥用的 goto 语句和标记跳转的标号。从理论上 goto 语句是没有必要的,实践中没有 goto 语句也可以很容易的写出代码。但是某些场合下 goto 语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。例如:一次跳出两层或多层循环。多层循环这种情况使用 break 是达不到目的。它只能从最内层循环退出到上一层的循环。
- #include
- int main()
- {
- flag:
- printf("haha");
- goto flag;
- return;
- }
我们在举一个例子,是goto语句在关机程序中的使用
一个关机程序
程序执行起来就倒计时关机,60秒后关机
如果输入:我是猪,就取消关机
- #include
- #include
- int main()
- {
- char input[20] = { 0 };
- system("shutdown -s -t 60");
- again:
- printf("你的电脑将在60s后关机,如果输入我是猪,就取消关机");
- scanf("%s", input);
- if (0 == strcmp(input, "我是猪"))
- {
- system("shutdown -a");
- }
- else
- {
- goto again;
- }
- }
这就是我们的代码,当我们输入我是猪时候,就会停止关机
其中有几个库函数和命令需要大家了解一下
showdown -s -t 60的意思是60秒后关机
showdown -a的意思是取消关机
当然还有很多命令我们这里附上一个链接,希望大家可以去这里面都自己学习一下这个命令。
本节主要讲述了,三大循环,以及goto循环的一些应用。如果对你有帮助的话,不要忘记点赞加关注哦。