这条语句与while语句非常相似。不同的是这是“出口判断的”循环语句,while是入口判断语句。也就是如果条件不成立while语句循环体一次都不会执行,而do...while()至少会执行一次。
最简单我们看一个例子
int main(void)
{
int i=12;
while(i<11)
{
printf("haha");
i++;
}
return 0;
}
我们再VC中编译以上代码,会输出"haha"吗?不会的。因为i的初始值是12。条件不成立。
int main(void)
{
int i=12;
do
{
printf("haha");
i++;
}while(i<11);
return 0;
}
我们再VC中编译以上代码,会输出"haha"吗?会的。因为即使条件不成立,也要执行一次循环体后在检查条件。
while语句其实可以认为是for语句的一个变种。因为使用在任何情况下两种语句都是可以互换的。
我们来分析一下while语句的结构。
while(条件表达式)
{
//执行循环体语句
}
while语句是一种入口判断的循环。也就说在循环的入口判断“条件表达式”是否成立。如果“成立”则执行体。不成立则退出循环。
比如我们要计算1-100之间整相加的和。我们使用while语句来实现。
int main(void)
{
int sum=0;
unsigned char i=1;
while(i<=100)
{
sum+=i;
printf("i=%d,sum=%d\n",i,sum);
i++;
}
printf("\n\nsum=%d",sum);
return;
}
程序运行过程如下:
1、声明变量sum、i.初始化sum值为0,i值初始化为1.
2、如果i<=100执行(3),否则执行(4)。
3、sum +=i;
输出i的值、sum的值。
4、输出sum的值。退出.
我们既然认为while语句与for语句相互可以转化。我们试试for可不可以实现以上语句。
int main(void)
{
int sum=0;
unsigned char i;
for(i=0; i<=100;i++)
{
sum+=i;
printf("i=%d,sum=%d\n",i,sum);
}
printf("\n\nsum=%d",sum);
return;
}
所以我们再看一个例子体会一下.
我们来看一个公式:sum=1*1+2*2+3*3+4*4+....+n*n.
当sum>8000时n的临界是多少?
我们使用while来实现
int main(void)
{
int sum=0;
unsigned char n=1;
while(sum<8000)
{
sum+=n*n;
printf("n=%d,sum=%d\n",n,sum);
n++;
}
printf("\n\nn=%d",n-1);
return;
}
我们来使用for实现一下
int main(void)
{
int sum=0;
unsigned char n;
for(n=0; sum<8000;n++)
{
sum+=n*n;
printf("n=%d,sum=%d\n",n,sum);
}
printf("\n\nn=%d",n);
return;
}
总之如果您会使用for一定会使用while.那个方便根据实际情况。