算法的基本控制结构之循环结构

while语句

使用的语法形式是:

while(表达式)   语句

它的执行顺序是,先计算while括号里表达式的值是true还是false,如果是true则执行循环体也就是后面的语句,如果是false则跳出while循环,继续执行while循环下面的程序。

while后面的语句可以是多条语句,是多条语句的话要用大括号括起来。大家注意,循环体里应该有可以改变表达式值的语句,以便让它能循环到一定程度时跳出循环,不然可就死循环了。这里给大家一个while循环的例子:

#include<iostream>
using namespace std;
int main()
{
    int  i=1, sum=0;
    while(i<=10)
    {
        sum+=i;  //相当于sum=sum+i;
        i++;
    }
    cout<<"sum="<<sum<<endl;
    return 0;
}

在这里插入图片描述

do-while语句

使用的语法形式如下:

do   语句
while(表达式)

它的执行顺序是:先执行循环体语句,就是do后面的语句,再判断循环条件表达式的值也就是while括号里表达式的值,如果为true则继续执行循环体,如果为false则结束循环,继续执行do-while循环后面的语句。

这里还要强调下,跟while循环一样,循环体中一定要由改变循环条件表达式的语句,不然也会死循环。do后面的语句也可以是多条语句,是多条语句的话也要用大括号括起来。再给大家看看do-while的例子:

#include<iostream>
using namespace std;
int main()
{
    int  i=1, sum=0;
    do{
        sum+=i;
        i++;
    }while(i<=10);
    cout<<"sum="<<sum<<endl;
    return 0;
}

在这里插入图片描述
while语句是先判断循环条件表达式的值再执行循环体,do-while是先执行循环体再判断循环条件表达式的值。

如果上面这两个例子当中的i我们都定义成int i(11)或者int i=11,就是i的初始值是11,那结果怎么样呢?

上面那段while语句的代码会判断11是不是<=10,当然是false了,循环体不会执行while循环就退出了,所以sum的值还是初始值,输出sum=0。

但是下面的do-while语句会先执行一下do后面大括号里的语句,sum+=i将sum的值变成了11,然后执行i++之后就判断while里i<=10的值了,当然也是false,不会继续执行do里的语句了,最后输出sum=11。

如果一开始循环条件就为false的话,两种语句的执行结果是不一样的,其他情况下一样。

for语句

for语句是最灵活的循环语句,可用于循环次数已知的情况也可用于循环次数未知的情况。for语句的语法形式如下:

for(表达式1;表达式2;表达式3)
     语句

它的执行顺序是,先计算表达式1的值,再计算表达式2的值,根据表达式2的值决定是否执行循环体,若是true则执行一次循环体,若为false则退出循环。每执行一次循环体后都计算表达式3的值,然后再计算表达式2的值根据其值判断是否执行循环体,就这样循环了。表达式1的值只在刚进入for语句的时候执行一次,做一些初始化,后面就不执行了。

#include <iostream>
using namespace std;
int main()
{
    int n, k;
    
    cout << "Enter a positive integer: ";
    cin >> n;
    cout << "Number  " << n << "   Factors  ";
    
    for (k=1; k <= n; k++)
        if (n % k == 0)
            cout << k << "  ";
    cout << endl;
    return 0;
}

在这里插入图片描述
for语句要跟大家说几个注意的地方:
1.表达式1、2、3都可以省略,分号不能省略,都省略后成为for(;😉 语句,相当于while(true),成死循环;

2.表达式2是循环控制条件,只要是省略掉它,就会成为死循环;

3.表达式1一般是给循环控制条件赋初值,比如上面的k=1,也可以是跟循环变量无关的表达式,如果是表达式1省略或是跟循环条件无关的表达式,就应该在进入for语句前给循环条件赋初值;

4.表达式3为改变循环控制条件的值,如果它被省略掉或者是跟循环条件无关的表达式,就应该在循环体里另有语句来改变循环条件,保证不死循环。

比如,for(i=1;i<=10;) { sum+=i; i++; },这里因为for后面括号里没有表达式3,则它的循环体里就要加类似i++这样的语句来改变循环条件i。

5.如果省略掉表达式1和表达式3只剩下表达式2则for语句完全等同于while语句。比如for(;i<=10;) { i++; } 相当于 while(i<=10) { i++; }

循环结构的嵌套

一个循环体里边可以包含另一个循环结构。while、do-while和for三种循环语句可以相互嵌套。给大家一个例子:

#include <iostream>
using namespace std;
int main()
{
    int  i=1, a=0;
    for(; i<=5; i++)
    {
        do{
            i++;
            a++;
        }while(i<3);
        i++;
    }
    cout << a << "," << i <<endl;
    return 0;
}

在这里插入图片描述
上面程序里的int i=1, a=0;最好写成两个语句:int i=1; int a=0;一个是比较清晰,不容易犯错,也不容易让人误解,比如int i, a=0;这样的语句其实只对a赋了个初值0,并没有给 i 赋初值,但有可能会给别人造成误解,或者别人那一会有点晕,以为也给i赋了个初值。

循环结构也可以和选择结构嵌套

#include<iostream>
using namespace std;
int main()
{  
    int n;
    for(n=100; n<=200; n++)
    {   
        if (n%3!=0)
            cout<<n<<" ";
    }
    return 0;
}

在这里插入图片描述
经常用来控制循环结构的语句还有几个:
1.break语句。break出现在switch语句或者循环体中时,程序直接从switch语句中或者循环体中跳出,继续执行下面的程序。

2.continue语句。continue语句用在循环体中时,用来结束本次循环,接着判断决定是否执行下一次循环,它跟break的区别是,比如,for(int i=0; i<5; i++) { if(i==1) break; sum+=i; }这里如果循环到i等于1的时候for循环就会直接退出,而for(int i=0; i<5; i++) { if(i==1) continue; sum+=i; }的情况是如果循环执行到i等于1的时候则sum+=i这个语句不执行了直接执行for后面括号里表达式3-i++,也就是进入i等于2的循环。

3.goto语句。语法形式是,goto 语句标号;。其中语句标号是用来表示语句的标识符,放在语句的最前面,并用冒号跟语句分开,它的作用是让程序执行时直接跳到语句标号指定的语句,这个语句有些危险,尽量少用或不用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光开朗男孩

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值