感觉这个循环也会讲很久
目录
循环:编程中的高效重复机制
概念
此前我们接触的if else
语句,在处理特定条件分支时发挥了重要作用,但对于某些需要反复执行相同或相似操作的场景,它就显得力不从心了。为了更高效地解决这类问题,循环结构应运而生。
循环,作为一种强大的控制结构,允许我们重复执行一段代码,直至满足特定条件。其核心价值在于减少代码的重复编写,显著提升代码的效率与可维护性。
- 循环是一种控制结构,它允许我们重复执行一段代码,直到满足特定的条件为止
在 C 语言的体系中,常见的循环类型包括while
循环、do-while
循环以及for
循环,接下来我们将深入学习它们。
while循环
基本语法
每次循环启动前,程序都会对该表达式求值。若表达式的值为真(在 C 语言中,非零值代表真),则执行循环体中的代码;若为假(零值),则直接跳过循环体,终止循环。其语法形式如下
while (表达式) {
// 循环体,包含需要重复执行的语句
}
流程图
为了更直观地理解while
循环的执行流程,我用流程图来表示⬇️
从图中可以清晰地看到,循环从条件判断开始,依据条件结果决定是进入循环体执行代码,还是直接结束循环。
下面我们用情景题来解决一些实际问题。
突破筑基
Q7:之前当打杂的你看到其他人御剑飞行的样子不禁心里暗自羡慕。正巧你现在已经练气后期了,你准备突破练气期到筑基期,好早日可以御剑飞行,逍遥人间。
前文在秘境修炼的你知道,在修仙界的灵气浓度有45%。宗门内含有聚灵阵,所以宗门内的浓度是50%,在凡间2%浓度的的灵气苦修一天的时候,你能增长15点灵气。
现在练气后期的你有3800点灵气,要想突破到筑基期,灵气要达到5000点以上,你要在宗门苦修几天才能突破到筑基呢?
分析
我们的目标是求解从练气后期突破到筑基期所需的在宗门内的苦修天数。
已知条件如下:
- 2%灵气浓度苦修一天增长15点灵气
- 宗门的灵气浓度为50%
- 当前灵气有3800点,突破到筑基需要5000点以上
联系或关系:
通过分析,我们可以得出在宗门内苦修一天增长的灵气值计算方式为:15/0.02*0.5。接下来,我们需要计算出灵气值达到 5000 点以上所需的天数。
设计
变量设计
- 用
sprit
表示在宗门内一天增长的灵气值 days
用于记录需要苦修的天数,初始值设为 0current_spirit
代表当前的灵气值
编码
#include <stdio.h>
int main() {
int days = 0;
double current_spirit = 3800;
double sprit = 15 / 0.02 * 0.5;
while (current_spirit < 5000) {
current_spirit += sprit;
days++;
}
printf("需要在宗门苦修 %d 天\n", days);
return 0;
}
测试运行
经过编译和运行程序,最终输出的结果清晰地展示了所需的苦修天数:
需要在宗门苦修 4 天
do while 循环:先行动,后判断的循环模式
基本语法
do - while
循环与while
循环有着显著区别,它属于后测试循环结构。在这种循环中,程序会先执行一次循环体,之后才检查循环条件是否成立。若条件为真(非零),则持续执行循环体;若为假(零),则终止循环。其语法结构如下:
do {
// 循环体,包含需要重复执行的语句
} while (表达式);
流程图
从流程图中能直观地看出,do - while
循环先执行循环体的特性。
正数问题
我们以让用户输入一个正数为例,使用 do-while
循环来实现。程序会先提示用户输入一个数,然后检查这个数是否为正数。如果不是正数,就会再次提示用户输入,直到用户输入一个正数为止。
编码实现
#include <stdio.h>
int main() {
int number;
do {
// 提示用户输入一个正数
printf("请输入一个正数: ");
// 读取用户输入的整数
scanf("%d", &number);
if (number <= 0) {
// 如果输入的不是正数,给出提示
printf("输入的数不是正数,请重新输入。\n");
}
} while (number <= 0);
// 当输入的是正数时,输出提示信息
printf("你输入的 %d 是一个正数,输入正确。\n", number);
return 0;
}
解决上述筑基问题
同样是突破筑基期的问题,我们也可以运用do - while
循环来解决。代码⬇️
#include <stdio.h>
int main() {
int days = 0;
double current_spirit = 3800;
double sprit = 15 / 0.02 * 0.5;
do {
current_spirit += sprit;
days++;
} while (current_spirit < 5000);
printf("需要在宗门苦修 %d 天\n", days);
return 0;
}
与while
循环相比,do - while
循环先执行一次循环体操作,然后再判断条件是否满足继续循环的要求
小结
恭喜道友突破到筑基期啊,考完飞行执照就能御剑飞行了👏