循环结构(二)——while语句【互三互三】


文章目录

🍁引言

🍁一、语句格式

🍁二、语句执行过程

🍁三、格式举例

🍁四、例题

👉【例1】

💎【示例代码】

👉【例2】

🚀【方法1】:

💎【示例代码】

🚀【方法2】:

💎【示例代码】

👉【例3】

🚀【分析】

💎【示例代码】1

💎【示例代码】2

👉【例4】

💎【示例代码】

💎【优化示例代码】

👉【例5】

💎【示例代码】1

💎【示例代码】2

🍁总结 

🍁备注


🚀欢迎互三👉程序猿方梓燚 💎💎
🚀所属专栏:C++教程💎

🚀关注博主,后期持续更新系列文章

🚀如果有错误感谢请大家批评指出,及时修改

🚀感谢大家点赞👍收藏评论✍ 

🍁引言

于 C++编程之广袤天地间,while 之语乃循环架构之枢要,熠熠生辉。其依特定之条件以判是否行循环之体,此式灵动便捷、别具一格,能妥处循环之数未明之务。譬如欲求一至百之和,可设初值为零,变数自一始,以变数小于等于百为条件,于每次循环中累加变数,变数自增一,直至条件不满足而止。又若需持续读取用户输入直至特定字符,亦能以 while 达成。无论模拟实时之系统运转、处用户之持续输入,抑或操持动态数据之处理,while 之语皆显事半功倍、游刃有余之卓异。深悟而善用 while 之语,利于如虎添翼增编程之能,为构独具匠心、出类拔萃之 C++程式固其础石。值此之际,吾等携手共揭 while 之语之神秘纱幕,探其无穷无尽、广袤无垠之可能。

🍁一、语句格式

格式1

说明:语句1是while循环语句的循环体,它将在满足条件的情况下被重复执行。

格式2

说明:循环体部分由多个语句构成,应由一对花括号括起来,构成一个语句块的形式。 程序风格提示:写while循环语句时,循环体的语句相对于while缩进两格。

🍁二、语句执行过程

(1)计算作为循环控制条件表达式的值,得到逻辑真或假,假定用M表示。

(2)若M为真,则执行了一遍循环体,否则离开循环,结束整个while语句的执行。

(3)循环体的所有语句执行结束后,自动转向第(1)步执行。

🍁三、格式举例

(1)

#include<bits/stdc++.h>
using namespace std;
int main(){
    int i=0;
    while (i<10)
        ++i;
}

功能:当i的值小于10,重复执行++i语句

(2)

while(cin>>x,x<0)   
/*相当于
cin>>x;
while(x<0)
    cin>>x;
*/

功能:当输入的数据小于0时,重复读数据。

🍁四、例题

👉【例1】

求s=1 +2 +3……+n,当加到第几项时,s的值会超过1000?

💎【示例代码】
#include <iostream>
using namespace std;
int main () {
	int n = 0, s = 0;
	while (s <= 1000) {
		++n;
		s += n;
	}
	cout << n;
	return 0;
}
👉【例2】

求两个正整数m,n的最大公约数。

🚀【方法1】:

求任意两个自然数m和n的最大公约数,可以想到其最大的可能就是两个数中的较小者min,最小可能是1。所以,可以设最大公约数gcd从min开始进行判断,若gcd>1并且没有同时整除m和n,那么就gcd-1,重复判断是否整除。

💎【示例代码】
#include<iostream>
using namespace std;
int main() {
	int m, n, gcd;
	cin >> m >> n;
	gcd = m > n ? n : m;             //注意此处的特殊写法
	while (gcd > 1 && (m % gcd != 0 || n % gcd != 0))
		gcd--;                                 //每次减1寻找最大公约数
	cout << gcd << endl;           //输出最大公约数
	return 0;
}
🚀【方法2】:

求两个整数的最大公约数可以采用辗转相除法即欧几里德算法。对于任意两个自然数m和n,用m,n,r分别表示被除数、除数、余数,那么m和n的最大公约数等于n和r的最大公约数。以下是辗转相除法的算法:    

1)求m除以n的余数r;    

2)当r!=0,执行第3)步;若r==0,则n为最大公约数,算法结束。    

