第02章C语法基础_第1页
第02章C语法基础_第2页
第02章C语法基础_第3页
第02章C语法基础_第4页
第02章C语法基础_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第2章 C#语法基础 要进行C#程序设计必须了解C#程序结构、语法规则、数据类型和表达式。本章介绍这些方面的内容。2.1 C#程序结构 C#的程序结构是指构成应用程序的很必要元素。包括程序的组成要素、语法规则及书写格式等。2.1.1 C#程序的组成要素 在第1章,曾经介绍了C#控制台应用程序的创建过程,这个程序虽然非常简单,但是麻雀虽小,五脏俱全,通过这个程序可以了解C#程序构成要素。下面是这个程序的完整代码:using System;namespace 控制台程序01class Class1static void Main(string args)/ TODO: 在此处添加代码以启动应用程序

2、/Console.WriteLine(世界,你好!);Console.ReadLine(); 分析这个程序,可以看出C#程序命名空间、类和方法、语句和大括号等组成要素。1. 关键字 在C#代码中常常使用关键字,关键字也叫保留字,是对C#有特定意义的字符串。关键字在Visual Studio.NET环境的代码视图中默认以蓝色显示。2. 命名空间 命名空间既是Visual Studio.NET提供系统资源的分层组织方式,也是分层组织程序的方式。因此,命名空间有两种,一种是系统命名空间,一种是用户自定义命名空间。 系统命名空间是Visual Studio.NET平台提供的系统预定义的基础数据类型和类

3、(包括方法成员)类型资源,以供用户程序设计时使用。 系统命名空间使用using关键字导入,上述程序代码中的System就是Visual Studio.NET中的最基本的命名空间,该命名空间提供了对构建应用程序时所需要的所有系统功能的使用,代码中的“Console.WriteLine”与“Console.ReadLine”就是该命名空间提供的控制台类的行输出输入方法。所以在创建项目时,Visual Studio.NET平台都会自动生成导入该命名空间的代码,并且放在程序的第一行。 用户自定义命名空间使用namespace关键字声明,上述程序中的“控制台应用程序01”就是用户自定义命名空间。 在C#

4、中,命名空间的声明允许嵌套,即在命名空间中允许声明其他的命名空间。 命名空间的导入在程序中并不是必须的,例如,在上述程序中可以不使用“using System;”语句导入“System”命名空间,但是,如果这样做的话,在使用“System”提供的类的方法时,就必须指明其所属的命名空间。所以如果不导入“System”命名空间,那么使用控制台类的行输出输入方法的代码就应该是“System.Console.WriteLine”与“System.Console. ReadLine”。 命名空间的声明也不是必须的,例如在上述程序,可以不声明“控制台应用程序01”这一用户自定义命名空间。如果这样,程序代码

5、如下:using System;class Class1static void Main(string args)/ TODO: 在此处添加代码以启动应用程序/Console.WriteLine(世界,你好!);Console.ReadLine(); 这时,程序照样可以正常运行,但是在实际的程序开发过程中,一个程序往往是由许多模块组成,使用命名空间有利于程序组织与管理。 所以使用命名空间是一种良好的编程习惯。3. 类和方法 在C#中,必须用类来组织程序的变量与方法,上述程序就定义了一个名为“Class1”的类。 在类“Class1”中声明了一个名为“Main”的方法。“Main”方法用来指示应

6、用程序从该处开始,并实现类“Class1”的特定功能。C#要求每个程序必须且只能有一个“Main”方法,缺少“Main”方法或“Main”方法多于一个,都将产生错误。“Main”方法必须放在某一个类中。“Main”方法是应用程序的入口。 有关类与方法的详细内容,将在第4章和第5章中介绍。4. 语句 语句就是C#应用程序中执行操作的指令。C#中的语句必须用分号“;”结束。可以在一行中书写多条语句,也可以将一条语句书写在多行上。 当语句中包含不同层次的内容时,C#用点“.”操作符表示所属关系。例如,上述内容中的语句“System.Console.WriteLine”包含三个层次。“System”表

