C/C++关于循环
while(表达式)
{
语句块
}
这里是while循环的机制图
关于while循环:
1.while循环语句内应该含有使与表达式有关的变量改变的语句.
如:int i=0;
while(i<100)
{
cout<<i;
i++;
}
其中"i++"就是这个语句,若缺少此语句,循环将会一直进行以至于无法退出,也就是我们所说的死循环.
2.有时"死循环"也是有所用处的,例如游戏中敌人的刷新,在玩游戏的时游戏中的怪物总会一直刷新,随机刷新,直到打死了boss怪才不会出现,这就运用了循环机制.这样的循环往往需要break语句退出循环.
举个简单的例子:int i;
while(cin>>i)
{
cout<<i<<endl;
}
这样的循环是无法退出的,会一直打印你所输入的整形数值.
但如果这样:int i;
while(cin>>i)
{
if(i==404)
break;
cout<<i<<endl;
}
当你输入的值为404的时候,这个循环就会退出.这样可以进行未知个数的输入,"动态化"代码.
注:"==“不要写成”=",这是新手常常犯下的错误,这种情况编译器不会检查出你的错误,编译器只会检查你的语法错误,而逻辑错误无法检查.因此进行判断语句的时候应该多多留意.如果不行的话,还有一个小技巧:
你在写判断语句的表达式的时候可以将变量和常量的位置互换,操作如下:
404==i;//这样的写法与i==404等价
404=i;//这样的写法编译器会报错,因为赋值运算符是自右向左进行赋值运算的,因此与i=404无法等价,从而编译器检测了你的错误
do
{
语句块
}while(表达式);//记住这里要加分号

这是do-while机制的流程图
可以看出do-while循环是先斩后奏型:至少执行一次循环语句,这是和while循环的一大区别.
在使用这个类型的循环的时候应该注意表达式的值和循环体内的值.
如用while循环:
int sum=0,i=0;
while(i!=0)
{
sum+=i;
i++;
}
可以看出不执行while语句内的内容.
但若使用do-while语句:
int sum=0,i=0;
do
{
sum+=i;
i++
}while(i!=0);
可以看出这里的语句执行多少次吗?没错,执行无数次,是个死循环.因为“先斩”,执行了do的内容,i从0变成了1,while内的表达式结果为真,再执行do语句,以此循环下去…
for(表达式1;表达式2;表达式3)
{
语句块
}
for语句的写法简洁且灵活,是最常用的循环语句,许多迭代都要用到for语句,因此对于for语句的学习我们要加倍认真.
这是for语句的循环流程机制图

在此简单介绍下三个表达式各自的作用:
表达式1:通常用于初始化循环变量值,该表达式只执行一次,由图也可知.
表达式2:通常进行循环条件的判断,类似于while括号内的表达式,ture则继续循环,false则退出循环.
表达式3:通常为循环结构的迭代部分,用来修改迭代变量的值.
for语句的作用功能强大,几乎可以代替所有的while和do-while语句.
例如改写上例的while语句:
int i;
for(ii=0;i<100;i++)
{
cout<<i<<endl;
}
可以发现代码相对简洁了一些,当然这是简单的小例子,在大型循环中for语句的使用量明显多于while语句.
for语句灵活,灵活于什么?
for语句的表达式1可以为空:
上例改写可得:
int i=0;
for( ;i<100;i++)
{
cout<<i<<endl;
}
这与上例是等效的,表达式1可以放在循环语句外初始化.
for语句的表达式3可以为空:
上例改写可得:
int i;
for(i=0;i<100;)
{
cout<<i<<endl;
i++;
}
表达式3可以放在循环语句块中.
for语句的表达式2可以为空:
int i;
for(i=0; ;i++)
{
if(i>=100)
break;
cout<<i<<endl;
}
当表达式2为空的时候,像while循环一样,需要用到break语句退出循环.
在c++11中引入了基于范围的for循环(range for statement)
语法形式为:
for(declaration:expression)
{
statement
}
其中expression应为可迭代对象如string,vector类型.
有点类似于python中的:
for i in range( ),在此不做过多的介绍.
例如:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string word("Hello,world")
for(auto &a:word)
{
a=toupper(a);
cout<<a<<' ';
}
}
注意a是引用类型,因此当使用引用作为循环控制变量时,这个变量实际上被依次绑定到了序列的每个元素上,从而

1265

被折叠的 条评论
为什么被折叠?



