什么是循环结构?

机器比人类最擅长的就是重复,人类持续做一件没有创造性的工作就会感到疲惫,所以要不断追求创新。

现代的智能工厂里面有各种各样的机器,会按照预先设置好的操作指令,昼夜不停的完成生产加工任务,这个过程就是循环结构

while 循环

while(条件表达式)
{
    循环体语句;
    ...
}

题目:输入数字n,输出n个*。

int main()
{
    int n, i;
    cin >> n;
    i = 0;
    while (i < n)
    {
        cout << '*';
        i++;
    }
    return 0;
}

i:循环控制变量

i = 0:设i的初始值

i < n:循环进行的条件

i++:每次循环后i的变化

while语句执行过程

控制台等待输入,假定输入值为 3,赋给 n。

i = 0,小于 3,准备进入 while 循环。

输出一个 '*'。

变量 i 自增。

i = 1,小于 3,进入下一轮循环。

do ... while 循环

do 
{
    循环体语句;
    ...
}while(条件表达式);

for 循环

for 和 while 循环控制边量对比

for(控制变量初始化; 循环条件表达式; 增量表达式)
{
    循环体语句;
    ...
}

for 语句执行过程

首先,控制台输入 3,赋值给 n。

循环控制变量 i 初始化为 0。

循环条件,0 < n 成立。

执行循环体,输出一个 '*'。

然后执行增量表达式,i 自增,变为 1。

进入下一轮循环,判断 1 < n。

for 循环常见写法

循环n次,i从0到n-1:for(int i = 0; i < n; i++)

循环n次,i从1到n:for(int i = 1; i <= n; i++)

循环n次,i从n到1:for(int i = n; i >= 1; i``--)

i从a到b: for(int i = a; i <= b; i++)

i每次变化2: for(int i = 1; i <= n; i += 2)

循环基本问题

计数问题

统计满足某种条件的情况的数量问题。

设计数变量:cnt = 0

满足计数条件时 cnt 增加 1:cnt++

最后输出计数数量 cnt

例题:统计 1~n 中 3 的倍数的个数。

int main()
{
    int n, cnt = 0;
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        if(i % 3 == 0)
            cnt++;
    }
    cout << cnt;
    return 0;
}

累加问题

统计满足某种条件的多个数字累加问题。

设累加器变量:s = 0

当数字x满足条件时,s 增加 x: s += x

最后输出累加器 s

例题:

输入 n,输入 n 个数,求这 n 个数的和。

int main()
{
    int n, x, s = 0;
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        cin >> x;
        s += x;
    }
    cout << s;      
    return 0;
}

累乘问题

统计满足某种条件的多个数字相乘的问题。

设表示累乘器的变量:r = 1

当数字x满足条件时,r 乘上 a: r *= x

最后输出累乘器 r

例题:输入 n,输入 n 个数,求这 n 个数的积。

int main()
{
    int n, x, r = 1;
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> x;
        r *= x;
    }
    cout << r;      
    return 0;
}

利息与利率

小明爸爸将赚的钱存入银行,年利率 5%。每存满一年,他会将本息和作为本金再存一年。请问 n 年后,小明爸爸账户中有多少钱?

利息 = 本金 * 利率 本息和=本金+利息

最值问题

求 n 个数中的最大值。

设变量 maxv 保存当前已知的最大值,maxv 的初值为给定数字范围的下限(即小于等于所有可能出现的值)

每次循环输入数字 x

如果 x > maxv,那么 maxv = x

例题:输入 n,输入 n 个自然数,求这 n 个数中的最大值。

int main()
{
    int n, x, maxv = 0;
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> x;
        if(x > maxv)
            maxv = x;
    }
    cout << maxv;      
    return 0;
}

求 n 个数中的最小值。

设变量 minv 保存当前已知的最小值,minv 的初值为给定数字范围的上限(即大于等于所有可能出现的值)

每次循环输入数字 x

如果 x < minv,那么 minv = x

例题:输入 n,输入 n 个 1000 以内的自然数,求这 n 个数中的最小值。

int main()
{
    int n, x, minv = 1000;
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> x;
        // minv = min(minv, x);
        if(x < minv)
            minv = x;
    }
    cout << minv;      
    return 0;
}

循环嵌套

请输出 n 行 m 列的 * 组成的长方形。

注意:内层、外层循环控制变量必须不同!

for(int i = 1; i <= n; i++)//外层循环,遍历行
{
    for(int j = 1; j <= m; j++)//内层循环,遍历列
    {
        cout << '*'  << ' ';
    }
    cout << endl;
}

循环跳出

continue 重新开始循环

break语句直接跳出当前循环

break语句在循环嵌套中只能跳出1层循环。

image-20240208082841928

return 语句

标志位

标志位为一个布尔型变量,用来表示当前是否处于某一状态。

通常命名为isXXX,意为“是否如何”。

例题:

输入n,输出1~n,逗号分隔。比如,输入4,输出:1,2,3,4

int main()
{
    int n;
    cin >> n;
    bool isFirst = true;
    for(int i = 1; i <= n; i++)
    {
        if(isFirst)
            isFirst = false;
        else
            cout << ',';
        cout << i;
    }
    return 0;
}

while 读入不确定数量的元素

while(cin >> a)
{
    //...
}

调试时,如果想结束输入,按 Ctrl+Z,屏幕中出现 ^Z 后,按回车,即可结束输入,查看输出。

如果使用在线 IDE,正常填写输入数据就可以,不需要人为终止。

第8次作业

results matching ""

    No results matching ""