7、示一个命名空间,“Console”表示该命名空间中的一个类,“WriteLine”表示该类中的一个方法。实际上这种表示方法与现实生活中对事物所属关系的表示是一样的,例如,“张三的房间中的桌子”就包含了三个层次的所属关系。因此,可以把“.”操作符理解为现代汉语中表示所属关系的“的”。5. 大括号 在C#中,在括号“”和“” 是一种范围标志,是组织代码的一种方式,用于标识应用程序中逻辑上有紧密联系的一段代码开始与结束。 大括号可以嵌套,以表示应用程序中的不同层次,例如,在上述程序中命名空间“控制台应用程序01”下的大括号标识该命名空间的代码范围,类“class1”下的大括号标识该的代码范围,方法“

8、Main”下的大括号,标识该方法的范围,并且,类“class1”包含在“控制台应用程序01”中,“Main”方法又包含在类“class1”中。2.2.2 C#程序的格式 C#应用程序中的代码应按照一定的格式书写,代码格式有两类,一类属于C#的语法规则,这一类格式必须遵守;还有一类属于结构格式,这在程序设计中不是必须的,但统一结构格式的书写方法有助于使代码层次清晰,从而提高程序的可读性,是一种良好的编程习惯。1. 缩进与空格 缩进用于表示代码的结构层次,这在程序中不是必须的,但是缩进可以清晰地表示程序的结构层次,在程序设计中应该使用统一的缩进格式书写代码。例如,在上述程序中,命名空间及标识其范围

9、的一对大括号顶格书写,命名空间中的类及标识其范围的一对大括号向内缩进一个制表位,类中的方法及标识其范围的一对大括号向内缩进两个制表位,方法中的语句向内缩进三个制表位。这样就清晰地表示出该程序的结构。 空格有两种作用,一种是语法要求,必须遵守,一种是为使语句不至于太拥挤。例如声明并初始化一个变量的语句:int ia = 3; 其中类型“int”与变量名“ia”之间的空格是语法要求,此处若无空格将产生错误;而变量名“ia”与赋值运算符“=”、赋值运算符“=”与“3”之间的空格则是为了使语句看起来舒展,不是必须的。2. 字母大小写 C#中的字母可以大小写混合,但是必须注意的是,C#把同一字母的大小写

10、当作两个不同的字符对待,如,大写“A”与小写“a”对C#来说,是两个不同的字符。在上述程序中“Main”是大小写混合的,如果把“Main”写成了“main”,C#会认为是另一个名称。3. 注释 代码中的注释起对代码的解释说明作用,在将程序进行编译时,将跳过程序的注释部分,所以注释不是必须的。但是,在现代程序设计中,程序的可读性的地位越来越重要,在程序中添加注释,不仅有利于编程者对程序阅读与维护,也能是别人更好地阅读程序。所以,使用注释在程序设计中是必不可少的。 C#中的注释基本有两种,一是单行注释,一是多行注释。 单行注释以双斜线“/”开始,不能换行。例如上述程序中的“/ TODO: 在此处添

11、加代码以启动应用程序”就是一个单击注释。 多行注释以“/*”开始,以“*/”结束,可以换行。例如/*这是一个控制台程序*/ 多行注释不允许嵌套,否则将出错。 单行注释与多行注释均可以从行首或行尾开始。2.2 基本数据类型 在程序设计中,难免要对数据进行处理,而数据又有不同的种类,如整数、小数、单个字符、多个字符、真假等等,这些种类不同的数据就叫数据类型。 程序在处理数据时,需要对数据进行临时保存,而保存不同类型的数据所用的存储空间是不同的,所以了解各种数据类型及其使用是学习编程必须的。 基本数据类型是系统预定义的数据类型,也叫内置数据类型。 从数据的性质看,数据可以分为四类,即数值型数据、字符

12、型数据、逻辑型数据和对象型数据。2.2.1 数值类型 数值类型有整数类型与实数类型两种,整数类型的数据不带小数,实数类型带小数。1. 整数类型 整数类型又有有符号整数与无符号整数。有符号整数可以带正负号,无符号整数不需带正负号,默认为正数。 有符号整数包括sbyte(符号字节型)、short(短整型)、int(整型)、long(长整型)。 无符号整数包括byte(字节型)、ushort(无符号短整型)、uint(无符号整型)、ulong(无符号长整型)。 byte(字节型):数据范围是0255之间的整数,占用1个字节; sbyte(有符号字节型):数据范围是-128127之间的整数,占用1个字