3)将n的值赋给m,将r的值赋给n;再求m除以n的余数r。    

4)转到第2)步

💎【示例代码】
#include<iostream>
using namespace std;
int main() {
	int m, n;
	cin >> m >> n;
	int r = m % n;
	while (r != 0) {    //也可以使用 while (r),c++中 非0即真
		m = n;
		n = r;
		r = m % n;
	}
	cout << n;
	return 0;
}
👉【例3】

编一程序求满足不等式1+ 1/2 + 1/3 …+1/n >=5的最小n值。

🚀【分析】

此题不等式的左边是一个求和的算式,该和式中的数据项个数是未知的,也正是要求出的。对于和式中的每个数据项,对应的通式为1/i,i=1,2,…n。 所以可采用循环累加的方法来计算出它的值。设循环变量为i,它应从1开始取值,每次增加1,直到和式的值不小于5为止,此时的i值就是所求的n。设累加变量为s,在循环体内把1/i的值累加到s上。

根据以上分

析,采用while循环编写出程序如下:

💎【示例代码】1
#include <iostream>
using namespace std;
int main () {
	int i = 0;
	float s = 0;
	while (s < 5) { //当s的值还未超过5时
		++i;
		s += 1.0 / i;
	}
	cout << i;
	return 0;
}

若采用for循环来写,则如下所示:

💎【示例代码】2
#include <iostream>
using namespace std;
int main () {
	int i;
	float s = 0;
	for (i = 1; s < 5; ++i)
		s += 1.0 / i;
	cout << i - 1;
	return 0;
}
👉【例4】

输入一些整数,求出它们的最小值、最大值和平均值(保留3位小数)。输入保证这些数都是不超过1000的整数。

样例输入:2 8 3 5 1 7 3 6

样例输出:1 8 4.375

💎【示例代码】
#include<cstdio>
int main() {
	int x, n = 0, min, max, s = 0;
	while (scanf("%d", &x) == 1) {
		s += x;
		if (x < min) min = x;
		if (x > max) max = x;
		++n;
	}
	printf("%d %d %.3lf\n", min, max, (double)s / n);
	return 0;
}
💎【优化示例代码】
#include<cstdio>
#define INF 100000000
int main() {
	int x, n = 0, min = INF, max = -INF, s = 0;
	while (scanf("%d", &x) == 1)
		//scanf("%d",&x)!=EOF,如果没数据可读,scanf返回EOF
	{
		s += x;
		if (x < min) min = x;
		if (x > max) max = x;
		++n;
	}
	printf("%d %d %.3lf\n", min, max, (double)s / n);
	return 0;
}
👉【例5】

输入若干对整数,输出每对之和。假设每个整数不超过10^9,一共不超过10^6个数对。

💎【示例代码】1
#include<cstdio>
int main() {
	int a, b;
	while (scanf("%d%d", &a, &b) == 2)
		printf("%d\n", a + b);
	return 0;
}
💎【示例代码】2
#include<iostream>
using namespace std;
int main() {
	int a, b;
	while (cin >> a >> b )
		cout << a + b << endl;
	return 0;
}

🍁总结 

有不懂的地方可以si我,和我一起学习C++吧。

🍁备注

还没有下载DEV-C++的小伙伴们可以私我拿到免费安装包

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 23:56:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 23:56:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 23:56:03       58 阅读
  4. Python语言-面向对象

    2024-07-14 23:56:03       69 阅读

热门阅读

  1. 分析 Android 应用中的日志信息应遵循的原则

    2024-07-14 23:56:03       20 阅读
  2. 牛客周赛51 F(静态区间最大连续子段和)

    2024-07-14 23:56:03       21 阅读
  3. 解锁Postman的API参数化:动态请求的秘诀

    2024-07-14 23:56:03       20 阅读
  4. 如何理解electron 的预加载脚本

    2024-07-14 23:56:03       19 阅读
  5. 力扣题解(回文子串)

    2024-07-14 23:56:03       21 阅读
  6. 题解:P9999 [Ynoi2000] tmostnrq

    2024-07-14 23:56:03       20 阅读
  7. Vue项目中禁用ESLint的几种常见方法

    2024-07-14 23:56:03       17 阅读