流程控制-循环-for循环
现在介绍最后一类循环——for循环。这类循环可以执行指定的次数,并维护它自己的计数器。要定义for循环,需要下述信息:
*初始化计数器变量的一个起始值。
*继续循环的条件,它应设计到计算器的变量。
*在每次循环的最后,对计数器变量执行一个操作。
例如,如果要在循环中,使计数器从1递增到10,递增量为1,则起始值为1,条件是计数器小于或等于10,在每次循环的最后,要执行的操作是给计数器加1。
这些信息必须放在for循环的结构中,如下所示:
for(<initialization>;<condition>;<operation>)
{
<code to loop>
}
它的工作方式与下述while循环完全相同:
<initialization>
while(<condition>)
{
<code to loop>
<operation>
}
但for循环的格式使代码更易于阅读,因为其语法是在一个地方包括循环的全部规则,而不是把几个语句放在代码的不同地方。
前面使用do和while循环输出了从1~10的数字。下面看看如果使用for循环完成这个任务。
int i;
for(i = 1;i <= 10;++i)
{
Console.WriteLine("{0},i");
}
计数器变量是一个整数i,它的起始值是1,在每次循环的最后递增1。在每次循环过程中,把i的值写到控制台上。
注意当i的值为11时,将执行循环后面的代码。因为在i等于10的循环末尾,i会递增为11。这是在测试条件i<=10之前发生的,所以此时循环结束。
与while循环一样,第一次执行前,只在条件测定为true时for循环才执行,所以循环中的代码可能根本就不会执行。
最后要注意,可以把计数器变量声明把在for循环里,如下所示:
for(int i = 1;i <= 10;++i)
{
Console.WriteLine("{0}",i);
}
但如果这么做,变量i就不能在循环外部使用。
下面介绍一个使用for循环的示例。它将显示一个Mandelbrot图像(使用纯文本字符)!
using System.Collections.Generic;
using System.Text;
namespace for循环
{
class Program
{
static void Main(string[] args)
{
double realCoord, imagCoord;
double realTemp, imagTemp, realTemp2, arg;
int iterations;
for (imagCoord = 1.2;imagCoord >= -1.2; imagCoord -= 0.05)
{
for (realCoord = -0.6; realCoord <= 1.77; realCoord += 0.03)
{
iterations = 0;
realTemp = realCoord;
imagTemp = imagCoord;
arg = (realCoord * realCoord) + (imagCoord * imagCoord);
while ((arg < 4) && (iterations < 40))
{
realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp) - realCoord;
imagTemp = (2 * realTemp * imagTemp) - imagCoord;
realTemp = realTemp2;
arg = (realTemp * realTemp) + (imagTemp * imagTemp);
iterations += 1;
}
switch (iterations % 4)
{
case 0:
Console.Write(".");
break;
case 1:
Console.Write("o");
break;
case 2:
Console.Write("O");
break;
case 3:
Console.Write("@");
break;
}
}
Console.Write("\n");
}
Console.ReadKey();
}
}
}
示例的说明,首先不打算详细说明如何计算Mandelbrot图像,而是解释为什么需要在这段代码中使用循环。如果对数学不感兴趣,可以快速浏览下面两端,因为它们对代码的理解非常重要。
Mandelbrot图像中的每个位置都对应共识N=x+y*i中的一个复数。实数部分是x,虚数部分是y,i是-1的平方根。图像中各个位置的x和y坐标对应于虚数的x和y部分。
图像中的每个位置用参数N来表示,它是x*x+y*y的平方根。如果这个值大于或等于2,则这个数字对应的位置值是0。如果参数N的值小于2,就把N的值改为N*N-N(即N=(x*x-y*y)+(2*x*y-y)*i),并再次测试这个新N值。如果这个值大于或等于2,则这个数字对应的位置值是1。这个过程一直继续下去,直到给图像中的位置赋一个值,或迭代执行的次数多余指定的次数为止。
根据给图像中每个点赋予的值,在图形环境下,屏幕上会显示某种颜色的像素。但是,本例使用的是文本环境,所以屏幕上显示的是一个字符。