13、节; short(短整型):数据范围是-3276832767之间的整数,占用2个字节; ushor(无符号短整型):数据范围是065535之间的整数,占用2个字节; int(整型):数据范围是-之间的整数,占用4个字节; uint(无符号整型):数据范围是0之间的整数,占用4个字节; long(长整型):数据范围是-之间的整数,占用8个字节; ulong(无符号长整型):数据范围是0之间的整数,占用8个字节。 不同的整数类型表示的数值范围不同,为编程中根据对整数范围的需要进行灵活选择提供了方便。2. 实数类型 实数类型包括float(单精度浮点型)、double(双精度浮点型)、decimal

14、(十进制型)。 float(单精度浮点型):数据范围是1.510453.41038之间的数,占用4个字节; double(双精度型浮点型):数据范围是5.0103241.710308之间的数,占用8个字节 decimal(十进制型):数据范围是1.010-287.91028之间的数,占用12个字节。 float(单精度浮点型)可表示精度为7位;double(双精度浮点型)可表示精度为15位或16位;decimal(十进制型)可以表示具有28或29个有效数字,decimal适合财务和货币计算。2.2.2 字符类型 字符型数据包括单个字符类型与多个字符(字符串)类型。1. Unicode字符集 U

15、nicode是一种重要的通用字符编码标准,它覆盖了美国、欧洲、中东、非洲、印度、亚洲和太平洋的语言,以及古文和专业符号。Unicode允许交换、处理和显示多语言文本以及公用的专业和数学符号。 Unicode字符可以适用于所有已知的编码。Unicode是继ASCII(美国国家交互信息标准编码)字符码后的一种新字符编码,如UTF-16允许用16位字符组合为一百万或更多的字符。 C#支持Unicode字符集。2. char(字符型) char(字符型):数据范围是065535之间的Unicode字符集中的单个字符,占用2个字节。 char(字符型)表示无符号16位整数,char(字符型)的可能值集与

16、Unicode字符集相对应。虽然char(字符型)的表示形式与ushort(短整型)相同,但ushort(短整型)与char(字符型)意义不同,ushort(短整型)代表的是数值本身,而char(字符型)代表的则是一个字符。3. string(字符串型) string(字符串型):指任意长度的Unicode字符序列,占用字节根据字符多少而定。 string(字符串型)表示包括数字与空格在内的若干个字符序列,允许只包含一个字符字符串,甚至可以是不包含字符的空字符串。2.2.3 布尔类型和对象类型 bool(布尔型):表示布尔逻辑量。bool(布尔型)数据范围是“true”(真)和“false”(

17、假)。bool(布尔型)占用一个字节。bool(布尔型)的值“true”(真)和“false”是关键字。 bool(布尔型)数据为程序进行复杂的判断提供了数据类型依据,另外在程序进行关系运算或逻辑运算时,将产生bool(布尔型)结果。 object(对象型):可以表示任何类型的值,其占用字节视具体表示的数据类型而定。 object(对象型)是所有其他类型的最终基类。C# 中的每种类型都是直接或间接从object类类型派生的。2.3 变量与常量 程序在处理数据时,必须将数据保存在计算机的内存中,保存在内存中的数据从可变性看,分为变量和常量两种。2.3.1 变量 变量是在程序运行过程中,其值可以改

18、变的数据。变量总是和变量名联系在一起的,所以要使用变量,必须为变量命名。在C#中,命名变量的过程叫声明,且规定,变量必须先声明后使用,事实上,在C#中所有的名称都必须先声明后使用,包括常量名、方法名、类名、对象名等等,这些名称包括变量名统称为标识符。1. 变量命名规则 在C#中,变量命名规则如下: (1) 变量名的第一个字符必须是字母(包括汉字)或下划线,其余字符必须是字母(包括汉字)、数字或下划线。 (2) 变量名不能是C#的关键字或库函数名。(3)(4)(5) 例如,下面的变量名: intSum,求和,_S,refType等是合法变量名,而int,2A,Number Of Student等

19、是非法变量名。 为变量命名最好有意义,可以提高程序的可读性。2. 声明变量 声明变量就是把存放数据的类型告诉程序,以便为变量安排内存空间。变量的数据类型可以对应所有基本数据类型。声明变量最简单的格式为: 数据类型名称 变量名列表; 例如:int intNumber; /声明一个整型变量bool boolOpen; /声明一个布尔型变量decimal decimalBankBlance; /声明一个十进制变量 可以一次声明多个变量,例如:sbyte sbyteA, sbyteB; /声明两个有符号字节型变量 如果一次声明多个变量,变量名之间用逗号分隔。3. 变量赋值 C#规定,变量必须赋值后才能

