- 3.4.1 流程控制概述
流程就是执行程序的顺序。
分支:程序根据不同的条件执行不同的代码块。
循环:程序根据一定的条件不断执行代码块,一直到不满足条件为止。
C#中选择(分支)语句有:
if ... else ...
switch ... case ...
迭代(循环)语句有:
while
do
for
foreach
- 3.4.2 选择语句
if ... else 常用于对多种可能的条件进行判断。Console.Write("请输入您的年龄: ");
int iAge = int.Parse(Console.ReadLine());
string s = "";
if (iAge > 0 && iAge < 6)
s = "婴儿";
else if (iAge >= 6 && iAge < 14)
s = "少年";
else if (iAge >= 14 && iAge < 35)
s = "青年";
else if (iAge >= 35 && iAge < 60)
s = "中年";
else if (iAge >= 60)
s = "老年";
else
return;
Console.WriteLine(string.Format("您属于{0}",s));
switch ... case ... 常用于根据某个开关变量进行选择。Console.WriteLine("请选择一个操作:");
Console.WriteLine("1.操作");
Console.WriteLine("2.操作");
Console.WriteLine("3.操作");
Console.Write("请输入操作代号(1-3):");
int i = int.Parse(Console.ReadLine());
switch (i)
{
case 1:
Console.WriteLine("操作1开始");
Console.WriteLine("操作1结束");
break;
case 2:
Console.WriteLine("操作2开始");
Console.WriteLine("操作2结束");
break;
case 3:
Console.WriteLine("操作3开始");
Console.WriteLine("操作3结束");
break;
default:
Console.WriteLine("操作代号错误");
break;
}
注意以下几点。
除非case中没有任何语句,否则需要在最后写上break;除非case为空,否则程序不能从一个case贯穿到另一个ccase。
如果没有任何case匹配将进入default语句块。
case只能匹配一个值,不能进行逻辑操作,如果要进行逻辑操作请使用 if...else...
上述代码还可以改为使用if ... else ...形式。Console.WriteLine("请选择一个操作:");
Console.WriteLine("1.操作");
Console.WriteLine("2.操作");
Console.WriteLine("3.操作");
Console.Write("请输入操作代号(1-3):");
int i = int.Parse(Console.ReadLine());
if (i == 1)
{
Console.WriteLine("操作1开始");
Console.WriteLine("操作1结束");
}
else if (i == 2)
{
Console.WriteLine("操作2开始");
Console.WriteLine("操作2结束");
}
else if (i == 3)
{
Console.WriteLine("操作3开始");
Console.WriteLine("操作3结束");
}
else
Console.WriteLine("操作代号错误");
在这里需要注意,如果一个代码块中有一条以上的语句请使用{}来包括代码。如果语句只有一条,你可以省略{}(上例中else的情况)。
- 3.4.3 迭句语句
while常用于根据某个条件进行循环操作。如果条件为true则不断循环一直到条件为false为止。int i = 1;
while (i < 6)
{
Console.WriteLine(i);
i++;
}
这段代码输出了1~5。注意,在每次循环语句代码块中需要修改条件,否则循环一直进行下去。不过,你可以不使用额外的语句修改条件变量,上述代码等价于下面的代码。int i = 1;
while (i++ < 6)
{
Console.WriteLine(i-1);
}
循环语句体现了计算机的强大性能,使用循环语句能让计算机进行大量计算操作。比如一个简单的累加操作。int iResult = 0;
Console.Write("1+2+3+…n, n= ");
int n = int.Parse(Console.ReadLine());
int i = 1;
while (i <= n)
{
iResult += i;
i++;
}
Console.WriteLine("累加结果为{0}", iResult);
do...while...语句和while差不多。区别在于while是先判断条件后执行代码块,do...while是先执行代码块后判断条件,因此do...while语句至少会执行一次代码块。int i = 1;
do
{
Console.WriteLine(i);
i++;
}
while (i < 6);
和使用while语句一样输出1~5,如果你把代码改为:int i = 1;
do
{
Console.WriteLine(i);
i++;
}
while (i < 1);
虽然不满足条件,但是仍然执行一次代码块,如果改为while的话就一次也不会执行(因为它是先进行判断的)。
for 语句常用于遍历操作。所谓遍历,就是循环访问某个多值类型中的所有成员。比如输出一个数组中所有元素。当然for也可以用于进行进行N次操作,使用for,条件变量会自动根据我们设定的步进进行变化。for (int i = 1; i <= 5; i++)
Console.WriteLine(i);
上述代码等价于:int i = 1;
while (i <= 5)
{
Console.WriteLine(i);
i++;
}
for()语句中需要按次序填写如下语句。
·声明变量语句。
·判断条件语句。
·步进语句。
for (int i = 1; i<=5; i++) 就表示使用i作为步进变量,i<=5 的时候进行循环,每次 i+1。在这里要说明几点。
·步进变量放在for内声明,不要使用for外面的变量作为步进变量。int i = 1;
for (; i <= 5; i++)
Console.WriteLine(i);
虽然这段代码是可行的,但是不推荐这样写。步进变量在for使用以后就不再有利用价值了。在for中声明的变量仅仅在for内有效。
前面说过,for经常用于遍历某个多值类型(比如数组)string[] StringArray = { "小朱", "小杨", "小张" };
for (int i = 0; i < StringArray.Length; i++)
Console.WriteLine(StringArray[i]);
在3.2.3中我们还介绍了一种多值类型枚举。使用for遍历枚举的作操也很常见。class Program
{
enum Direction
{
North,
south,
East,
West
}
static void Main(string[] args)
{
string[] arr = Enum.GetNames(typeof(Direction));
for (int i = 0; i < arr.Length; i++)
Console.WriteLine(arr[i]);
}
}
·最后要说的迭代语句是foreach。foreach和for使用方法不同,只需要指明需要从哪个变量中遍历哪个类型的元素。string[] StringArray = { "小朱", "小杨", "小张" };
foreach (string s in StringArray)
Console.WriteLine(s);
int [] list = {1,2,3,4};
foreach (int i in list)
Console.WriteLine(i);
注意foreach的使用方法:foreach(元素类型代表元素的变量in需要遍历的变量)。
for 和 foreach的本质区别在于,我们能在for的代码块中更改元素的值,而foreach不能(foreach为只读遍历)。int[] list = { 1, 2, 3, 4 };
for (int i = 0; i < list.Length; i++)
list[i] *= 10;
foreach (int i in list)
Console.WriteLine(i);
程序输出10、20、30、40