登入帳戶  | 訂單查詢  | 購物車/收銀台( 0 ) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書

『簡體書』深入浅出C#程序设计

書城自編碼: 2954334
分類:簡體書→大陸圖書→教材研究生/本科/专科教材
作者: 郭仁春 主编 葛晓宇 编著
國際書號(ISBN): 9787302449690
出版社: 清华大学出版社
出版日期: 2017-02-01
版次: 1 印次: 1
頁數/字數: 349/566000
書度/開本: 32开 釘裝: 平装

售價:HK$ 71.1

我要買

 

** 我創建的書架 **
未登入.


新書推薦:
复利:全球顶尖投资者的31节认知与决策思维课
《 复利:全球顶尖投资者的31节认知与决策思维课 》

售價:HK$ 103.4
最后的都铎:中世纪余晖下的宫廷爱欲与权力密码(女性写给女性的女性历史)
《 最后的都铎:中世纪余晖下的宫廷爱欲与权力密码(女性写给女性的女性历史) 》

售價:HK$ 101.2
窄门:纪德三部曲(插图珍藏版)
《 窄门:纪德三部曲(插图珍藏版) 》

售價:HK$ 158.7
工业机器人集成应用
《 工业机器人集成应用 》

售價:HK$ 91.8
像大人一样生存,像孩子一样生活(小时候觉得开心就好,现在也是)
《 像大人一样生存,像孩子一样生活(小时候觉得开心就好,现在也是) 》

售價:HK$ 56.4
万有引力书系 海洋女王 里斯本的历史
《 万有引力书系 海洋女王 里斯本的历史 》

售價:HK$ 89.7
周易大全
《 周易大全 》

售價:HK$ 147.2
元和十四年 : 大唐中兴与沉沦的十字路口
《 元和十四年 : 大唐中兴与沉沦的十字路口 》

售價:HK$ 79.4

 

編輯推薦:
1. 本书主要内容包括C#语法、面向对象编程、Windows编程、数据库、GDI 绘图、网络和线程等章节。ASP.NET网站和WPF等内容不包括在内,这主要是因为这些内容很复杂,不是短篇幅能阐述的。2. 用电脑绘图,是我学习计算机的动力之源,当看到自己绘制的图形闪现在屏幕上,有种别人为无法理解的美学感受,在工程实践中更是经常使用这方面的知识,非常遗憾的是C#专门讲述GDI 绘图的很少,我想GDI+绘图一章可能会吸引像我一样的读者,如果别人有这个教材,我一定会购买的。我在工程实际中用到*多的就是网络编程,特别是物联网,手机,移动终端等程序开发,都需要非常透彻了解了解网络协议,就数据传输来说主要有Sockets,TCP,UDP等技术,只要牵涉网络就很复杂。本书对此进行了全面解析。由于其复杂性,笔者也经常遗忘,但每次应用时,就会打开自己写的教程。我希望其他读者,也会将我的教程当作案头字典,甚至经典。
內容簡介:
本书从语法讲起,由浅入深,层层深入,尽量用简洁的语言、少量的代码解释复杂的C#程序; 主要内容包括C#语法、面向对象编程、Windows编程、数据库、GDI 绘图、网络和线程等。本书适合作为高等院校本科生和研究生的教材。
目錄
目录

第1章初识C#

1.1Visual Studio.NET简介

1.2.NET Framework简介

1.3C#简介

1.4Visual Studio .NET开发环境

第2章接触C#

2.1第一个C#程序

2.2关于控制台程序

2.3C#程序基本结构

2.3.1最简单的C#结构

2.3.2控制台基本输入和输出语句

2.4编程习惯

第3章C#语法

3.1变量与常量

3.1.1数值类型

3.1.2变量定义

3.1.3常量定义

3.1.4数据类型转换

3.2运算符

3.2.1算术运算符

3.2.2关系运算符

3.2.3逻辑运算符

3.2.4位运算符

