i信息学奥赛

加入QQ群:1025629106,或关注微信公众号:i信息学奥赛,获取更多学习资源。

导航

do-while语句

Posted on 2016-12-10 11:15  shnoip  阅读(1293)  评论(0编辑  收藏  举报

一、语句格式
格式1:
do
  语句1;
while (条件表达式);

格式2:
do {
  语句1;
  语句2;
  …
}
while (条件表达式);

语句执行过程:
1、执行一遍循环体。
2、求出作为循环条件的“条件表达式”的值,若为真,则自动转向第1步,否则结束do循环的执行过程,继续执行其后面的语句。
do-while循环的特点是:先执行循环体,后判断布尔表达式。

注意:
1、当条件表达式的值为真时重复循环体,否则结束循环;这一点和pascal语言的repeat语句相反。
2、在do语句的循环体中也可以使用break语句,用它来非正常结束循环的执行。
3、while和do while语句的区别在于:while语句先判断条件是否满足,决定是否执行循环体,若开始条件就不满足,那么循环体一次也不执行;而do while语句是后

判断,不管条件是否满足,首先执行一遍循环体,然后再判断条件是否满足,在do while结构中,循环体至少被执行一次。简单说就是,如果开始循环控制条件为假,

两种循环的执行结果有所不同,do while循环至少执行一次,而while循环却一次都不执行。

例1、求两个自然数m、n的最小公倍数。
方法一:
#include<iostream>
using namespace std;
int main()
{
  int m,n,s,i=1;
  cin>>m>>n;
  do {
    s=m*i;i++;
  } while (s%n!=0);
  cout<<s;
  return 0;
}

方法二:
#include<iostream>
using namespace std;
int main()
{
  int m,n,j,r;
  cin>>m>>n;
  j=m*n;
  do {
    r=m%n;m=n;n=r;
  } while (r!=0);
  cout<<j/m;
  return 0;
}

例2、求1992个1992的乘积的末两位数是多少?
#include<iostream>
using namespace std;
int main()
{
  int a=1,t=0;
  do {
    t++;a=a*92%100;
  } while (t<1992);
  cout<<a;
  return 0;
}

例3、校体操队到操场集合,排成每行2人,最后多出1人;排成每行3人,也多出1人;分别按每行排4、5、6人,都多出1人;当排成每行7人时,正好不多。求校体操队至少多少人?
#include<iostream>
using namespace std;
int main()
{
  int x=0;
  bool y;
  do {
    y=true;
    x+=7;
    if (x%2!=1) y=false;
    if (x%3!=1) y=false;
    if (x%4!=1) y=false;
    if (x%5!=1) y=false;
    if (x%6!=1) y=false;
  } while (y==false);
  cout<<x;
  return 0;
}

二、作业
1、zerojudge:a518
2、输出1至100之间所有的素数。
3、输出2至1000之间所有的完数,完数是指此数的所有因子之和等于此数,如:28=1+2+4+7+14。