while循环
(1)不同于for循环的使用情境:并非达到指定次数,而是达到某条件时停止循环
(2)先判断再执行
(3)while死循环
while(true) {
语句组
}//死循环,可用break跳出
例题一:输入若干个(至少1个)不超过100的正整数,输出其中最大值、最小值及所有数的和。输入的最后一个数为0,标志输入结束。do
#include<iostream>
using namespace std;
int main()
{
int n,min=100,max=0,sum=0;
cin>>n;//启动循环
while(n) {
if(n<min) min=n;
if(n>max) max=n;
sum+=n;
cin>>n;
}
cout<<max<<" "<<min<<" "<<sum;
return 0;
}
例题二:牛顿迭代法求输入的数的平方根。
求a的平方根,首先猜测一个值X1=a/2
由迭代公式求出X2
将X2代入右边算出X3......
直到 Xn 和X(n+1)的差的绝对值小于某个值EPS
迭代公式:Xn+1 =(Xn +a/ Xn )/2
#include<iostream>
using namespace std;
int main()
{
double a,EPS=0.001;
cin>>a;
double x1=a/2;//假设值x1
double x2=x1-EPS+1;//由x1推出假设值x2
if(a>=0) {
while(x1-x2>EPS||x2-x1>EPS) {
x1=x2;
x2=(x2+a/x2)/2;
}
cout<<x2;
}
else
cout<<"input error";
return 0;
}
do...while循环
(1) 不同于while循环的使用情境:希望至少循环1次,就可以用do...while循环
(2)先执行后判断
(3)不要忘记while后的分号
do {
语句组
} while(表达式);
例题:输出1~10000内所有2的整数次幂
#include<iostream>
using namespace std;
int main()
{
int n=1;
do {
cout<<n<<" ";
n=n*2;
} while(n<10000);
return 0;
}