目录
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完全中断。一些循环只能在用户强制中断时结束,这些循环称为无限循环 |