《C#入门经典》学习笔记--第四章 流程控制

 程序流程就是C#代码的执行顺序。控制程序流程的两种方法是:分支和循环。分支根据计算的结果有条件的执行代码。循环重复执行相同的语句。这两种方法都用到了布尔逻辑。

1 布尔逻辑

布尔逻辑使用布尔值(true或false)计算条件。

bool类型可以有两个值:true或false。bool类型可用于存储比较的结果。布尔比较需要使用布尔比较运算符(也称为关系运算符)。

布尔比较运算符

运算符类别示例表达式结果
==二元var1 = var2 == var3;如果var2等于var3,var1的值就是true,否则为false
!=二元var1 = var2 != var3;如果var2不等于var3,var1的值就是true,否则为false
<二元var1 = var2 < var3;如果var2小于var3,var1的值就是true,否则为false
>二元var1 = var2 > var3;如果var2大于var3,var1的值就是true,否则为false
<=二元var1 = var2 <= var3;如果var2小于或等于var3,var1的值就是true,否则为false
>=二元var1 = var2 >= var3;如果var2大于或等于var3,var1的值就是true,否则为false

在上表中,var1都是bool类型的变量,var2和var3则可以是不同类型,如数值、字符串、布尔值。

对布尔值使用这些运算符,只能使用==和!=运算符。

&和|运算符也有两个类似的运算符,称为条件布尔运算符。

条件布尔运算符

运算符类别示例表达式结果
&&二元var1 = var2 && var3;如果var2和var3都是true,var1的值就是true,否则为false.(逻辑与)
||二元var1 = var2 || var3;如果var2或var3是true(或两者都是),var1的值就是true,否则为false.(逻辑或)

&& 和 || 运算符的结果与 & 和 | 完全相同,但性能更好。检查第一个操作数的值(var2),如果已经能判断结果,就根本不必处理第二个操作数(var3)。

1.1 布尔按位运算符和赋值运算符

布尔赋值运算符可以把布尔比较与赋值组合起来。当表达式使用赋值(=)和按位运算符(&、|、^)时,就使用所比较数值的二进制表示来计算结果,而不是整数、字符串或相似的值。

布尔赋值运算符

运算符类别示例表达式结果
&=二元var1 &= var2;var1的值就是var1 & var2的值
|=二元var1 |= var2;var1的值就是var1 | var2的值
^=二元var1 ^= var2;var1的值就是var1 ^ var2的值

^运算符(逻辑异或)用法:如果操作数中相同位置上的位有且只有一个为1,其结果位就是1。

例如,var1 ^= var2类似于var1 = var1 ^ var2,其中var1 = true,var2 = false。当比较false的二进制表示0000与true的二进制表示0001时,var1 就设置为true。

1.2 运算符优先级

运算符优先级(更新后)

优先级运算符
优先级由高到低

++,--(用作前缀),(),+,-(一元),!,~(按位取反)

*,/,%

+,-

<<,>>

<,>,<=,>=

==,!=

&

^

|

&&

||

=,*=,/=,%=,+=,-=,<<=,>>=,&=,^=,=

++,--(用作后缀)

2 分支

分支是控制下一步要执行哪行代码的过程。由条件语句来控制,这个条件语句使用布尔逻辑。(使用布尔逻辑控制程序流)

C#中的3种分支技术:

  • 三元运算符
  • if语句
  • switch语句

2.1 三元运算符

三元运算符有三个操作数,其语法如下:

<test>?<resultIfTrue>:<resultIfFalse>

计算test可得到一个布尔值,运算符的结果根据这个值来确定是<resultIfTrue>还是<resultIfFalse>。

2.2 if语句

if语句是一种有效的决策方式。与?:语句不同,if语句的结果不能赋给一个变量,使用该语句是为了根据条件执行其他语句。最简单的语法如下:

if(<test>)

{<code executed if  <test> is true>;}

else

{<code executed if <test> is false>;}

2.3 switch语句

switch语句非常类似于if语句,也是根据测试的值来有条件的执行代码。但是,Switch语句可以一次将测试变量与多个值进行比较,而不是仅测试一个条件。这种测试仅限于离散的值。

switch语句的基本结构如下:

switch(<testVar>)

{

case<comparisonval1>:

     <code to execute if <testVar> == <comparisonval1> >

     <break>;

case<comparisonval2>:

     <code to execute if <testVar> == <comparisonval2> >

     <break>;

……

case<comparisonvalN>:

     <code to execute if <testVar> == <comparisonvalN> >

     <break>;

default:

     <code to execute if <testVar> != comparisonvals>

     <break>;

}

<testVar>的值与每个<comparisonvalX>的值进行比较,如果有一个匹配,就执行为该匹配提供的语句。如果没有匹配,但有default语句,就执行default部分的代码。执行完每个部分的代码之后,还需要另一个语句break。break将中断switch结构的执行。也可以使用return语句,中断当前函数的运行,而不只是switch结构。也可以使用goto语句。

switch(<testVar>)

{

case<comparisonval1>:

     <code to execute if <testVar> == <comparisonval1> >

     goto case<comparisonval2>;

case<comparisonval2>:

     <code to execute if <testVar> == <comparisonval2> >

     <break>;

}

一个case语句处理完毕后,不能自由进入下一个case语句。但这条规则有个例外:如果多个case语句堆叠在一起,其后加一个代码块,实际上是一次检查多个条件。满足这些条件中的一个,就会执行代码。

switch(<testVar>)

{

case<comparisonval1>:

case<comparisonval2>:

     <code to execute if <testVar> == <comparisonval1> or <testVar> == <comparisonval2> >

     <break>;

case<comparisonval2>:

default:

      <code to execute>

      <break>;

}

3 循环

循环就是重复执行语句。(根据指定的条件多次执行代码块)

3.1 do循环

一直循环到给定的条件满足为止。do循环执行方式:执行标记为循环的代码,然后进行一个布尔测试,如果测试结果为 true,就再次执行这段代码,当测试结果为false时,就退出循环。

do循环的结构如下:

do

{

      < code to be looped >

}while(<test>);

3.2 while循环

与do循环的区别:while循环中的布尔测试在循环开始时进行,而不是最后进行。如果测试结果为false,就不会执行循环。

while(<test>)

{

     < code to be looped >

}

3.3 for循环

for循环可以指定循环的次数,并维护它自己的计数器。定义for循环,需要下列信息:

  • 初始化计数器变量的一个起始值。
  • 继续循环的条件,应涉及计数器变量。
  • 在每次循环的最后,对计数器变量执行一个操作。

for(<initialization>;<condition>;<operation>)

{

     <code to loop>

}

3.4 循环的中断

  • break——立即终止循环。
  • continue——立即终止当前的循环(继续执行下一次循环)。
  • return——跳出循环及包含该循环的函数。

continue仅中断当前迭代,而不是整个循环,例如:

int i;

for(i = 1,i<=10,i++)

{

     if( ( i % 2) == 0)

          continue;

      WriteLine(i);

}

在该示例中,只要i除以2的余数为0,continue语句就终止当前的迭代,所以只显示数字1、3、5、7和9。

3.5 无限循环

永不终止的循环,只能在用户强制中断时结束。

while(true)

{

     <code in loop>

}

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值