C#笔记06 流程控制语句
——本系列是基于人民邮电出版社《C#2008 C#图解教程》、清华大学出版社《C#入门经典(第五版)》两本书的自学C#笔记,如果您发现了本文的纰漏,还望不吝指正。
写在前边
语句是描述一个类型或告诉程序去执行一个动作的源代码指令 ———人民邮电出版社《C#2008 C#图解教程》
本章介绍控制程序流的两种方法。程序流程就是C#代码的执行顺序。这两种方法就是分支和循环。分支是有条件地执行代码。条件取决于计算的结果,例如,“只有myVal 小于10,才执行这行代码”。循环重复执行相同的语句(重复执行一定的次数,或者在满足测试条件后停止执行)。 ——清华大学出版社《C#入门经典(第五版)》
1. if语句
if语句的功能比较多,是有效的决策方式。与?:语句不同的是,if语句没有结果(所以不在赋值语句中使用它),使用该语句是为了有条件地执行其他语句。
复习:条件运算符 ?:
可以理解成了if…else结构的书写
if ( x < y )
intVar = 5;
else
intVar = 10;
//也可以写成
intVar = x < y
? 5
: 10;
- if(布尔表达式) { 代码 }
当布尔表达式为真时 ,会执行if块中的代码
为假的时候会跳过if块 - if(布尔表达式) { 代码 }
else{ 代码 }
当布尔表达式为假的时候,会进入else块中
为真的时候会进入if块中
两者只能进一个 - else if()
会去判断if()里的条件,如果为假,会接着去判断下一个else if()的条件
一旦有一个条件为真,会进入对应的块中执行里面的代码,其他的就不会去判断了
if (var1 == 1)
{
// Do something.
}
else if (var1 == 2)
{
// Do something else.
}
else if (var1 == 3 || var1 == 4)
{
// Do something else.
}
else
{
// Do something else.
}
//源码来自清华大学出版社《C#入门经典(第五版)》 第4章
2. switch语句
switch语句可以一次将测试变量与多个值进行比较,而不是仅测试一个条件。这种测试仅限于离散的值,而不是像“大于X”这样的句子
switch(表达式)
{
case (标号)常量值:
//该情况执行的代码;
break;//代表该情况执行完毕
case 常量值:
//该情况执行的代码;
break;//代表该情况执行完毕
case 常量值:
//该情况执行的代码;
break;//代表该情况执行完毕
....
default:
break;
}
- 表达式的结果可以是整数,字符 ,bool,枚举
- 标号的数据类型必须和表达式一致
- 标号具有唯一性
- 标号的顺序是可以改变的
- 当所有case(情况)都不满足时,会执行default语句
- 每一个switch块中只有一个default;
- 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行
3. while循环
while 循环中的布尔测试是在循环开始时进行
while (<Test>) //循环条件为布尔表达式
{
<code to be looped> //循环体
}
- 当执行到while循环时候会先检测循环条件,当条件为真时,执行块中的循环体,
- 执行完循环体后,会回到循环条件,再次询问条件是否为真,为真就接着去执行
- 循环体为假则循环执行完毕。
例:
int x = 3;
while(x > 0)
{
Console.WriteLine("x:{0}",x);
x--;
}
Console.WriteLine("Out of loop");
控制台输出结果:
x: 3
x: 2
x: 1
Out of loop
4. do while循环
do while测试表达式在循环的底部执行
do
{
<code to be looped> //循环体
}
while (<Test>); //循环条件
- do循环至少要执行一次,先不管循环条件,进入循环体执行一遍
- 然后再去询问执行条件,如果满足则执行循环体
- 不满足则跳出循环
例如,使用该结构可以把1~10 的数字输出到一列上:
int i = 1;
do
{
Console.WriteLine("{0}", i++);
}
while (i <= 10);
5. for循环
只要测试表达式在循环体顶端计算时返回true,for循环结构就会执行循环体
for (<initialization>; <condition>; <operation>) //初始表达式;循环条件;增量表达式
{
<code to loop> //循环体
}
- 第一步执行初始表达式
- 第二步询问循环条件。
- 第三步,为真,执行循环体,为假跳出循环
- 第四步,执行完循环体后,会执行增量表达式
- 第五步,再次询问循环条件
例:前面使用 do while循环输出了从1~10 的数字,下边使用 for循环完成这个任务:
for (int i = 1; i <= 10; ++i) //变量i的作用域仅为当前for循环
{
Console.WriteLine("{0}", i);
}
6. 循环的中断
当控制流到达跳转语句时,程序执行被无条件转移到程序的另一部分。跳转语句有:break、continue、return、goto
1). break语句
立即终止循环,导致执行跳出最内层封装的语句
在switch语句中跳出switch。在循环语句中,终止整个循环,继续执行循环后面的第一行代码
2).continue语句
立即终止当前的循环,继续执行下一次循环
例:
for( int x=0; x<5; x++ )
{
if( x < 3 )
continue;
//当x>=3时执行下面的语句
Console.WriteLine("Value of x is {0}", x);
}
//源码来自 人民邮电出版社《C#2008 C#图解教程》 第9章
控制台输出结果:
Value of x is 3
Value of x is 4
3).return语句
跳出循环及其包含的函数
返回控制到调用函数成员,而且还能返回一个值
4).goto语句
可以跳出循环,到已标记好的位置上
例:
int i = 1;
while (i <= 10)
{
if (i == 6)
goto exitPoint;
Console.WriteLine("{0}", i++);
}
Console.WriteLine("This code will never be reached.");
exitPoint:
Console.WriteLine("This code is run when the loop is exited using goto.");
//源码来自清华大学出版社《C#入门经典(第五版)》 第4章
控制台输出结果:
1
2
3
4
5
This code is run when the loop is exited using goto.
- goto语句可以跳到它本身所在块内的任何标签语句,或跳出到任何它被嵌套的块内的标签语句
- goto语句不能跳入任何嵌套在该语句本身所在块内部的任何块
- 如果希望代码易于阅读和理解,最好不要使用该命令