C#教程04_流程控制

目录

4.1 布尔逻辑

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

4.1.2 运算符优先级的更新

4.2 分支

4.2.1 三元运算符

4.2.2 if语句

4.2.3 switch语句

4.3 循环

4.3.1 do…while循环

4.3.2 while循环

4.3.3 for循环

4.3.4 循环的中断

4.3.5 无限循环

4.4 练习

4.5 本章要点


 

 

4.1 布尔逻辑

bool类型可以有两个值:true或false。

(1)布尔比较运算符

运算符

类别

示例表达式

结果

==

二元

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

(2)条件布尔运算符

运算符

类别

示例表达式

结果

&&

二元

var1=var2 && var3;

如果var2和var3都是true,var1的值就是true,否则为false(逻辑与)

||

二元

var1=var2||var3;

如果var2或var3是true(或两者都是),var1的值就是true,否则为false(逻辑或)

 

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

(1)布尔赋值运算符

运算符

类别

示例表达式

结果

&=

二元

var1 &=var2;

var1的值是var1 & var2的结果

|=

二元

var1|=var2;

var1的值是var1|var2的结果

^=

二元

var1 ^=var2;

var1的值是var1 ^ var2的结果

static void Main(string[] args)
{
    Console.WriteLine("Enter an integer:");       
    int myInt =Convert.ToInt32(Console.ReadLine());
    bool isLessThan10 = myInt < 10;
    bool isBetween0And5 = (0 <= myInt) && (myInt <= 5);

    Console.WriteLine($"Integer less than 10? {isLessThan10}");
    Console.WriteLine($"Integer between 0 and 5? {isBetween0And5}");
    Console.WriteLine($"Exactly one of the above is true?{ isLessThan10 ^ isBetween0And5} ");

    Console.ReadKey();
}

运行结果

Enter an integer:
7
Integer less than 10? True
Integer between 0 and 5? False
Exactly one of the above is true?True

 

4.1.2 运算符优先级的更新

优先级

运算符

优先级由高到低

++、--(用作前缀)、+、-、!、~

*、/、%

+、-

<<、>>

<、>、<=、>=

==、!=

&

^

|

&&

||

=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=、|=

++、--(用作后缀)

 

4.2 分支

分支是控制下一步要执行哪行代码的过程。要跳转到的代码行由某个条件语句来控制。这个条件语句使用布尔逻辑,对测试值和一个或多个可能的值进行比较。

 

4.2.1 三元运算符

三元运算符 语法:

<test> ?<resultIfTrue>:<resultIfFalse>

解释:

先计算<test>,得到的值为一个布尔值。

若结果为true,执行<resultIfTrue>,若结果为false,执行<resultIfFalse>。

例子:

 Console.Write("Please input Number: \n A=");
 double A = Convert.ToDouble(Console.ReadLine());
 Console.Write("Please input Number: \n B= ");
 double B = Convert.ToDouble(Console.ReadLine());
 Console.WriteLine($"The larger numbers in {A} and {B} are {(A >= B ? A : B)}");

运行结果

Please input Number:
 A=7
Please input Number:
 B= 8
The larger numbers in 7 and 8 are 8

 

4.2.2 if语句

if语句 语法1

if (<test>)
  <code executed if<test> is true>;

解释:

先计算<test>,得到的值为一个布尔值。

若结果为true,执行<code ……>,若结果为false,跳过if代码块。

if语句 语法2

if (<test>)
    <code executed if<test> is true>;
  else
    <code executed if<test> is false>;

if语句 语法3

if (<test>)
  {
   <code executed if<test> is true>;
  }
  else
  {
   <code executed if<test> is false>;
  }

例子:

string comparison;
 Console.WriteLine("Enter a number:");
 double var1 = Convert.ToDouble(Console.ReadLine());
 Console.WriteLine("Enter another number:");
 double var2 = Convert.ToDouble(Console.ReadLine());

 if (var1 < var2)
     comparison = "less than";
 else
 {
     if (var1 == var2)
         comparison = "equal to";
     else
         comparison = "greater than";
 }
 Console.WriteLine($"The first number is { comparison} the second number.");

运行结果:

Enter a number:
7
Enter another number:
8
The first number is less than the second number.

4.2.3 switch语句

switch语句可以一次将测试变量与多个值进行比较,而不是仅测试一个条件,这种测试仅限于离散的值。

switch语句 语法1

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>值(在case语句中指定)进行比较,如果有一个匹配,就执行为该匹配提供的语句。如果没有匹配,但有default语句,就执行default部分的代码。

执行完每个部分的代码后,还需要有另一个语句break。在执行完一个case块后,再执行第二个case语句是非法的。

 

switch语句 语法2

switch (<testVar>)
  {
    case<comparisonVal1>:
    <code to execute if<testVar> ==<comparisonVal1> >
    goto case<comparisonVal2>;

    case<comparisonVal2>:
    <code to execute if<testVar> ==<comparisonVal2> >
    break;
    ...
  }

 

switch语句 语法3

