while循环
只要给定的条件为真,while 循环语句会重复执行一个目标语句。
语法
while(condition)
{
statement(s);
}
while循环的每个部分:第一行,有时称为循环头,由关键字while组成,后跟待测试的条件,括在括号中。条件由任何可被判断为 true 或 false的表达式表示。接下来是循环体,它包含一个或多个 C++ 语句。
循环的工作原理是,首先判断条件表达式的值,如果它是真的,则循环体中的每个语句都被执行;然后,再次测试条件,如果条件表达式仍然为 true,则循环体中的每个语句将再次被执行。如此循环往复,直到条件表达式被判断为 false。
与 if 语句一样,在有条件执行的主体中的每个语句都以分号结尾,但在括号中的条件表达式后面没有分号,这是因为 while 循环不完整,后面没有跟随的语句。而且,与 if 语句一样,当循环体包含两个或多个语句时,这些语句必须用大括号括起来。当循环的主体只包含一个语句时,可以省略括号。
基本上,while 循环就像是一个可以执行一遍又一遍的if语句。只要括号中的表达式为true,则有条件执行的语句将不断重复。
流程
while循环的关键点是循环可能一次都不会执行。当条件被测试且结果为假时,会跳过循环主体,直接执行紧接着while循环的下一条语句。
实例
#include <iostream>
using namespace std;
int main()
{
// 声明局部变量
int n = 1;
// 判断是否满足条件
while(n <= 10)
{
// 满足则执行该语句
cout << "n 值为 " << n << endl;
n++;
}
return 0;
}
以上代码执行后结果为
n 值为 1
n 值为 2
n 值为 3
n 值为 4
n 值为 5
n 值为 6
n 值为 7
n 值为 8
n 值为 9
n 值为 10
练习
数据统计
问题描述
输入N个整数,求出它们的最小值、最大值和平均值(保留3位小数)。输入保证这些数都是不超过1000的整数。(1<=N<=1000)
样例输入
8
2 8 3 5 1 7 3 6
样例输出
1 8 4.375
题解
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double n = 0,maxn = 0,minn = 0,a = 0,p = 0,s = 0,m = 0;
cin >> n;
m = n;
while (n--)
{
cin >> a;
s += a;
if(a > maxn)
maxn = a;
if(a < minn)
minn = a;
}
p = s / m;
printf("%.0lf %.0lf %.3lf",minn,maxn,p);
return 0;
}
级数求和
问题描述
已知:Sn=1+1/2+1/3+…+1/n。显然对于任意一个整数k,当n足够大的时候,Sn大于k。现给出一个整数k(1<=k<=15),要求计算出一个最小的n,使得Sn>k。
输入格式:一个整数k(1<=k<=15)。
输出格式:一个整数n。
样例输入
1
样例输出
2
题解
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double sn = 0,k = 0,n = 0;
cin >> k;
while (true)
{
n++;
sn = sn + 1 / n;
if (sn > k)
break;
}
cout << n;
return 0;
}
小玉游泳
问题描述
小玉开心地在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。
输入格式:输入一个数字(不一定是整数,小于100m),表示要游的目标距离。
输出格式:输出一个整数,表示小玉一共需要游多少步。
样例输入
4.3
样例输出
3
题解
#include <iostream>
using namespace std;
int main()
{
int n = 0;
double a = 2 / 0.98,l = 0,s = 0;
cin>>s;
while(l < s)
{
n++;
l += a * 0.98;
}
cout<<n;
return 0;
}
球弹跳高度的计算
问题描述
一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第10次落地时,共经过多少米? 第10次反弹多高?
输入:输入一个整数h,表示球的初始高度。
输出:输出包含两行:
第1行:到球第10次落地时,一共经过的米数。
第2行:第10次弹跳的高度。
注意:结果可能是实数,结果用double类型保存。(保留四位小数)
样例输入
20
样例输出
59.9219
0.0195312
题解
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double a = 0,b = 0;
int c = 1;
cin >> a;
while (c <= 19)
{
if (c % 2 == 0)
a /= 2;
b += a;
c++;
}
a /= 2;
printf("%.4lf",b);
cout<<endl;
printf("%.7lf",a);
return 0;
}
小童收玉米
问题描述
到了玉米丰收的季节。小童回老家收玉米,已知小童每次能拿5个玉米,但是由于小童年龄太小,为了照顾小童,每逢次数为3的倍数时就只拿3个玉米,我们来用程序计算小童要多少次才能拿够100个玉米。
输出:1个整数表示小童拿的次数。
样例输出
23
题解
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a = 0,b = 0;
while (a <= 100)
{
b++;
if (b % 3 == 0)
a+=3;
else
a+=5;
}
cout<<b;
return 0;
}