while循环初级运用——利用while循环解决寓言故事

关于小青蛙爬井的故事,你应该早就听过了:井深10尺,小青蛙从井底向上爬,每个白天向上爬3尺,每个晚上又滑下来2尺,然后问你第几天它能爬上来。答案是第8天。
现在,那只著名的小青蛙又回来了,它现在每个白天已经可以向上爬 a尺了,当然,晚上还是要下滑b尺的。如果告诉你井深h尺,请计算一下,现在,它第几天可以爬上来?
原题图

这是一道很典型的while循环题目。什么是while循环呢?今天我们就来认识一下

while循环

while循环的构成

C++中,while循环是一种基本的控制流结构,它允许程序在满足特定条件时重复执行一段代码。while循环的构成相对简单,主要包括循环条件和循环体:

while(条件判断){
	// 循环体
	// 这里放置要重复执行的代码
}

while循环的特性

while 循环是编程中常用的控制流语句之一,用于在满足特定条件时重复执行一段代码。以下是 while 循环的一些主要特性:

条件判断

  • while循环在每次迭代开始时都会检查一个条件表达式
  • 如果条件表达式为真(即非零或非空值),则执行循环体内的代码块
  • 如果条件表达式为假(即零或空值),则退出循环

重复执行

  • 只要条件为真,循环体内的代码块就会不断重复执行
  • 没有固定的迭代次数,循环次数完全取决于条件何时变为假

先检查条件

  • while循环属于前测试循环,意味着在每次迭代之前都会检查条件
  • 这与do-while循环不同,后者在每次迭代之后检查条件,因此至少会执行一次循环体

无限循环的风险

  • 如果条件表达式始终为真,while循环将无限执行下去,可能导致程序挂起或崩溃
  • 需要特别注意确保存在一个明确的退出条件,以避免无限循环

代码块

  • 循环体内的代码块可以包含任意数量的语句,甚至可以是嵌套循环
  • 代码块通常被大括号{ }包围,以明确循环的范围

更新循环变量

  • 在循环体内,通常会更新一个或多个循环变量,以便最终使条件表达式变为假,从而退出循环
  • 如果忘记更新循环变量,可能会导致无限循环(死循环)

灵活性

  • while循环非常灵活,可以用于各种情况,如用户输入、数据处理、文件读取等

关键点

  • 条件
    条件是一个bool表达式(即返回truefalse的表达式)。在每次循环迭代之前,都会评估这个条件。如果条件为真(true),则执行循环体中的代码。如果条件为假(false),则跳过循环体,继续执行while循环之后的代码
  • 循环体
    循环体是用大括号{ }括起来的代码块。只要条件为真,这段代码就会重复执行
  • 循环变量
    通常,while循环中会包含一个或多个循环变量,这些变量在循环体中发生变化,以影响循环条件的评估。这是确保循环最终能够终止的关键

示例

以下是一个简单的C++while循环示例,用于打印数字1到50:

#include<bits/stdc++.h>
#define int long long // 宏命令,可省略
using namespace std;

signed main(){ // 因为将int定义为“long long”,mian函数返回值类型要改变
	int n = 1;
	while(n <= 50){
		cout << n <<" ";
		n = n + 1;
	}
}

示例

在这个示例中,n是循环变量,它初始化为1while循环的条件是n <= 50。在每次循环迭代中,都会打印当前的n值,并将n增加1。当nt达到50时,条件变为假,循环终止

注意事项

  • 确保循环条件最终会变为假,以避免无限循环
  • 在循环体内适当地更新循环变量
  • 可以使用break语句来提前终止循环,或者使用continue语句来跳过当前循环迭代并继续下一次迭代

总之,while循环是一种强大的控制流语句,但使用时需要小心,确保循环能够正常终止,避免无限循环

解题与分析

分析题目

每个白天可以向上爬 a尺,晚上要下滑b尺。告诉你井深h尺,要用几天?
看完题,可以得出:
① 白天没爬出去,距离井口的距离只减少a - b
② 每个白天都相当于一天(当天爬出去了也算)
③ 不能用h / (a - b) + 1来做这题(不信自己算)

整理思路

根据分析,我们有两种解题方法:

  • 利用数学建模找出的公式直接解决,但难度太大,不确定因素太多,我并不推荐,感兴趣的朋友可以自己探索
  • 利用while循环一天一天的爬(正好学习while循环)

第一种难度太大,以我才一点点大的小小年龄还做不到,还是先带大家学习while循环吧

编程实现

首先,放上祖传编程头文件和main函数:

#include<bits/stdc++.h>
#define int long long // 宏命令,可省略
using namespace std;

signed main(){ // 因为将int定义为“long long”,mian函数返回值类型要改变

}

题目变量比较多,还是用题目中给出的名称。
接下来处理的是爬井过程和天数处理

int a, b, h, gao, tian = 0; // 定义变量
cin >> a >> b >> h; // 输入
gao = a; // 把第一个白天的高度算上去
while(gao < h){ // 没爬到井口就继续循环
	tian++; // 天数加一
	gao = gao + a - b; // 处理白天、晚上的高度(井的高度)
}

因为我们提前把高度增加了一天,但总天数有没有改变,所以输出的时候要再加上一天。

cout << tian + 1;

最后,放完整代码:

#include<bits/stdc++.h>
#define int long long // 宏命令,可省略
using namespace std;

signed main(){ // 因为将int定义为“long long”,mian函数返回值类型要改变
	int a, b, h, gao, tian = 0; // 定义变量
	cin >> a >> b >> h; // 输入
	gao = a; // 把第一个白天的高度算上去
	while(gao < h){ // 没爬到井口就继续循环
		tian++; // 天数加一
		gao = gao + a - b; // 处理白天、晚上的高度(井的高度)
	}
	cout << tian + 1;
}

验证时间!
现在整道题已经写完了,验证一下

输入:
3 2 10

输出:
8

测试

->题目来自网站<-

循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心-远-地-自-偏

天生我材必有用,千金散尽还复来

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值