switch (<testVar>)
{
    case<comparisonVal1>:
    case<comparisonVal2>:
    <code to execute if<testVar> ==<comparisonVal1> or
              <testVar> ==<comparisonVal2> >
     break;
    ...
}

 

例子1

const string myName = "benjamin";
const string niceName = "andrea";
const string sillyName = "ploppy";
string name;
WriteLine("What is your name?");
name = ReadLine();
switch (name.ToLower())
{
    case myName:
        WriteLine("You have the same name as me!");
        break;

    case niceName:
        WriteLine("My, what a nice name you have!");
        break;

    case sillyName:
        WriteLine("That's a very silly name.");
        break;
}
WriteLine($"Hello {name}!");
ReadKey();

运行结果

What is your name?
benjamin
You have the same name as me!
Hello benjamin!

 

例子2

Write("Please enter your grades:");
int grade = Convert.ToInt32(ReadLine());
int level = grade / 10;
switch (level)
{
    case 10:
    case 9:
        WriteLine("Your grade is A+");
        break;
    case 8:
        WriteLine("Your grade is A");
        break;
    case 7:
        WriteLine("Your grade is B+");
        break;
    case 6:
        WriteLine("Your grade is B");
        break;
    default:
        WriteLine("Your grade is C");
        break;
}

运行结果

Please enter your grades:85
Your grade is A

 

4.3 循环

循环就是重复执行语句。

4.3.1 do…while循环

语法

do
  {
   <code to be looped>
   } while (<Test>);

解释:

执行标记为循环的代码,然后进行一个布尔测试,如果测试结果为true,就再次执行这段代码,并重复这个过程。当测试结果为false时,就退出循环。

例子:

//do…while循环
//先执行循环体,再判断条件
int i = 1;
do
{
    Write($"{i}\t");
    i++;
} while (i <= 10);

运行结果:

1       2       3       4       5       6       7       8       9       10

 

4.3.2 while循环

语法

while (<Test>)
  {
    <code to be looped>
  }

解释:

while循环中的布尔测试在循环开始时进行,而不是最后进行。如果测试结果为false,就不会执行循环。程序会直接跳转到循环之后的代码。

例子

//while循环
//先判断条件,再执行循环体
int j = 1;
while (j <= 10)
{
    Write($"{j}\t");
    j++;
}

运行结果:

1       2       3       4       5       6       7       8       9       10

 

4.3.3 for循环

语法

 for (<initialization>;<condition>;<operation>)
  {
   <code to loop>
  }

解释:

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

例子:

//for循环
for (int k = 1; k <= 10; k++)
    Write($"{k}\t");

运行结果:

1       2       3       4       5       6       7       8       9       10

 

4.3.4 循环的中断

语法

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

4.3.5 无限循环

语法

while (true)
  {
    // code in loop
  }

 

4.4 练习

(1)如果两个整数存储在变量var1和var2中,该进行什么样的布尔测试,看看其中的一个(但不是两个)是否大于10?

答案:

WriteLine("Please input two number:");
double var1 = Convert.ToDouble(ReadLine());
double var2 = Convert.ToDouble(ReadLine());
if (var1 > 10 || var2 > 10)
    WriteLine("At least one of the two numbers is bigger than 10 .");
else
    WriteLine("Both numbers are less than or equal to 10");

运行结果:

Please input two number:
12
7
At least one of the two numbers is bigger than 10 at least.

 

(2)编写一个应用程序,其中包含练习(1)中的逻辑,要求用户输入两个数字,并显示它们,但拒绝接受两个数字都大于10的情况,并要求用户重新输入。

答案:

double var1, var2;
do
{
    WriteLine("Please input two number:");
    var1 = Convert.ToDouble(ReadLine());
    var2 = Convert.ToDouble(ReadLine());
} while (var1 > 10 && var2 > 10);
WriteLine("Both numbers are not greater than 10.");

运行结果:

Please input two number:
15
20
Please input two number:
10
15
Both numbers are not greater than 10.

 

(3)下面的代码存在什么错误?

  int i;
  for (i = 1; i<= 10; i++)
  {
    if ((i % 2) = 0)
     continue;
    WriteLine(i);
  }

答案:

 

修改:

  int i;
  for (i = 1; i<= 10; i++)
  {
    if ((i % 2) == 0)
     continue;
    WriteLine(i);
  }

 

4.5 本章要点

序号

主题

要点

1

布尔逻辑

布尔逻辑使用布尔值(true和false)计算条件。布尔运算符用于比较数值,返回布尔结果。一些布尔运算符也用于对数值的底层位结构执行按位操作,还有一些专门的按位运算符

2

分支

可使用布尔逻辑控制程序流。计算为布尔值的表达式可以用于确定是否执行某个代码块,可以使用if语句或?:(三元)运算符进行简单的分支,或者使用switch语句同时检查多个条件

3

循环

循环允许根据指定的条件多次执行代码块。使用do和while循环可在布尔表达式为true时执行代码,使用for循环可在循环代码中包含一个计数器。循环可以使用continue中断当前的迭代,或者使用break完全中断。一些循环只能在用户强制中断时结束,这些循环称为无限循环

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值