for循环
1-n的循环
C++最简单的循环,也是要记住的,就是循环n次,代码如下:
int n = 10; //n表示循环次数
for(int i = 1; i <= n; i++)
{
cout << i << ' '; //可以书写任意语句块
}
//输出结果:1 2 3 4 5 6 7 8 9 10
现在看一下for循环的格式,for(语句a; 语句b; 语句c),必须由两个分号隔开。语句a是初始化语句,只执行一次;语句b是判断条件,只要为true就执行代码块一次;执行完代码块一次之后,执行语句c,是循环的更新,执行完语句c之后,循环执行语句b。循环结束的条件就是语句b判断条件为false,上面的例子中,最后一次循环i变为11,语句块b判断为false,循环结束。
for语句和if语句一样,只能影响到离它最近的一条语句,所以如果语句块超过一句,就要用大括号括起来。
初始化语句中的变量释放
先看下面的代码:
#include <iostream>
using namespace std;
int main()
{
int n = 10; //n表示循环次数
for(int i = 1; i <= n; i++)
{
cout << i << ' '; //可以书写任意语句块
}
cout << i;
return 0;
}
按理来说,i在循环结束时的值为11,输出时应为11,但编译不通过,显示变量i没有被定义,这样的原因是:i在for循环中进行定义,属于局部变量,i的作用范围就是for语句中,一旦循环结束,变量i的内存空间就被编译器释放,在循环外调用自然会出错。
需要注意,有些编译器(如VC++ 6.0)并不会释放变量i的空间,同时VC++6.0 BUG较多,所以不推荐使用VC++ 6.0。
循环的嵌套
循环和if else一样也可以一层一层地嵌套,循环的嵌套只是把大循环的循环体语句中也添加循环而已,下面看一个例子:
#include <iostream>
using namespace std;
int main()
{
for(int i = 1; i <= 10; i++) //循环1
{
cout << "循环1:" << i << " (";
for(int j = 1; j <= 5; j++) //循环2
{
cout << "循环2:" << j << ' ';
}
cout << ") 结束一次循环1" << endl;
}
return 0;
}
代码执行结果:
从执行结果可以清晰地看出循环嵌套的执行顺序,在一次大循环中,每次都执行一遍小循环。
用break和continue来结束循环
在循环中,可以用一句 break;
来结束整个循环,常常配合if else语句来控制循环结束条件。举个例子,求10! 以内大于500的最小阶乘,示例代码如下:
#include <iostream>
using namespace std;
int main()
{
int f = 1; // 阶乘的值
for(int i = 1; i <= 10; i++)
{
f = f * i; //i的阶乘
if(f > 500) //如果有阶乘大于500
{
cout << i << "! = " << f << endl; //输出i的阶乘
break; //结束循环
}
}
return 0;
}
我们得到的输出结果是:6! = 720
,得到了最小值。
我们可以用一句 continue;
来跳过当前这次循环。举一个相似的例子,求10! 以内所有大于500的阶乘,示例代码如下:
#include <iostream>
using namespace std;
int main()
{
int f = 1; //阶乘的值
for(int i = 1; i <= 10; i++)
{
f = f * i; //i的阶乘
if(f <= 500) //如果有阶乘小于等于500
{
continue; //跳过当前的循环,不执行后面的代码
}
cout << i << "! = " << f << endl; //输出i的阶乘
}
return 0;
}
得到的输出结果:
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800