20、引用。为变量赋值需使用赋值号“=”。例如:int intNumber; intNumber=32; /为变量赋值32bool boolOpen; boolOpen=true; /为变量赋值true 也可以使用变量为变量赋值。例如:bool boolClose; boolClose=boolOpen; /为变量赋值true 可以为几个变量一同赋值int intA,intB,intC;intA=intB=intC=32; 可以在声明变量的同时为变量赋值,相当于将声明语句与赋值语句合二为一。例如:double doubleArea, doubleRadius=16; 在上述语句中声明了两个双精度变量

21、,其中“doubleRadius”在声明的同时为其赋值“16”。4. 5. 2.3.2 常量 常量是在程序运行过程中,其值保持不变的量。常量的数据类型可以对应大多数基本数据类型。常量有直接常量与符号常量两种。1. 直接常量 直接常量即数据值本身。 (1) 整型常量 整型常量即整数,整型常量有三种形式: 十进制形式,即通常意义上的整数,如,123,48910等; 八进制形式,输入八进制整型常量,需要在数字前面加“0”,如,0123,038等; 十六进制形式,输入十六进制整型常量,需要在数字前面加“0x”或“0X”,如,0x123,0X48910等。 三种进制的整型常量,均可以带正负号,如:-12

22、3,-0123,-0X123等。 如果想使整型常量为长整型(long)常量,可以在数字后跟小写字母“l”或大写字母“L”,由于小写字母“l”容易和数字“1”混淆,C#会提示推荐使用大写字母“L”。如,123L,表示该常量是一个长整型。 (2) 实型常量 实型常量即带小数的数值,实型常量有两种表示形式: 小数形式,即人们通常的书写形式,如0.123,12.3,.123等等。 指数形式,也叫科学记数,由底数加大写的E或小写的e加指数组成,如,123e5或123E5都表示123105。 实型常量默认为双精度(double)型,如,123.5默认为double型常量。可以显式指出实型常量是单精度(fl

23、oat)型,还是双精度(double)型,或者是十进制(decimal)型,如,123.5f或123.5F为单精度型,123.5d或123.5D为双精度型,1235.m或123.5M为十进制型。 八进制与十六进制没有小数形式。 (3) 字符常量 字符常量表示单个的Unicode字符集中的一个字符,通常包括数字、各种字母、标点、符号和汉字等。 字符常量用一对英文单引号界定,如,A,a,+,汉等等。 在C#中,有些字符不能直接放在单引号中作为字符常量,这时需要使用转义符来表示这些字符常量,转义符由反斜杠“”加字符组成。常见的转义符如表2-1所示。表2-1 转义符字符形式字符意义单引号双引号反斜杠0

24、空字符a警报符b退格符f换页符n换行符r回车符。t横向跳格符v垂直跳格符 例如,要表示一个单引号常量,需写成:。 (4) 字符串常量 字符串常量是由一对双引号界定的字符序列,例如:世界,你好!I am a student.How do you do?hello 都是字符串常量。需要注意的是,即使由双引号界定的一个字符,也是字符串常量,不能当做字符常量看待,例如,A与A,前者是字符常量,后者是字符串常量。如果试图将一个字符串常量赋值给一个字符变量,系统在编译代码时将报错。例如:char ca=A; /无法将类型“string”隐式转换为“char” (5) 布尔常量 布尔常量即布尔值本身,如前所

25、述,布尔值true(真)和false(假)是C#的两个关键字。2. 符号常量 符号常量使用const关键字定义,格式为: const 类型名称 常量名=常量表达式; 常量定义中,“常量表达式”的意义在于该表达式不能包含变量及函数等值会发生变化的内容。常量表达式中可以包含其他已定义常量。例如:const int intMax=10; /合法int intNum=10;const double Pi=3.; /合法const double doubleMaxArea01=Pi*intMax*intMax; /合法,表达式包含两个已定义常量const double doubleMaxArea=Pi*