3.2.5赋值运算符

3.2.6三元条件运算符

3.2.7运算符的优先级

3.3选择语句

3.3.1if语句

3.3.2switch语句

3.4循环

3.4.1while

3.4.2do while

3.4.3for

3.4.4foreach语句

3.4.5跳转语句

3.5异常

3.5.1try catch语句

3.5.2throw语句

第4章字符串、时间和简单数组

4.1字符串

4.1.1字符串的定义

4.1.2转义字符

4.1.3字符串的操作

4.1.4数值与字符串的相互转化

4.1.5占位符

4.1.6string.Format

4.1.7格式化字符串

4.1.8StringBuider

4.1.9字符串索引

4.2简单数组

4.2.1一维数组

4.2.2多维数组

4.2.3锯齿数组

4.2.4数组应用举例

4.3时间

4.3.1DateTime

4.3.2日期时间字符串的显示格式

4.3.3DateTime的计算

4.3.4TimeSpan

第5章面向对象编程

5.1面向对象

5.2类和对象

5.3封装、继承、多态

5.4程序结构

5.5名称空间

5.6部分类

5.7类的成员

5.7.1访问修饰符

5.7.2字段

5.7.3方法

5.7.4属性

5.8过程代码写在哪里

5.9方法重载

5.10构造函数

5.11析构函数

5.12this

5.13静态成员

5.14运算符重载

5.15引用类型与值类型

5.16装箱与拆箱

5.17函数的参数

5.18索引

5.19结构

5.20枚举

第6章继承与多态

6.1继承

6.2base关键字

6.3派生类的构造函数

6.4Object类

6.5多态

6.6隐藏方法new

6.7虚方法virtualoverride

6.8抽象类与抽象方法

6.9密封类和密封方法

6.10ToString

6.11接口interface

第7章委托与事件

7.1委托定义

7.2委托参数

7.3多播委托

7.4匿名委托

7.5委托耦合

7.6关于事件

7.7发布订阅

7.8事件参数

7.9事件句柄EventHandler

7.10事件参数EventArgs

第8章泛型

8.1泛型概念

8.2泛型类

8.2.1定义泛型类

8.2.2泛型类的默认值default

8.2.3泛型约束

8.3泛型接口

8.4泛型结构

8.5泛型方法

第9章数组与集合

9.1对象数组

9.2Array类

9.2.1Array数组创建

9.2.2Array数组复制

9.2.3Array数组排序

9.3元组

9.4列表

9.4.1ArrayList

9.4.2List

9.5队列

9.6栈

9.7链表

9.8有序列表

9.9字典

9.10有序字典

9.11Lookup类

9.12集

9.13可观察集合

9.14位数组

9.14.1BitArray

9.14.2BitVector32

第10章Windows窗体

10.1第一个窗体

10.2第一个按钮

10.3多个窗体

10.4认识窗体类

10.4.1三个文件

10.4.2Form1.cs

10.4.3Form1.Designer.cs

10.5简易计算器

10.6窗体和控件的属性

10.6.1大小和位置

10.6.2控件的停泊与锚点

10.6.3捕捉按钮小游戏

10.6.4颜色设置

10.7鼠标键盘事件

10.7.1鼠标事件

10.7.2键盘事件

10.7.3两个特殊的键盘事件

10.8事件的一些问题

10.9多文档界面

10.10窗体的状态

10.11窗体事件的执行顺序

10.12两个窗体之间传递数据

第11章Windows控件

11.1Windows工具箱

11.2公共控件

11.2.1RadioButton

11.2.2CheckBox

11.2.3ListBox

11.2.4ComboBox

11.2.5TreeView

11.2.6PictureBox控件

11.3菜单和工具栏

11.3.1MenuStrip

11.3.2ToolStrip

11.3.3ContextMenuStrip

11.4容器控件

11.4.1FlowLayoutPanel

11.4.2TableLayoutPanel

