基本格式
“do-while语句”也称为“直到循环”。语句格式为:
do 循环体语句 while(表达式);
其中:
- 表达式——是C++中任一合法表达式,包括逗号表达式;其值是逻辑型,即1或0。
- 循环体语句——可以是单一语句,也可以是复合语句。
执行流程
图2.6 do-while语句的执行流程
do-while语句的执行流程示意图如左图所示,描述如下:
(1) 执行一次循环体语句;
(2) 计算表达式的值,若表达式的值为真(或非0),则重复上述过程;
(3) 直到表达式的值为假(或为0)时,结束循环。
应用举例
【例2.12】用迭代法求x=a1/2的近似值,要求前后两个迭代根之差小于10-5。求平方根的迭代公式为:xn+1 = (xn+a/xn)/2。(查看动画演示)
#include<iostream>
#include<cmath>
using namespace std;
int main(){
float x0,x1,a;
cout<<"输入一个正数:"<<endl;
cin>>a;
if(a<0) cout<<a<<"不能开平方!"<<endl;
else { //有实数解的情况
x1=a/2; //x1用作保存结果
do {
x0=x1;
x1=(x0+a/x0)/2;
} while (fabs(x1-x0)>=1e-5);
cout<< a<<"的平方根为:"<<x1<<endl;
}
return 0;
}
【例2.13】输入一段文本,统计文本的行数、单词数及字符数。假定单词之间以空格或跳格或换行符间隔,假定文本没有空行。(查看动画演示)
#include<iostream>
using namespace std;
int main(){
char ch;
int nline=0,nword=0,nch=0;
int isword=0;
cout<<"输入一段文本(无空行):"<<endl;
do{
ch=cin.get();
if(ch=='/n') nline++; //遇换行符行数+1
if(ch!=' '&& ch!='/t'&&ch!='/n'&&ch!=EOF){ //读到非间隔符
if(!isword) nword++; //在单词的起始处给单词数+1
nch++; //字符数加+1
isword=1;
}
else isword=0; //读到间隔符
} while(ch!=EOF); //读到文本结束符为止
cout<<"行数:"<<nline<<endl;
cout<<"单词数:"<<nword<<endl;
cout<<"字符数:"<<nch<<endl;
return 0;
}
重要提示
- do-while语句在绝大多数情况下都能代替while语句。
- while语句与do-while语句的区别是:do-while语句无论条件表达式的值是真是假,循环体都将至少执行一次;而若条件表达式的初值为假,则while语句循环体一次也不会执行。