26、intNum*intNum; /不合法,表达式中包含变量。 由于符号常量代表的是一个不变的值,所以符号常量不能出现在赋值号的左边,因为这样意味着为符号常量赋值,即修改符号常量的值。 如果在程序中非常频繁地使用某一常量,可以将其定义为符号常量。定义符号常量的好处在于:可以提高代码输入效率,例如,输入符号常量Pi,比直接输入值节省时间;可以减少输入错误,例如,输入符号常量Pi出现错误的几率远远低于输入值;更重要的是,由于C#规定标识符必须先声明后使用,所以常量名一旦输入错误,在程序运行前的编译阶段即可检查出来,从而避免了输入错误而导致的意外数据运算结果,而如果输入直接常量出现错误,程序的编译是检查

27、不出来的。2.3.3 类型转换 在程序处理数据的过程中,经常需要将一种数据类型转换为另一种数据类型。事实上,在C#中,对两种不同类型数据操作时,要求将其转换为统一的数据类型。 数据类型的转换有隐式转换与显式转换两种。1. 隐式转换 隐式转换是系统自动执行的数据类型转换。隐式转换的基本原则是允许数值范围小的类型向数值范围大的类型转换,允许无符号整数类型向有符号整数类型转换。例如:int x=; /int类型为四字节整数long y=x; /将x的值读取出来,隐式转换为long类型后,赋给长整型变量yuint a=; /无符号整型变量long b=a; /将a的值读取出来,隐式式为有符号的长整型后

28、,赋给长整型变量b C#允许将char(字符)类型的数据隐式转换为数值范围在短整型(含短整型)以上的数值类型。例如:char Letter=A; /字符型变量Letter的值为大写字母“A”int Num=32+Letter; /读取Letter的值,隐式转换为整数65,与32相加后的结果赋给Num 之所以允许将字符型数据隐式转换为整数,是因为char类型的数据在内存中保存的实质是整型数据,只是从意义上代表的是Unicode字符集中的一个字符。2. 显式转换 显式转换也叫强制转换,是在代码中明确指示将某一类型的数据转换为另一种类型。显式转换的一般格式为: (数据类型名称)数据 例如:int x

29、=600;short z=(short)x; 将变量x中的值显示转换为short类型,赋值后,变量z的值为600。 显式转换中可能导致数据的丢失,例如:decimal d=234.55M;int x=(int)d; 将变量d的值显式转换为整型,结果小数部分被截去,x的值为234。2.4 自定义数据类型 在数据处理过程,常常需要将一组类型不同,但内容相关,或者将数据类型一致,取值范围有限的一组相关数据。这时,使用基本数据类型当然是可以处理的,但是处理起来很麻烦,有时甚至有困难。例如,一个人事记录可能会包括姓名、编号、工资、电话、住址等数据,表示三原色红、绿、蓝的数据。这时可以使用自定义的数据类型

30、。 自定义的数据类型包括结构与枚举。2.4.1 结构类型 结构类型可以用来处理一组类型不同内容相关的的数据。1. 定义结构 结构的定义需要使用struct关键字,定义格式如下: struct ; ; . “结构类型名称”表示用户定义的新数据类型名称,可以像基本数据类型名称一样用来定义变量。一对大括号之间定义结构成员。 “结构成员名称”可以是基本数据类型,也可以另一个已定义结构类型。例如:struct dateuint year, month,day ;struct employeestring name;bool sex;date birthday;string phone;decimal p

31、ay; 上述例子中,首先是一个日期类型的结构,该结构包含年、月、日三个结构成员。然后定义一个职工类型的结构,该结构除了包含姓名、性别、电话和工资等基本类型结构成员外,还包含了一个前面定义的日期类型的结构成员。2. 声明结构变量 定义结构后,一个新的数据类型就产生了,可以像使用基本数据类型那样,用结构来声明变量。例如:employee tom; /声明一个结构变量tom 也可以在声明结构变量的同时,为结构变量赋值,为结构变量赋值实质上是为结构变量中的成员赋值,但由于结构变量常常包含不止一个结构成员,所以在声明时为结构变量赋值需要使用大括号,各项值之间用逗号分隔。例如:employee tom=汤

32、姆,true,1980,5,26,1500; 由于employee中包含有另一结构日期,所以该成员的值也需要使用一对大括号。3. 访问结构变量 一般对结构变量的访问都转化为对结构中的成员的访问,由于结构中的成员都依赖于一个结构变量,因此使用结构中的成员必须指出访问的结构变量。方法是在结构变量和成员之间通过运算符“”连接在一起。即 .例如:=汤姆;tom.sex=true;tom.birthday.year=1980;tom.birthday.month=5;tom.birthday.day=26;tom.phone=;tom.pay=1500; 可以用一个结构变量为另一个结构变