11.4.3SplitContainer

11.4.4TabControl

11.5对话框

11.5.1ColorDialog和FontDialog

11.5.2FolderBrowserDialog、OpenFileDialog和SaveFileDialog

第12章文件操作

12.1Directory和DirectoryInfo

12.1.1Directory

12.1.2DirectoryInfo

12.2File和FileInfo

12.2.1File

12.2.2FileInfo

12.3Path和DriveInfo

12.3.1Path

12.3.2相对路径

12.3.3DriveInfo

12.4文件读写

12.4.1File读文件

12.4.2写入文件

12.5流

12.5.1读写二进制文件

12.5.2读写文本文件

12.6资源管理器

第13章数据库

13.1C#与数据库的关系

13.2SQL语言

13.3ADO.NET

13.4C#调用Access数据库

13.4.1OleDbConnection

13.4.2OleDbCommand

13.4.3OleDbDataReader

13.4.4OleDbDataAdapter

13.5DataTable

13.5.1DataTable的定义

13.5.2DataColumn

13.5.3DataRow

13.5.4DataTable提取数据库数据

13.5.5编辑DataTable中的数据

13.5.6DataRow的状态

13.5.7DataRow的版本

13.6DataView

13.7DataSet

13.7.1DatSet与DataTable

13.7.2DataSet关系

13.7.3DataSet约束

13.8DataGridView

13.8.1行和列

13.8.2单元格

13.8.3行宽和列宽

13.8.4冻结

13.8.5排序

13.8.6隐藏

13.8.7列包含控件

13.8.8虚拟模式

13.9服务器资源管理器

13.10BindingSource

13.10.1BindingSource的简单应用

13.10.2BindingSource的定位

13.10.3BindingSource的排序过滤与查找

13.10.4Binding类

13.11可视化数据控件

13.11.1DataSet控件

13.11.2BindingNavigator控件

13.12窗体控件与数据库

13.12.1ComboBox

13.12.2窗体控件与DataSet

13.12.3控件的数据库向导

13.13综合实例


13.13.1创建数据库

13.13.2创建主窗体

13.13.3创建操作数据库的公共类

13.13.4创建图书类别窗体

13.13.5创建增加图书窗体

13.13.6创建编辑图书窗体

13.13.7创建图书查询窗体

13.14C#调用SQL Server数据库

13.14.1关于SQL Server Express数据库

13.14.2创建SQL Server Express数据库

13.14.3C#调用SQL Server Express数据库

第14章Lambda表达式与扩展方法

14.1代码简化的历程

14.1.1代码简化1

14.1.2代码简化2

14.1.3代码简化3

14.1.4代码简化4

14.1.5代码简化5

14.1.6代码简化6

14.2Lambda表达式

14.3Func,Action和Predicate

14.3.1Func

14.3.2Action

14.3.3Predicate

14.4委托在List中的简单应用

14.5扩展方法

第15章Linq

15.1准备数据

15.2投影和筛选

15.3排序

15.4分组

15.5复合from

15.6延迟执行与立即执行

15.6.1延迟执行

15.6.2立即执行

第16章GDI 绘图

16.1GDI与GDI

16.2绘制简单图形

16.3GDI 绘图原理

16.4Color

16.4.1RGB

16.4.2ARGB

16.4.3网络安全色

16.4.4Color结构

16.5Pen和Brush

16.5.1Pen

16.5.2Brush

16.6Graphics

16.7Point、Size和Rectangle

16.7.1Point和PointF

16.7.2Size和SizeF

16.7.3Rectangle和RectangleF

16.8绘制图形

16.9绘制文本

16.10绘制图片

16.11图形变换

16.12屏幕刷新问题

16.13Invalidate

16.14橡皮筋

16.15Image和BitMap

16.16ColorMatrix

16.17绘制函数曲线

16.17.1简单函数曲线

16.17.2动态曲线

16.18不使用OnPaint、Invalidate的方法

