C#入门经典第四章读书笔记.docx
- 文档编号:10739419
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:30
- 大小:25.51KB
C#入门经典第四章读书笔记.docx
《C#入门经典第四章读书笔记.docx》由会员分享,可在线阅读,更多相关《C#入门经典第四章读书笔记.docx(30页珍藏版)》请在冰豆网上搜索。
C#入门经典第四章读书笔记
第四章流程控制
第一部分:
本章内容
1、布尔逻辑的含义及其用法
2、分支结构
3、循环结构
第二部分知识点
2.1、布尔逻辑
布尔逻辑关注是非问题,即True(真、是)和False(假、非)。
本节便讲解布尔逻辑的有关内容。
2.1.1逻辑运算符
bool是System.Boolean的别名,c#中用bool关键字声明布尔变量True或False。
以下代码声明了两个bool型的变量:
boolmyBooll=True;
boolmyBool2=False;
C#中用于bool型变量的运算符包括“&”、“I”、“^’’、“!
”、“&&”和“||"。
“&”运算符
“&”运算符表示逻辑“与”操作,只有参与运算的双方都为True时结果才为True。
“|”运算符
“|”运算符表示逻辑“或”操作,只有参与运算的双方都为False时,结果才为False。
"^"运算符
"^",运算符表示逻辑“异或”操作,参与运算的双方中只有一个True时,结果才为True。
“!
”运算符
“!
”运算符表示逻辑“非”操作,当参与运算的双方都为False时,结果为True。
“&&”运算符
“&&”运算符表示条件逻辑“与”操作,其运算规则同“&”运算符,不同的是“&&”仅在必要时才计算第二个操作数。
此时完全可以不进行第二个操作数的计算而直接给出结果,但“&”不提供这样的功能。
“&&”运算符则提供了上述功能,以下代码演示了“&&”运算符的功能:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Collections;
namespaceExample6_5
(
classProgram
{
staticvoidMain(string[]args)
{;
Console.WriteLine(”True&&Falseis:
{O}”,MyBoolTrue()&&MyBoolFalse());
Console.WriteLine(”False&&Trueis:
{0}”,MyBoolFalse()&&MyBoolTrue());
Console.ReadLine();
)
//返回True的方法,同时输出“Truereturned!
”
staticboolMyBoolTrue()
(
Console.WriteLine(”Truereturned!
”):
returntrue;
)
“||”运算符
“||”运算符表示条件逻辑“或”操作,其运算规则同“|”运算符,不同的是“||”仅在必要时才计算第二个操作数。
事实上,第一行和第二行代码中的第一个操作数为True,由“|”的运算规则可知,操作数中存在True则其结果必定为True。
此时完全可以不进行第二个操作数的计算而直接给出结果,但“|”不提供这样的功能。
“||”运算符则提供了上述功能,以下代码演示了“||”运算符的功能:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Collections;
namespaceExample6_6
{
classProgram
{
staticvoidMain(string[]args)
Console.WriteLine("True||Falseis:
{0}”,MyBoolTrue()||MyBoolFalse());
Console.WriteLine(”FalseIITrueis:
{0}",MyBoolFalse()||MyBoolTrue());
Console.ReadLine();
//返回True的方法,同时输出“Truereturned!
”
staticboolMyBoolTrue()
{
Console.WriteLine(”Truereturned!
”);
returntrue;
)
//返回False的方法,同时输出“Falsereturned!
”
staticboolMyBoolFalse()
{
Console.WriteLine(”Falsereturned!
”);
returnfaIse;
)
)
)
程序运行结果如下:
True||Falseis:
True
Falsereturned!
Truereturned!
False||Trueis:
True
从结果中可以看出,进行True||false运算时,MyBoolFalse方法没有被调用;而进行False||True运算时,MyBoolTrue方法被调用并返回True。
程序运行结果很好地说明了“||”运算的特殊性,即“||”运算可以减少方法的调刖或表达式的计算,提高程序的运行效率。
比较运算符
现实的生活学习中经常会用到“大于”,“小于"这样的词汇,在c#中也存在同样的运算符。
比较运算符与数学语言中的运算符非常相似,需要注意“等于”运算符“==”和“不等于”运算符“!
=”与数学符号的差别。
2.1.2逻辑运算符的优先级和赋值运算符的优先级
同算术运算符一样,逻辑运算符也存在优先级,结合以前讲过的算术运算符的优先级,可以得到更新的新运算符优先级。
高++,--,(用于前缀);();+,-(一元);!
;~
*,/,%
+,-
<<,>>
|<,>,<=,>=
|==,!
=
|&
|^
|
&&
||
=,*=,/=,%=,+=,-=,<<=,>>=,&=,^=,|=
低++,--(用作后缀)
赋值运算符优先级(由高到低):
基本—>一元—>乘除—>加减—>移位—>比较—>相等—>位与 —>位异或—>位或—>逻辑与—>条件—>赋值
2.2流程控制语句
2.2.1goto语句
goto是c#中的一个关键字,goto语句的功能是将程序控制权直接传递给标记语句。
goto语句早在c和Basic语言中就已经出现,拥有一定计算机知识的可能已经非常熟语句。
从应用角度看,goto语句有一定的实用价值,但是由于goto语句的随意跳转特性,在历籍、教程中部不建议开发人员使用goto语句。
很多高级程序员也不建议使用goto语句,在一些程序设计标准和准则中明确指出不允许在使用goto语句,另外有文献指明现有的语句完全可以实现goto语句的功能这一结论。
虽然goto语句由自身的特性导致其不易于在程序中随意使用,但作为一个每种程序设计都保留的关键字,goto语句仍然有其实用性。
C#中仍然提供了对goto语句的支持。
2.2.2分支
分支语句的作用是在程序中传递控制权。
前面讲过的goto语句实际上也是分支语句的一种,它也实现了程序的跳转和控制权的传递。
if语句
if是一个非常常用的关键字,在C#中会被大最用于条件判断等场合。
从字面上来看,if即中文“如果”的意思。
在c#中,可以用“如果”来理解if关键字的意思,但其实际的意义是构成if语句,并根据语句中给出的bool型变量或表达式的值判断将要执行的语句。
通常if语句的格式如下:
if(myBool)
(
Corisole.WritetLine(”执行一号分支!
”);
)
这里myBool为一个预先定义好的bool型变量,代码根据myBool的值决定是否执行if后面大括号中的内容。
当myBool为True时,执行Console.WriteLine并继续;当myBool为False时,跳过Console.WriteLine并继续执行后而的内容。
MyBool既可以是一个变量,也可以是一个返回bool型值的办法或表达式。
以下代码将不执行大括号中的内容:
if(1>2)
{
Console.WriteLine(”执行二号分支!
”)
)
显然,1>2将返回False,因此将跳过大括号中的内容。
if语句还存在另外一种方式,即if-else形式,其语句形式如下:
if(myBool)
{
Console.WriteLine(”执行一号分支!
”):
)
else
{
Console.WriteLine(”执行二号分支!
”):
)
其中myBool仍为一个bool型变量、表达式或方法。
当myBool为True时,将执行第一对大括号中的内容,跳过else后面大括号中的内容;当myBool为False时,将跳过第一对大括号中的内容,执行else后面大括号中的内容。
下面的实例利用if-else语句实现了比较数的大小的功能:
usingSystem;
usingSystem.Collections.Generic
usingSystem.Text;
usingSystem.Collections;
namespaceExample6_9
(
classProgram
(
staticvoidMain(string[]args)
{
//利用Console.ReadLine方法从键盘读入字符并转换为double型数
Console.WriteLine(”请输入一个数:
”):
doublemyDoublel=Convert.ToDoublefConsole.ReadLine());
Console.WriteLine(”请再输入一个数:
”):
doublemyDouble2=Convert.TODouble(Console.ReadLine());
//比较两个数的大小并输出相应的内容
if(myDoublel>myDouble2)
(
Console.WriteLine(”第一个数大于第二个数!
”):
)
else
(
//判断两个数的大小关系,并输出结果
if(myDoublel==myDouble2)
{
Console.WriteLine(”第一个数等于第二个数!
”);
)
else
{
Console.WriteLine(”第一个数小于第二个数!
”)
)
Console.ReadLine();
)
)
)
运行程序,并根据提示输入两个合法的数字,其运行结果如下:
请输入一个数:
2.3
请再输入一个数:
3.8
第一个数小于第二个数!
可以看到程序对两个数的大小作出了准确地判断。
代码中值得注意的有以下两点:
Console.ReadLine方法用于从标准输入流读取下一行字符。
这里的标准输入流即为键盘。
当从键盘输入一些字符并按Enter健时,Console.ReadLine将记录这些字符并返回这些字符的string类型变量。
在程序的末尾调用一次Console.ReadLine方法可以使程序等待输入而达到暂停的目的。
之前所有的程序都采用了这种方法。
程序中使用Convert.ToDouble方法将捕获的标准输入流字符转换为double型变量。
如果输入的是一个字符串类型的变量,在进行转换时将会产生异常。
因此在执行程序时要求输入合法的数字型变量。
除去上面讲到的两点,程序中还有一个重要的内容需要掌握。
程序中使用了两个if-else语句,而第二个语句包含在第一个if-else语句的else部分,这就是if-else语句的嵌套。
使用嵌套可以使程序判断更多的条件,而且可以提高程序的运行效率。
现在该实例实现了对两个整型变量根据值得大小置换的功能。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceExample6_10
(
classProgram
(
staticvoidMain(string[]args)
(
//提示输入一个整数,并获取该整数存储到a中
Console.WriteLine(”请输入一个整数:
”);
inta=Convert.ToInt32(ConsoleReadLine());
//提示输入一个整数,并获取该整数存储到b中
Console.WriteLine("请再输入一个整数:
");
intb=Convert.ToInt32(Console.ReadLine());
intc=O;
//如果a>b,则借助C对a和b进行交换
if(a>b)
(
c=a:
a=b:
b=c:
)
Console.WriteLine(”a的值为{0}。
",a);
Console.WriteLine(”b的值为{0)。
",b);
Console.ReadLine();
运行程序,分别输入45和23,运行结果如下:
请输入一个整数:
45
请再输入一个整数:
23
a的值为23
b的值为45
可以看到,输入任意两个整数,程序部将会按照其值的大小使得a储存小数,b储存人数。
三元运算符
if-else语句可以替换成一句代码,这句代码就是本小节将要讲到的三元运算符。
三元运算符的语法如下:
myCondition?
Operationl:
Operation2
三元运算符由“?
”和“:
”分割成3部分。
myCondition为条什,当myCondition的值为True时进行Operation1运算;当myCondition的他为False时进行Operation2运算。
三元运算符同样可以嵌套,如下:
myConditionl?
Operationl:
(myCondition2?
Operation2:
Operation3)
不推荐采用过于复杂的三元嵌套表达式。
三元运算符的优点在于其表达式简洁,使用方便。
对于三元运算符的合理使用可以减少代码长度和复杂度,便于程序的维护和阅读。
若使用复杂的嵌套,则违背了三元运算符的初衷。
switch语句
通过if-else语句和三元运算符的学习中可以看到,当面临许多的条件判断时,使用这两者都过于复杂。
switch语句可以判断很多条件,并将语句控制权传递给相应的代码;可以使代码清晰明了,减少逻辑混乱和错误。
switch语句是一个控制语句,它通过控制传递给其体内的一个case语句来处理多个选择。
其语法如下:
switch(myData)
(casemyCondition1
Operation1:
break;
casemyCondition2
Operation2;
break;
casemyCondition3
Operation3;
break;
default:
Operation4;
break:
。
其中myData是需要检测的变量,当myData与myCondition1.myCondition2或myCondition3中的某一个匹配时,程序将执行相应的Operation1,Opertation2或Operation3。
当所有条件均不匹配时,将执行default部分的代码。
如果没有书写default部分代码,则直接跳出。
switch语句还有以下要求;
任意两个case中的条件不能相同。
任一个case部分的语句中都必须存在break语句。
不允许执行完一个case语句后,再执行第二个case语句,除非这个case部分为空,没有任何语句。
switch语句非常适合多判断的场合,与if_else语句相比非常简洁。
2.2.3循环
循环语句提供了根据指定条件反复执行某部分代码的功能,这种功能提供了很多遍历。
for循环
for循环重复执行一个语句或语句块,直到指定的表达式计算为False值。
for循环对于迭代数组和顺序处理非常方便。
for循环的示例如下:
for(inti=0:
i<5;i++)
(
)
for后面的小括号中的内容被分号分为3个部分,分别是:
初始化部分。
中止条件。
自增运算。
冒泡算法的思想足从数组中索引号为0的元素开始依次两两比较相邻的元素,使其小的元素在前,大的在后。
对于大小为13的数组,只需n-1次操作即可使最大的元素位于数组的最后位置;然后重复操作,同样需n-2次比较可以使次大的元素位于数组倒数第二的位置;依次类推,可以实现数组的排序。
实例代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceExample6_18
{
classProgram
{
staticvoidMain(string[]args)
{
int[]myArray=newint[5】(12,9,35,68,51};
inta=0
Console.WriteLine(”排序前:
”);
//创建一个循环语句,从0开始,每次加1,并输出数组的相应元素,跳出条件为大于等于5
for(inti=O;i<5;i++)
{
Console.WriteLine(”myArray[{0}]1)~J值为{1)。
”,i,myArray[i]);
)
//采用冒泡法对数组进行排序
for(inti=1:
i<5:
i++)
{
for(intj=O:
j<5-i:
j++)
(
if(myArray[j]>myArray[j+1])
{
a=myArray[j];
myArray[j】=myArrayr[j+1];
myArray[j+1】=a;
)
)
)
Console.WriteLine(”排序后:
”);
//'创建一个循环语句,从0开始,每次加1,并输出数组的相应元素,跳出条件为大于等于5
for(intI_0;i<5:
i++)
(
Console.WriteLine(”myArray[{0}]的值为{1)。
”,i,myArray[i]);
)
Console.ReadLine();
)
)
)
程序运行结果如下:
排序前:
myArray[0]的值为12
myArray[1]的值为9
myArray[2]的值为35
myArray[3]的值为68
myArray[4]的值为51
排序后:
myArray[0]的值为9
myArray[1]的值为12
myArray[2]的值为35
myArray[3]的值为51
myArray[4]的值为68
可以看到,排序后数组的元素按由大到小的顺序排列。
本例中代码中存在两个for循环,内层for循环的作用是比较相邻两个整数的大小,并根据需要决定是否交换两个整数的位置。
外层的for循环确定了比较的范围。
由于第一次循环可以确定数组中最大的整数,进入下一次循环时可以只比较其他整数而无须全部比较。
依次类推,需要比较的元素逐次减少。
直到最后跳出循环,则说明算法结束。
冒泡算法的名称由来就是由它本身的这种特点决定的,由于它每次将最大的数排到最后,就像水中的气泡上浮一样,因此称其为冒泡算法。
while循环
while语句也实现了循环的功能,从本质上讲,它与for循环的功能没有差别。
while循环的语法定义如下:
while(condition)
{
operation
)
其中condition为循环条件,当condition为True时将会执行operation操作,结束后继续返回到while语句开始处执行;当condition为False时,程序将会跳过operation中的内容,执行while语句以外的内容。
在while语句中,需要注意以下几个问题:
while语句在进入循环之前就会对代码中所确定的循环条件进行判断,因此while循环可能执行0次或多次。
请一定要注意循环的中止条件,设定合理的中止条件,以免造成无限循环而不能中止的状态。
其中break关键字和continue关键字在while中的用途。
break关键字用于跳出到循环外部;continue关键字用于跳过当前迭代并进入下一次迭代,而不跳出循环。
do循环
do循环与while循环相似,但它的判断条件在循环之后,即do循环将至少执行一次,这点与while有很大的不同。
d0循环的语法定义如下:
dO
(
operation;
)while(condition);
其中operation是将要进行的循环操作,condition是判断条件。
无论condition为何值,operation将会首先被执行一次,然后再判断condition。
当condition为True时将重新返问执行operation操作;当condition为False时将跳出循环。
中止循环
C#为循环的中止提供了4个可用的关键字,即break、Continue、goto和return。
其中goto可以跳转到任何位置,因此也可以用于跳出循环,使循环中断。
第三部分学习重点和难点
重点:
1、分支结构;
2、循环
难点:
循环中的for循环
第四部分常见企业面试题
1、编一个程序,用ifelse语句,输入一个整数,如果该数大于0,则输出"这个数大于零。
",如果该数等于0,则输出"这个数等于零。
",否则输出"这个数小于零。
"。
inti;
Console.WriteLine("请输入一个整数");
i=int.Parse(Console.ReadLine());
if(i>0)
{
Console.WriteLine("这个数大于0");
}
elseif(i==0)
{
Console.WriteLine("这个数等于0");
}
else
{
Console.WriteLine("这个数小于0");
}
2、编一个程序,输入三个实数,要求使用ifelse语句把它们的中间数找出来,可以使用逻辑运算符。
floatx,y,z,second=0;
Console.WriteLine("请输入三个float类型的值");
x=float.Parse(Console.ReadLine());
y=float.Parse(Console.ReadLine());
z=float.Parse(Console.ReadLine());
if((x>y&&x
second=x;
elseif((y>x&&y
second=y;
else
second=z;
Console.WriteLine("这三个数中的中间数为{0}",second);
3、编一个程序,首先输入一个成绩(0到100的整数),用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 入门 经典 第四 读书笔记