33、量赋值,例如:employee jerui;jerui=tom; /用结构变量tom为结构变量jerui赋值2.4.2 枚举类型 枚举类型是由用户定义的一组整型符号常量。使用枚举可以将一组相关的有限常量组织在一起,保证变量只能具有预定的值;由于常量都有名称,易于辨认,从而提高了程序的可读性;可以使用Visual Studio.NET提供的智能感知选择这些常量,避免输入错误。1. 定义枚举类型 定义枚举类型使用关键字enum,定义枚举类型的一般格式为: enum 枚举类型名称 符号常量1, 符号常量2, 枚举类型的成员均为符号常量,常量名之间用逗号分隔。例如:enum SolarSystemSu

34、n,Earth,Moon 上例定义了一个新的枚举类型“SolarSystem”,可以用该类型声明变量。 枚举常量成员的默认值为0、1、2,可以在定义枚举类型时为成员赋予特定的整数值,例如enum SolarSystemSun=, /太阳半径Earth=6380, /地球赤道半径Moon=1740 /月亮半径2. 声明与访问枚举变量 声明枚举变量与声明基本类型变量的格式相同,例如:SolarSystem S; /声明一个枚举变量S 可以在声明枚举变量的同时为变量赋值,枚举变量的值,必须是枚举成员,枚举成员需要用枚举类型引导,例如:SolarSystem S= SolarSystem.Sun; /

35、为枚举变量S赋值Sun 对枚举变量的访问同基本类型变量,例如:SolarSystem S= SolarSystem.Sun;int Num=S; /将S的值赋给整型变量Num2.5 运算符与表达式 运算符用于对操作数进行特定的运算。 表达式是由运算符和操作数组成的式子。最简单的表达式是常量和变量。 根据运算符运算操作数的多少,运算符可以分为一元运算符、二元运算符与三元运算符。2.5.1 运算符与表达式类型 根据表达式中使用运算符类型的不同,把表达式分为不同类型的表达式。1. 算术运算符与算术表达式 算术运算符有一元运算符与二元运算符。 () 一元运算符:-(取负)、+(取正)、+(增量)、-(

36、减量)。 () 二元运算符:+(加)、-(减)、*(乘)、/(除)、%(求余)。 由算术运算符与操作数构成的表达式叫算术表达式。 一元运算符作用于一个操作数,其中“-”与“+”只能放在操作数的左边,表示操作数为负或为正。 增量与减量量符只能用于变量,不能用于常量。增量与减量运算符既可以放在操作数的左边,也可以放在操作数的右边,表示操作数增1或减1,但是放在左边或右边的意义不同,放在左边表示先增量或减量,后进行其他运算,放在右边表示先进行其他运算,后增量或减量。例如:int x=10,y;y=+x; /先增量,再赋值,x的值为11,y的值为11x=5;y=x-; /先赋值,再减量,x的值为4,y

37、的值为5 二元运算符的意义与数学意义相同,其中%(求余)运算符是以除法的余数作为运算结果,求余运算也叫求模。例如:int x=6,y=2,z;z=x%y; /x除以y的结果不是3(商),而是0(余数) 在C#中,%(求余)运算符不仅支持整型数值的运算,也支持实型数值的运算。如,5%1.5的结果为0.5。 在使用算术表达式时,要注意数据类型。例如:int a,b=39;a=b/2; /a的值为18 由于相除的两个数都是整型,结果也是整型,小数部分被截去。即使被赋值的是实型变量,两个整型数相除,也不会保留相除结果的小数部分。例如:double x;int a=37,b=4;x=a/b; /x的值是

38、9.0而不量9.25 这是因为a和b都是整型,所以运算的结果只能是整型,这个整型结果在赋给双精度变量x时,才被隐式转换为双精度型,因此x的值自然是9.0而不是9.25。两个整型数相除如果想保留住小数,必须进行显示转换。例如double x;int a=37,b=4;x=(double)a/b; /x的值是9.25 由于a被强制转换为双精度型,则b在运算前也被隐式转换为双精度型(向数值范围宽的类型转换),运算的结果自然也是双精度型。2. 字符串运算符与字符串表达式 字符串运算符只有一个,即“+”运算符,表示将两个字符串连接起来。例如:string sConnec=abcd+ef; /sConne

