下面我们来研究for循环。事实上,for循环是最常用的一种循环,它最大的特点就是直观和简洁。但使用for循环的语句都可以被while循环替换,而使用while循环的地方有时却不能被for循环替换。for循环一般用于实现固定次数的循环,相对while循环来讲,用它实现固定次数的循环比较直观易读,这也是使用for循环的原因。
下面是for循环的语法和使用示例:
语法:
for(表达式1;表达式2;表达式3)
{
循环体语句
}
示例:
说一万句我爱你:
for(int n=0;n<10000;n++)
{
Console.Write("我爱你");
}
对于for循环,表达式1通常用来初始化循环变量,一般是赋值表达式;表达式2是循环条件,是关系表达式,如果为true则执行循环体语句;表达式3用来修改循环变量,控制循环次数,一般为递增或递减表达式。要注意for循环使用分号来隔开三个表达式,这三个表达式的执行顺序是:表达式1→表达式2→循环体语句→表达式3→表达式2→循环体语句→表达式3→表达式2……如此往复直到循环条件为false时退出循环。上面的for循环示例等效于:
int n=0;
while(n<10000)
{
Console.Write("我爱你");
n++;
}
for循环的工作原理可以参照等效的while语句,我们说循环结构中有两种语句,一种是算法中重复操作的语句,另外一种是修改循环变量的语句。对于while循环来说,这两种语句都在循环体中有时很不方便,而for循环将修改和初始化循环变量的操作都放在了for语句的括弧里,循环体中只有操作语句,这样做不仅直观而且高效。三个表达式的执行顺序也和等效的while语句一样,先通过表达式1初始化循环变量,然后通过表达式2判断是否满足循环条件,如果满足循环条件则进入循环体,循环体执行完后再到表达式3改变循环变量,然后再通过表达式2进行条件判断,如果条件满足再进入循环体,然后再由表达式3修改循环变量,再判断,再进入循环体等,整个过程除了表达式1执行一次外,其他两个表达式都会执行很多次直到不满足循环条件退出循环。
示例:
using System;
namespace Test
{
class Program
{
static void Main(string [] args)
{
int sum=0;
for(int i=0;i<100;i++)
{
sum=sum+i;
}
Console.WriteLine("从1加到100的和是{0}",sum);
}
}
}
上面的程序是求从1加到100的和。执行进入for循环后,首先给i赋初值0,然后比较i是否小于100,如果不小于则进入循环体。在循环体中将i的值累加到sum后,执行i++,然后判断此时的i是否小于100,如果小于100再进入循环体,在循环体内累加完后再计算i++,然后再比较是否小于100,再进入循环体……这样循环操作直到i等于100,此时i不满足小于100的条件,退出for循环打印结果。
其他注意点:
for循环的表达式1和表达式3可以是由逗号分割的复合表达式,复合表达式的执行方向是从左到右,如:
for(i=0,j=N;i<=j;i++,j--){…}
以下奇怪的式子也成立,说明复合表达式中可以含有任何简单语句:
for(i=0;i<=N;i++,Console.WriteLine(j)){…}
for循环的三个表达式都可以省略,但两个分号不能省略,如:
for( ;i<10;i++)
或for( ;i<10; )
或for(i=0; ;i++)
或for(;;)
等都是合法的,凡是省略了表达式2的被认为是死循环:
for(int n=0; ; n++)
{
//将是死循环,直到n的数值超出其范围出现异常强行退出,否则一直循环
Console.Write("我爱你");
}
另外,for循环也可以嵌套,如下例:
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
for(int i=0;i<60;i++)
{
for(int j=0;j<60;j++)
Console.WriteLine("{0}分{1}秒",i,j);
}
}
}
}
运行结果:
1分1秒
1分2秒
1分3秒
1分4秒
……
从上面的示例中你至少可以看出两件事情,首先是for语句可以嵌套,然后你会发现for语句也可以省略掉大括弧。对于嵌套循环来说,一般最多使用两层的嵌套,也就是上面这一种嵌套,对于两层的嵌套,外循环每循环一次,内循环都将循环全部,所以上面这个最终会显示3600条数据。for语句省略大括弧的规则和if、while语句一样,当循环体只有一个语句的时候可以省略掉大括弧。当然我们不提倡省略大括弧的行为,因为这样会使程序的可读性变差。
下面我们来研究for循环。事实上,for循环是最常用的一种循环,它最大的特点就是直观和简洁。但使用for循环的语句都可以被while循环替换,而使用while循环的地方有时却不能被for循环替换。for循环一般用于实现固定次数的循环,相对while循环来讲,用它实现固定次数的循环比较直观易读,这也是使用for循环的原因。
下面是for循环的语法和使用示例:
语法:
for(表达式1;表达式2;表达式3)
{
循环体语句
}
示例:
说一万句我爱你:
for(int n=0;n<10000;n++)
{
Console.Write("我爱你");
}
对于for循环,表达式1通常用来初始化循环变量,一般是赋值表达式;表达式2是循环条件,是关系表达式,如果为true则执行循环体语句;表达式3用来修改循环变量,控制循环次数,一般为递增或递减表达式。要注意for循环使用分号来隔开三个表达式,这三个表达式的执行顺序是:表达式1→表达式2→循环体语句→表达式3→表达式2→循环体语句→表达式3→表达式2……如此往复直到循环条件为false时退出循环。上面的for循环示例等效于:
int n=0;
while(n<10000)
{
Console.Write("我爱你");
n++;
}
for循环的工作原理可以参照等效的while语句,我们说循环结构中有两种语句,一种是算法中重复操作的语句,另外一种是修改循环变量的语句。对于while循环来说,这两种语句都在循环体中有时很不方便,而for循环将修改和初始化循环变量的操作都放在了for语句的括弧里,循环体中只有操作语句,这样做不仅直观而且高效。三个表达式的执行顺序也和等效的while语句一样,先通过表达式1初始化循环变量,然后通过表达式2判断是否满足循环条件,如果满足循环条件则进入循环体,循环体执行完后再到表达式3改变循环变量,然后再通过表达式2进行条件判断,如果条件满足再进入循环体,然后再由表达式3修改循环变量,再判断,再进入循环体等,整个过程除了表达式1执行一次外,其他两个表达式都会执行很多次直到不满足循环条件退出循环。
示例:
using System;
namespace Test
{
class Program
{
static void Main(string [] args)
{
int sum=0;
for(int i=0;i<100;i++)
{
sum=sum+i;
}
Console.WriteLine("从1加到100的和是{0}",sum);
}
}
}
上面的程序是求从1加到100的和。执行进入for循环后,首先给i赋初值0,然后比较i是否小于100,如果不小于则进入循环体。在循环体中将i的值累加到sum后,执行i++,然后判断此时的i是否小于100,如果小于100再进入循环体,在循环体内累加完后再计算i++,然后再比较是否小于100,再进入循环体……这样循环操作直到i等于100,此时i不满足小于100的条件,退出for循环打印结果。
其他注意点:
for循环的表达式1和表达式3可以是由逗号分割的复合表达式,复合表达式的执行方向是从左到右,如:
for(i=0,j=N;i<=j;i++,j--){…}
以下奇怪的式子也成立,说明复合表达式中可以含有任何简单语句:
for(i=0;i<=N;i++,Console.WriteLine(j)){…}
for循环的三个表达式都可以省略,但两个分号不能省略,如:
for( ;i<10;i++)
或for( ;i<10; )
或for(i=0; ;i++)
或for(;;)
等都是合法的,凡是省略了表达式2的被认为是死循环:
for(int n=0; ; n++)
{
//将是死循环,直到n的数值超出其范围出现异常强行退出,否则一直循环
Console.Write("我爱你");
}
另外,for循环也可以嵌套,如下例:
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
for(int i=0;i<60;i++)
{
for(int j=0;j<60;j++)
Console.WriteLine("{0}分{1}秒",i,j);
}
}
}
}
运行结果:
1分1秒
1分2秒
1分3秒
1分4秒
……
从上面的示例中你至少可以看出两件事情,首先是for语句可以嵌套,然后你会发现for语句也可以省略掉大括弧。对于嵌套循环来说,一般最多使用两层的嵌套,也就是上面这一种嵌套,对于两层的嵌套,外循环每循环一次,内循环都将循环全部,所以上面这个最终会显示3600条数据。for语句省略大括弧的规则和if、while语句一样,当循环体只有一个语句的时候可以省略掉大括弧。当然我们不提倡省略大括弧的行为,因为这样会使程序的可读性变差。