第17章网络编程

17.1网络基本概念

17.1.1TCPIP

17.1.2Socket套接字

17.1.3其他相关概念

17.1.4客户与服务器

17.2Socket程序

17.3TCP程序

17.4UDP程序

17.4.1UDP客户端

17.4.2UDP服务端

17.5异步通信

17.5.1同步和异步

17.5.2Socket异步连接

17.5.3Socket异步连接

17.6聊天程序

17.6.1客户端

17.6.2服务端

第18章线程

18.1进程与线程

18.2异步委托

18.2.1同步委托

18.2.2异步委托

18.2.3IAsyncResult

18.2.4异步回调AsyncCallback

18.2.5异步回调的Lambda表达式

18.3线程

18.3.1Thread

18.3.2给线程命名

18.3.3给线程传递参数

18.3.4线程的控制

18.3.5优先级

18.4线程池

18.5争用

18.6Windows窗体的线程问题

18.6.1Timer控件的问题

18.6.2System.Threading.Timer类

18.6.3System.Timers类

18.7BackgroundWorker

18.7.1BackgroundWorker控件

18.7.2BackgroundWorker类

18.8窗体与线程交换数据的一种简易方法

第19章关于变量命名

后记
內容試閱
前言
本书以简洁的叙事方式对C#语言进行讲述,如果您想高效率地学习C#,并喜欢代码简洁,请打开本书。对于C#初学者,大多数教材读起来非常吃力,这方面笔者有切身的体会,特别是那些冗长的变量命名,整页的程序代码,令人望而生畏。很多内容其实一句话可以说清,如果用很大篇幅讲解,这对初学者是不利的。本书的写作初衷就是让读者省力,节约时间,为读者扫清阅读障碍。在此方面本书做了最大努力,减少代码量,不让读者有读不下去的感觉。这也是本书不提供配套素材的根本原因。如果您觉得还是需要光盘或是源代码,说明本书做得还不够好,笔者将吸取经验,尽量做到极致。本书前面部分介绍VS.NET和C#的基本知识,去除大量无用的专业术语,对菜单工具栏等界面进行简单介绍,让读者可以直接切入C#主题。面向对象概念是C#编程的核心内容,对象这个术语过于学术化,其真正的意义其实是物体,C#语言在某种程度上来说是对自然界的一种描述语言,与日常用语是一样的。本书尽量将C#语言与身边事物和日常语言相结合,力求让学生理解其内涵。类似委托与事件对初学者来说很难理解,本书可以做到两三行语句让读者透彻理解,这是本书的特色之一。Windows和数据库程序应该是很多读者学C#语言的目的,特别是数据库编程应用极为广泛,数据库内容在本书中占了大部分篇幅。用计算机绘图是笔者学习计算机技术的动力之源,C#提供了GDI ,可以开发绘图程序和工业实时仿真曲线等,目前很少有教材对C#绘图做全面的介绍,但其应用却非常广泛,本书将对C#绘图进行全面解析。网络和线程是物联网、互联网 、虚拟现实、增强现实、移动通信等的核心内容,这些都是应用程序的主流发展方向,本书对此进行了全面分析。ASP.NET和WPF等内容不包含在本书之内,不是它们不重要,而是它们很复杂,不是一两章内容所能讲清楚的,若因为没有这些内容而放下本书,那是不明智的。本书希望给C#初学者带来福音,能成为读者的案头字典,甚至经典。本书非常适合作为本科生,研究生的教材。也适合那些喜欢编程的人,喜欢成为编程高手的人。编程不只是技术,同时也是艺术。编者
2016年6月