39、c的值为“abcdef” “+”运算符还可以将字符型数据与字符串型数据或多个字符型数据连接在一起,例如:string sConnec=abcd+e+f; /sConnec的值为“abcdef”3. 关系运算符与关系表达式 关系运算符用于对两个操作数进行比较,判断关系是否成立,若成立则结果为true,否则为false,即关系运算符的运算结果为布尔型。关系运算符都是二元运算符。 关系运算符共有如下六种: ,=,b; /iResult的值为truecResult=cacb; / cResult的值为falsesResult=sa=sb; / sResult的值为false 需要说明的是,在进行字符或

40、字符串比较时,实际上比较的是字符的Unicode值。 上例中两个字符变量的比较,由于“A”的Unicode值小于“B”的Unicode值,所以ab的关系不成立,运算的结果为false(假)。 字符串的比较与字符比较道理相同,相等运算要求两个字符串的个数与相应位置上的字符完全相同运算结果为true,否则运算结果为false;不等运算要求两个字符串个数不等或者对应位置上的字符至少有一对不等,运算结果为true,否则为false。4. 逻辑运算符与逻辑表达式 逻辑运算符的操作数是布尔类型,运算结果与是布尔类型。在C#中,最常用的逻辑运算符是!(非)、&与、|(或)。 非运算是一元运算符,是求原布尔值

41、相反值的运算,如果原值为真,非运算的结果为假,否则为真。 与运算是求两个布尔值都为真的运算,当两个布尔值都为真时,运算结果为真,即所谓同真为真。 或运算是求两个布尔值中至少有一个为真的运算,当两个布尔值中至少有一个为真时运算结果为真,只有在两个布尔值均为假时,运算结果才为假,即所谓同假为假。 例如:bool b1=!true; /b1的值为falsebool b2=53&12; /b2的值为falsebool b3=53|12 /b3的值为true5. 条件运算符与条件表达式 条件运算符是C#中唯一的三元运算符,条件运算符由符号“?”与“:”组成,通过操作三个操作数完成运算,其一般格式为: 布

42、尔类型表达式?表达式1:表达式2 布尔类型表达式如关系表达式或逻辑表达式等。在条件表达式运算时,首先运算“布尔类型表达式”,如果为true,则运算结果为“表达式1”的值,如果为false,则运算结果为“表达式2”的值。例如:decimal amount=2000,balance=3850.55;decimal withdrawal=amount=balance?amount:0; / withdrawal的值为2000amount=5000;withdrawal=amounty?greater than:x=y?equal to:less than; /sResult的结果为equal to

43、上例中的条件表达式对照一般格式分析,其中布尔类型表达式为“xy”,表达式1为“greater than”,表达式2本身又是一个完整的条件表达式“(x=y?equal to:less than)”。通过嵌套,可以实现多分支的选择判断。6. 赋值运算符与赋值表达式 在赋值表达式中,赋值运算符左边的操作数叫左操作数,赋值运算符右边的操作数叫右操作数。左操作数通常是一个变量。 赋值运算符包括简单赋值运算符和复合赋值运算符。赋值运算符“=”是简单赋值运算符,简单赋值运算符与其他运算符结合在一起的赋值运算符是复合赋值运算符,如“*=”、“/=”、“%=”、“+=”、“-=”等。 复合赋值运算符的意义在于将

44、左操作数与右操作数进行“其他运算符”要求的运算,然后再将运算结果赋值给左操作数。例如,x+=y表示先执行x+y的运算,然后再将运算结果赋值给x,所以x+=y等效于x=x+y。 赋值运算也产生运算结果,其运算结果就是左操作数的值,所以赋值运算符可以在一个表达式中连续出现,例如,表达式x=y=42,表示先将42赋值给y,运算结果为y的值,再将运算结果赋值给x,最终运算结果为x的值。2.5.2 运算符的优先级与结合性 运算符的优先级与结合性本质上都是运算顺序问题,优先级是指当一个表达式中出现不同的运算符时,先进行何种运算。结合性是指,当一个表达式中出现两个以上的同级运算符时,是由左向右运算还是由右向左运算。1. 优先级 在上小节介绍的各种运算符,其优先级从高到低如表2-2所示表2-2 运算符的优先级类别运算符一元运算符+(取正) -(取负) !(非) +x(前增量) -x(前减量)乘除求余运算符* /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论