C++ while循环

while循环

只要给定的条件为真,while 循环语句会重复执行一个目标语句。

语法

cpp

while(condition)
{
    statement(s);
}

while循环的每个部分:第一行,有时称为循环头,由关键字while组成,后跟待测试的条件,括在括号中。条件由任何可被判断为 true 或 false的表达式表示。接下来是循环体,它包含一个或多个 C++ 语句。

循环的工作原理是,首先判断条件表达式的值,如果它是真的,则循环体中的每个语句都被执行;然后,再次测试条件,如果条件表达式仍然为 true,则循环体中的每个语句将再次被执行。如此循环往复,直到条件表达式被判断为 false。

与 if 语句一样,在有条件执行的主体中的每个语句都以分号结尾,但在括号中的条件表达式后面没有分号,这是因为 while 循环不完整,后面没有跟随的语句。而且,与 if 语句一样,当循环体包含两个或多个语句时,这些语句必须用大括号括起来。当循环的主体只包含一个语句时,可以省略括号。

基本上,while 循环就像是一个可以执行一遍又一遍的if语句。只要括号中的表达式为true,则有条件执行的语句将不断重复。

流程

while循环
while循环的关键点是循环可能一次都不会执行。当条件被测试且结果为假时,会跳过循环主体,直接执行紧接着while循环的下一条语句。

实例

cpp

#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

题解

cpp

#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

题解

cpp

#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

题解

cpp

#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

题解

cpp

#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

题解

cpp

#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;
}
那年 • 今日
小王发布于2022-01-16 18:05
没有伞的孩子,必须学会努力奔跑。

赞助 点赞 0

阿锋, Mr.Chou等人对本文发表了2条热情洋溢的评论。
  • 阿锋说道: LV.0
    判断循环,只能看懂一点点了
  • Mr.Chou说道: LV.4
    好吧,表示看不懂.. 其实我是来灌水滴。
  • 发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注