i信息学奥赛

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

导航

while语句

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

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

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

注意:当条件表达式的值为真时重复循环体,否则结束循环;这一点和pascal语言的while语句一致。

格式举例:
while(cin>>x,x<0)
功能:当输入的数据小于0时,重复读入数据。
注意:while的括号中可以包含多个语句(中间用逗号分隔),但是只判断最后一个语句是否为真,如:while(x>10,x==10,x<10)如果x<10,则继续执行循环,否则退出循环。

语句执行过程:
1、计算作为循环控制条件表达式的值,得到逻辑真或假,假定用M表示。
2、若M为真,则执行一遍循环体,否则离开循环,结束整个while语句的调用。
3、循环体的所有语句执行结束后,自动转向第1步执行。

说明:
1、为了循环不至于变成无限循环(死循环),在循环体中一定要使循环条件表达式中的变量值有所变化。
2、如果循环开始,表尔表达式的值为假,则不执行循环体,直接退出while语句,继续执行后面的语句。
3、循环条件所用的表达式,可以是算术表达式、关系表达式、逻辑表达式等。

例1、求s=1+2+3+…+n,当加到第几项时,s的值会超过1000?
#include<iostream>
using namespace std;
int main()
{
  int n=0,s=0;
  while (s<=1000) {++n;s+=n;}
  cout<<n;
  return 0;
}

例2、求两个正整数m、n的最大公约数。
#include<iostream>
using namespace std;
int main()
{
  int m,n,r;
  cin>>m>>n;
  r=m%n;
  while (r!=0) {m=n;n=r;r=m%n;}
  cout<<n;
  return 0;
}

例3、求满足不等式1+1/2+1/3+…+1/n>=5的最小值。
#include<iostream>
using namespace std;
int main()
{
  int i=0;
  float s=0;
  while (s<5) {i++;s+-1.0/i}
  cout<<i;
  return 0;
}

 

二、作业
1、zerojudge:
基础题:a024、a038、a121、a147、a149、a738、d070、d356、d693、d899
思考题:a215、a307、b330、c079、d255、d593

2、利用公式π/4=1-1/3+1/5-1/7+……,求π的值,要求精确到最后一项小于0.0001为止。
3、打印输出一百到一亿之间的,既是完全平方数又是回文数的所有正整数(完全平方数是一个正整数的平方数,回文数即为左右对称的正整数)。例如:121,它是11的平方,也是左右对称的自然数。
4、输入两个正整数,求这两个正整数的最小公倍数。(设这两个数分别是m和n,另设一个整型变量i,则m*i就是m的i倍。令i向n变化,每次增加1,在此过程中,当m*i能被n整除时,m*i即为所求。)