第3章
C#语法
与其他编程语言相比,C#语言在接近人类语言方面更胜一筹,C#继承了C语言大部分的语法结构,但与C语言也有很大不同,例如C#取消了令人讨厌的指针。3.1变量与常量C#毕竟是程序语言,总会和日常用语有所不同,例如日常中人们会说半径为1.2米,学生人数是30,说的时候并不考虑1.2是整数还是小数,但C#是必须要考虑类型的,就因为C#考虑了类型,给初学者造成了很大困扰。记住,C#是强类型语言,变量必须经过定义才能使用。3.1.1数值类型C#的数值类型包括整数、实数、布尔类型等。数值类型如表31所示。
表31数值类型
C#别名.NET CTS类型范围说明
整数sbyteSystem.SByte-128~1278位有符号整数byteSystem.Byte0~2558位无符号整数shortSystem.Int16-32768~3276716位有符号整数ushortSystem.UInt160~6553516位无符号整数intSystem.Int32-231~231-132位有符号整数uintSystem.UInt320~232-132位无符号整数longSystem.Int64-263~263-164位有符号整数ulongSystem.UInt640~264-164位无符号整数charSystem.CharUnicode字符编码16位无符号整数实数floatSystem.Single1.510-45~3.410-3832位单精度doubleSystem.Double5.010-324~3.410-30864位双精度decimalSystem.Decimal1.010-28~7.91028128位高精度十进制数
布尔boolSystem.Boolearntrue和false1位二进制
学过C语言的同学可能熟悉int、float、double等。初学者可能对这些数据类型感到迷惑,比如int和System.Int32究竟是什么关系,在编程中应该使用哪一个。在.NET中,定义了通用类型系统Common Type System,CTS,不管采用VB.NET或C#,所定义的数据类型都将被翻译成CTS类型。而我们熟悉的int、float等是属于C#语言自身独有的,int是System.Int32在C#中的别名。我们可以认为int和System.Int32就是一回事。double和System.Double是一回事。用户愿意用哪一个是自己的爱好问题。在实数中有一个我们不熟悉的类型decimal,它主要用于财务货币计算,可以精确地表示十进制小数,如十进制数0.003用其他类型会产生误差,而用decimal虽然也会有误差,但由于位数多达128位,因而十分精确,虽然位数多,但取值范围不如float和double大。各种类型的数值表达如下。1. 整数类型整数类型分为无符号数和有符号数,这里的符号指的是负号。无符号的数就是只能取正数。一些整数类型如下:
int a=123;
long b=23L;L可以写成l
uint c=123U;U可以写成u
ulong d=123UL;UL可以写成ul
如果是十六进制在数字前面加0x或0X,数字基数为0~9、A~F或a~f。例如:
int a=0x23; 十进制35
Int b=0xAB; 十进制171
如果是decimal类型,则在数字后面加M或m,如:
decimal a=23.6M
2. char类型char类型属于一种特殊的整数类型。它采用Unicode编码格式对每个字符都进行了编码,字符的写法是对单个字符加单引号,例如a,A,大,等。注意单引号中只能放一个字符转义字符除外,如ab是错误的。但转义字符\n是正确的,它代表回车,关于转义字符串后面会详述。一些字符的Unicode编码如表32所示。
表32字符的Unicode编码
字符Unicode编码十进制整数字符Unicode编码十进制整数
a97大22823A65\n10946
3. 实数类型如果只写出带小数点的数据,系统默认为是double型,这是要值得注意的事。这与C语言有所不同。如果需要float型,必须在后面加F或f,否则出错,如:
double a=12.8;
floatb=12.8F; 后面必须有F或f
这些数据类型都不区分大小写。如12.8F和12.8f没有区别。4. 工程计数法
double a=2e3; 值为2000即2103
double b=3E-4; 值为0.0004即210-4
工程计数法表示的值都是double型,写成e或E都可以。
3.1.2变量定义1. 变量定义的语法
在C#中,定义一个整型变量a,以下两种写法完全等价:
int a;
System.Int32 a;
定义变量的格式是:
类型 变量名1, 变量名2;
类型 变量名1=初值1, 变量名2=初值2;
例如:
int a, b, c;
double d;
如果要对变量赋初值,如下:
int a;
a=3;
也可以直接写成一行,如下:
int a=3;
2. 类型推断
C#支持一种叫做类型推断的形式来定义变量,采用关键字var,如:
var a=3;int
var b=3.0;double
var c=true;bool
用var定义,变量根据右边的值自动判断数据类型。关于变量名的定义需要注意以下事项: 变量名必须以字母或下划线开头,后面可以是字母与变量的组合,也可以是汉字。注意变量名区分大小写。 变量名不能与C#的关键字重名。C#的关键字共有七十多个,例如int、float、using等不能用作变量名。 如果非要使用关键字,可以在变量名前面加@,例如@int是一个正确的变量。 在C#中可以使用汉字,希腊字母等作为变量,例如下面的变量名是合法的:
int ,, ;
double半径;
这些奇怪字符的使用增强了程序的可读性。 可以使用Unicode字符定义变量,用语法\uXXXX来指定,其中XXXX是Unicode字符的十六进制编码。由于字符a的Unicode十六进制码为00AA,所以下列用法等价。
int a=9;
int \u00AA=9;
 声明了变量后,就不能再更改变量的类型了,例如下列语句会出现错误:
int a;
double a;
3. 变量作用域
变量的作用域为{ },如下面的代码会出错:
{
int a=5;
}
Console.Writea;
在{ }内的变量,在{ }外不存在。3.1.3常量定义常量是在编译时设定,在程序执行后不能改变。常量总是静态的,但不允许使用static进行修饰。例如:
const int a=10;
const double pi=3.1415926;
a=6;错误
static int b=13;错误
之所以定义常量,是因为在程序中可能多处需要某一个数,例如银行利率或圆周率等。如果总是写3.1415926很麻烦,所以在程序前面定义一个pi来代替3.1415926,如果需要修改,只改动这一行就可以了,例如改为const pi=3.14,程序的其他部分不动。这与变量很相似,但常量不能在运行时修改,变量在运行后是可以修改的。既然变量也可以做到与常量一样的事情,为啥还要定义常量呢?这主要是因为常量比变量效率高得多。3.1.4数据类型转换数据类型转换可分为隐式转换和显式转换,显式转换也称强制转换。在从取值范围小的类型转换到取值大的类型时采用隐式转换。例如:
int a=3;
double b=a;int 隐式转换为 double
强制转换的运算格式为:
类型变量
例如:
double a=3;
int b=int a;将double型转换为int型,需要强制转换
double c=2.6;
int d=int c;d的结果为2
由于double的取值范围比int大得多,要进行转换必须采用强制转换。此时需要考虑是否超出范围以及损失精度的问题。例如:
int a = 40000;a的值超过了short的取值范围32767
short b=shorta;b的值为-13035
这样的程序能通过编译,不报错,但结果却非常奇怪,居然变成了负数。这是因为int是32位的,而short是16位的。a的32位二进制如下:
强制转换为b后,由于b是short型,只有16位,因此b只截取了后16位,前16位扔掉了,如下:
1100110100010101
首位是1相当于负号,这是二进制的补码表示,结果就变成了-13035了。关于补码是怎样表示负数的,请读者查阅相关资料。这个过程相当于把100千克的桔子装入到只能装1千克桔子的塑料袋中,必然要有很多桔子散落在外面。3.2运算符C#的运算符主要有算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符等,这些运算符都连接操作数形成表达式。3.2.1算术运算符四则运算加、减、乘、除对应的符号是 、-、*、。在C#中还有几个运算符如表33所示。
表33算术运算符
运算符含义示例
%取模3%2,x%y自加1x,x--自减1x--,--x
1. 除法对于四则运算需要注意的是,当两个整数相除,结果还是整数,但如果有一个数是double型的,结果为double型,如:
72结果为3
72.0结果为3.5
2. %取模取模就是求余数,如:
7%2结果为1
6%2结果为0
7%2.0结果为1
3. 和--该运算符会让人感到迷惑。可以这样记忆:a使用前 1,a使用后 1那什么是使用前,使用后呢?C#代码都是以分号;结束的,在一个表达式内出现a或a时,就叫使用前,在;之后就叫使用后。按照上面的口诀记忆。在;之后,a的值相同,即都 1。例如:
int a=5;
int b=a*2;b的值为10,其中 a原来是5在这句里仍旧是5不 1,
int c=a;c的值为6,a使用后 1
、--运算符是一元运算符,它的优先级比四则运算级别高,因此先计算a然后计算a*2,由于在a后面,所以在本表达式中a的值仍为5,所以b为10,使用之后a自加1,a的值为6。下面是a的结果:
int a=5;
int b=a*2;b的值为12
int c=a;c的值为6
、--运算符为C编程语言独有的一种运算方法,就是对变量进行 1或-1,a在结果上等价于a=a 1;但在效率上a更高效。3.2.2关系运算符关系运算符用来比较两个操作数,运算结果为bool类型,如表34所示。
表34关系运算符
运算符说明运算符说明
大于=大于等于3;a的值是false
3.2.3逻辑运算符逻辑运算符的操作数是两个bool值,结果也是bool值,如表35所示。
表35逻辑运算符
运算符说明运算符说明
&与^异或|或&&短路与!非‖短路或
其中&、|、!、^遵循布尔运算操作规律。异或^不太好理解,可以这样记忆: 不同为真,相同为假。例如:
bool a=12^32; 两个操作数分别为true和false,则异或后a结果为true
bool a=32^32 ;a的结果为false
&&、‖两个运算符,如果只计算第一个操作数就能得到结果,就不进行后一个操作数的计算,更高效,所以称为短路与、短路或。例如:
bool a=12&32分别计算12为false,32为true,b的结果为false
采用短路与的形式如下:
bool a=12&&32 计算12为fase,就已经能得到最终结果,不计算32
但如果是下面的代码:
bool a=32&&12 计算32为true,这时不能得到结果,还要计算12为false,才能得到最终结果false
3.2.4位运算符位运算符如表36所示。
表36位运算符
运算符说明示例(用二进制说明)
&按位与11&10结果为10|按位或11&10结果为11~按位反~10结果为01^按位异或11^10结果为01右移10112,右移2位左侧补0结果为0010: 右移动1位,如果右侧的0足够多,相当于将数除以2。例如:
int a=2&3;a的结果是2
int a=2|3;a的结果是3
int a=41a的结果是2
3.2.5赋值运算符=为赋值运算符,我们已经很熟悉了。在C#中还有几个复合赋值运算符,如x =6,它的意思是x=x 6,这看上去很奇怪,不好理解,但这样写程序代码执行效率高。类似的赋值运算符有-=、*=、=、&=、|=、^=、=、0?1:0;y的结果为1
首先判断x0是否正确,如果正确该值为1,不正确该值为0。恰当运用三目运算符可以大大减少程序代码,否则需要大量的if else等语句。3.2.7运算符的优先级运算符具有优先级,如表37所示。运算符从高到低排序。如:
int a=1 2*3;结果为7
复杂的表达式尽量用改变表达式的优先级,这样层次更清晰。如:
int b=1 2*3; 结果为9
表37运算符的优先级
运算符从高到低排序
一元后缀--一元前缀---!~二元* %二元 -移位关系=相等和不等==!=逻辑与&逻辑异或^逻辑或|短路与&&短路或‖三元?:赋值=*== =-==&=^=!=
3.3选 择 语 句C#中的选择语句主要有两种,分别是if语句和switch语句。3.3.1if语句if语句的几种结构如下:
if ...
{

}if ...
{

}
else
{

}if ...
{

}
else if ...
{

}
else
{

}
其中if中的条件必须为bool型,这与C语言有很大不同,C语言认为条件不为0即为真。如下面的语句在C语言中正常,而在C#中则是错误的,原因是if条件必须是布尔型。
int x = 10;
if x此句C语言正确,C#错误
{
}
如果只有一行语句,可以省略大括号{},如下面的语句:
int x=2;int y;
if x0
{
y=2*x;
}
else
{
y=-x;
}
可以写成:
int x=2;int y;
if x0
y=2*x;
else
y=-x;
例31从键盘输入一个成绩,判断是否为及格。程序如下:
using System;
class A
{
static void Main
{
string a = Console.ReadLine;从键盘读入一个字符串
int b = int.Parsea;将字符串转换成整数
if b = 60
{
Console.WriteLine"及格";
}
else
{
Console.WriteLine"不及格";
}
Console.ReadLine;
}
}
运行结果如下:
35
不及格
3.3.2switch语句switch语句是一个多分支语句,可以用if语句实现同样的功能,但if语句过多会使程序看起来很乱,使用switch层次会更清晰。例32从键盘输入一个成绩,判断其优、良、中、及格、不及格。代码如下:
using System;
class A
{
static void Main
{
string a = Console.ReadLine;
int b = int.Parsea;
switch b 10
{
case 10:
Console.WriteLine"优";
break;
case 9:
Console.WriteLine"优";
break;
case 8:
Console.WriteLine"良";
break;
case 7:
Console.WriteLine"中";
break;
case6:
Console.WriteLine"及格";
break;
default:其他情况
Console.WriteLine"不及格";
break;
}
Console.ReadLine;
}
}
使用Switch语句要注意以下几个问题:(1)switch表达式中表达式必须是数值,字符串,枚举等类型如int、double、string等。(2)case中的表达式必须与switch 中的类型一致。(3)不能贯穿。CC等语言中都有一个问题,就是第一个case语句执行完,不退出switch,接着执行下一个case,这显然很糟糕,如要退出需要加break。C#避免了这种情况,每个case块都要加break,否则程序不能编译。(4)但有一种情况例外,可以贯穿,例如程序中case 10和case 9,成绩都是优,就没有必要写两遍。可以改成如下形式,注意case 10和case 9并列执行同一代码块。case 10中没有代码块,也没有break。
switch b 10
{
case 10:
case 9:
Console.WriteLine"优";
break;
case 8:

}
3.4循环C#提供了4种循环语句: while、do while、for和foreach。3.4.1whilewhile语句的格式如下:
while 条件
{

}
如果循环体只有一行语句,可以省略{ }。例33试计算1 2 3 100。
using System;
class A
{
static void Main
{
int i = 1;
int s = 0;
while i = 60
{
Console.WriteLine"及格";
}
else
{
Console.WriteLine"不及格";
}
}
}
}
程序中加了while循环,注意条件是true,这样的条件永远成立,将会是一个死循环。必须采用某种机制使其退出。程序中加粗的代码的意思是: 在键盘上输入game over则退出循环。运行结果如下:
30
不及格
62
及格
87
及格
game over
3.5异常计算机程序运行后不可避免地会出现异常,如除数为0、对象不存在、类型转换错误等,要使程序在出现错误时不崩溃,需要采用异常捕获机制。3.5.1try catch语句可以采用try catch语句捕获运行中的异常,其语法格式如下:
try
{
...可能有错误的代码段
}
catch
{
...错误处理
}
finally
{
...不管是否有错误都执行的代码段
}
其中finally部分可以省略。catch段的代码还可以捕获错误的具体信息,如下:
try
{
int x = 0;
int a = 1 x;
}
catchException exp
{
Console.WriteLineexp.ToString;
}
运行结果如下:
System.DivideByZeroException:尝试除以零。
捕获异常在程序编写中经常使用,有了该语句,应用程序就不会莫名其妙地死机。3.5.2throw语句本来没有异常的程序,可以人为制造异常,采用throw语句,代码如下:
try
{
for int i = 0; i

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.