文章目录
🍁引言
🍁一、语句格式
🍁二、语句执行过程
🍁三、格式举例
🍁四、例题
👉【例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++的小伙伴们可以私我拿到免费安装包