版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章c#语法基础要进行c#程序设计必须了解c#程序结构、语法规则、数据类型和表达式。本章介绍这 些方面的内容。2. 1 c#程序结构c#的程序结构是指构成应用程序的很必要元索。包括程序的组成要素、语法规则及书写 格式等。2c#程序的组成耍素在第1章,曾经介绍了 c#控制台应用程序的创建过程,这个程序虽然非常简单,但是麻 雀虽小,五脏俱全,通过这个程序可以了解c#程序构成要素。下面是这个程序的完整代码: using system;namespace控制台程序01class classistatic void main(string args)/todo:在此处添加代码以启动应用程序/conso
2、le.writeline("th:界,你好! ”);console.readline();分析这个程序,可以看出c#程序命名空间、类和方法、语句和人括号等组成要素。1. 关键字在c#代码中常常使用关键字,关键字也叫保留字,是对c#有特定意义的字符冷。关键 字在visual studio.net环境的代码视图小默认以蓝色显示。2. 命名空间命名空间既是visual studio.net提供系统资源的分层纟r织方式,也是分层组织程序的方 式。因此,命名空间有两种,一种是系统命名空间,一种是用户自定义命名空间。系统命名空间是visual studio.net平台提供的系统预定义的基础数据类
3、型和类(包括方法成员)类型资源,以供用户程序设计时使用。系统命名空间使用using关键字导入,上述程序代码中的system就是visual studio.net 屮的最基木的命名空间,该命名空间提供了对构建应用程序时所需要的所有系统功能的使用, 代码中的"console.writeline”与"console.rcadline”就是该命名空间提供的控制台类的行 输出输入方法。所以在创建项1=1时,visual studio.net平台都会自动生成导入该命名空间的 代码,并且放在程序的笫一行。用户自定义命名空间使用namespace关键字声明,上述程序中的“控制台应用程序01
4、” 就是用户自定义命名空间。在c#屮,命名空间的声明允许嵌套,即在命名空间屮允许声明其他的命名空间。命名空间的导入在程序屮并不是必须的,例如,在上述程序中可以不使用"using system;" 语句导入“system”命名空间,但是,如果这样做的话,在使用“system”捉供的类的方法 时,就必须指明其所属的命名空间。所以如果不导入“system”命名空间,那么使用控制台 类的行输出输入方法的代码就应该是u system.console.writeline ”与“ system.console. readline"。命名空间的声明也不是必须的,例如在上述程序,可
5、以不声明“控制台应用程序01”这 一-用户日定义命名空间。如果这样,程序代码如下:using system;class classistatic void main(string args)/todo:在此处添加代码以启动应用程序/console.writeline(”世界,你好! ”);consolc.rcadlinc();这时,程序照样可以正常运行,但是在实际的程序开发过程中,一个程序往往是由许多 模块组成,使用命名空间有利于程序组织与管理。所以使用命名空间是一种良好的编程习惯。3. 类和方法在c#中,必须用类來组织程序的变量与方法,上述程序就定义了一个名为“classi”的 类。在类“c
6、lassi”中声明了一个名为“main”的方法。“main”方法用來指示应用程序从该 处开始,并实现类“classi”的特定功能。c#要求每个程序必须且只能有一个“main”方法, 缺少“main”方法或“main”方法多于一个,都将产生错误。“main”方法必须放在某一个 类«|>0 "main”方法是应用程序的入口。有关类与方法的详细内容,将在第4章和第5章小介绍。4语句语句就是c#应用程序中执行操作的指令。c#中的语句必须用分号“;”结束。可以在一 行中书写多条语句,也可以将一条语句书写在多行上。当语句中包含不同层次的内容时,c#用点操作符表示所属关系。例如,上
7、述内容中 的语句“system.console.writclinc”包含三个层次。“system”表示一个命名空间,“console” 表示该命名空间中的一个类,“writeline”表示该类中的一个方法。实际上这种表示方法与 现实牛活中对事物所属关系的农示是一样的,例如,“张三的房间中的桌子”就包含了三个 层次的所属关系。因此,可以把操作符理解为现代汉语屮表示所属关系的“的”。5.大括号在c#中,在括号“”和“”是一种范围标志,是组织代码的一种方式,用于标识应 用程序中逻辑上有紧密联系的一段代码开始与结朿。大括号可以嵌套,以表示应用程序中的不同层次,例如,在上述程序中命名空间“控制 台应用程
8、序01”下的大括号标识该命名空间的代码范围,类“classl”卞的大括号标识该的 代码范围,方法“main”下的大括号,标识该方法的范围,并且,类“classl”包含在“控 制台应用程序01”中,“main”方法又包含在类“classl”中。2.2.2 c#程序的格式c#应用程序中的代码应按照一定的格式书写,代码格式有两类,一类属于c#的语法规 则,这一类格式必须遵守;还有一类属于结构格式,这在程序设计中不是必须的,但统一结 构格式的书写方法有助于使代码层次清晰,从而提高程序的可读性,是一种良好的编程习惯。1. 缩进与空格缩进用于表示代码的结构层次,这在程序中不是必须的,但是缩进可以清晰地表示
9、程序 的结构层次,在程序设计屮应该使用统一的缩进格式书写代码。例如,在上述程序屮,命名 空间及标识其范围的一对人括号顶格书写,命名空间屮的类及标识其范围的一对人括号向内 缩进一个制表位,类中的方法及标识其范围的一对大括号向内缩进两个制表位,方法中的语 句向内缩进三个制表位。这样就清晰地表示出该程序的结构。空格有两种作用,一种是语法要求,必须遵守,-种是为使语句不至于a拥挤。例如声 明并初始化一个变量的语句:int ia = 3;其中类型“int”与变量名“ia”之间的空格是语法要求,此处若无空格将产牛错课;而 变量名“ia”与赋值运算符“=”、赋值运算符与“3”之间的空格则是为了使语句看起 来
10、舒展,不是必须的。2. 字母大小写c#中的字母可以人小写混合,但是必须注意的是,c#把同一字母的人小写当作两个不同 的字符对待,如,大写“a”与小写“a”对c#来说,是两个不同的字符。在上述程序中“main” 是大小写混合的,如果把“main”写成了 “main”,c#会认为是另一个名称。3. 注释代码屮的注释起对代码的解释说明作川,在将程序进行编译时,将跳过程序的注释部分, 所以注释不是必须的。但是,在现代程序设计屮,程序的可读性的地位越來越重要,在程序 屮添加注释,不仅有利于编程者对程序阅读与维护,也能是别人更好地阅读程序。所以,使 用注释在程序设计中是必不可少的。c#中的注释基本有两种,
11、一是单行注释,一是多行注释。单行注释以双斜线“”开始,不能换行。例如上述程序中的“/todo:在此处添加代 码以启动应用程序”就是一个单击注释。多行注释以"/*”开始,以“*/”结束,可以换行。例如/*这是一个控制台程序审/多行注释不允许恢套,否则将出错。单行注轻与多行注释均可以从行首或行尾开始。2.2基本数据类型在程序设计屮,难免要对数据进行处理,而数据又有不同的种类,如整数、小数、单个 字符、多个字符、真假等等,这些种类不同的数据就叫数据类型。程序在处理数据时,需要对数据进行临时保存,而保存不同类型的数据所用的存储空间 是不同的,所以了解各种数据类型及其使用是学习编程必须的。基本
12、数据类型是系统预定义的数据类型,也叫内置数据类型。从数据的性质看,数据可以分为四类,即数值型数据、字符型数据、逻辑型数据和对象 型数据。221数值类型数值类型冇整数类型与实数类型两种,整数类型的数据不带小数,实数类型带小数。1. 整数类型整数类型又有有符号整数少无符号整数。有符号整数可以带止负号,无符号整数不需帯 正负号,默认为正数。有符号整数包括sbyte (符号字节型)、short (短整型)、int (整型)、long (长整型)。无符号整数包括byte (字节型)、ushort (无符号短整型)、uint (无符号密型)、ulong (无 符号长整型)。byte (字节型):数据范帼是
13、0255之间的整数,占用1个字节;sbyte (有符号字节型):数据范围是128127z间的整数,占用1个字节;short (fe:整型):数据范围是-3276832767 z间的整数,占用2个字节;ushor (无符号短整型):数据范围是065535之间的整数,占用2个字节;int (整型):数据范围是-21474836482147483647之间的整数,占用4个字节;uint (无符号整型):数据范围是04294967295之间的整数,占用4个字节;long (长整型):数据范围是-92233720368547758089223372036854775807 之间的整数,占用8个字节;ul
14、ong (无符号长整型):数据范围是018446744073709551615 z间的整数,占用8个 字节。不同的整数类型表示的数值范围不同,为编程屮根据对整数范围的需要进行灵活选择提 供了方便。2. 实数类型实数类型包括float (单精度浮点型)、double (双粹度浮点型)、decimal (十进制型)。 float (单精度浮点型):数据范围是1.5x10"45-3.4x1038之间的数,占用4个字节; double (双精度型浮点型):数据范围是5.0x10一琢i""。*之间的数,占用8个字节 decimal (十进制型):数据范围是1 .ox 10%
15、76沪之间的数,占用12个字节。float (单精度浮点型)可表示精度为7位;double (双精度浮点型)可表示精度为15位 或16位;decimal (十进制型)可以表示具冇28或29个冇效数字,decimal适合财务和货币 计算。2.2.2字符类型字符型数据包括单个字符类型与多个字符(字符串)类型。1. unicode字符集unicode是一种重要的通用字符编码标准,它覆盖了美国、欧洲、中东、非洲、印度、 亚洲和太平洋的语言,以及古文和专业符号。unicode允许交换、处理和显示多语言文本以 及公用的专业和数学符号。unicode字符可以适用于所有已知的编码。unicode是继ascii
16、 (美国国家交互信息标准 编码)字符码后的一种新字符编码,如utf-16允许川16位字符组合为一百万或更多的字符。c#支持unicode字符集。2. char (字符型)char (字符型):数据范围是065535之间的unicode字符集中的单个字符,占用2个 字节。char (字符型)表示无符号16位整数,char (字符型)的可能值集与unicode字符集相 对应。虽然char (字符型)的表示形式与ushort (短整型)相同,但ushort (短整型)与char (字符型)意义不同,ushort (短整型)代表的是数值木身,而char (字符型)代表的则是一 个字符。3. strin
17、g (字符串型)string (字符串型):指任意长度的unicode字符序列,占用字节根据字符多少而定。string (字符串型)表示包括数字与空格在内的若干个字符序列,允许只包含一个字符字 符串,其至可以是不包含字符的空字符串。2.2.3布尔类型和对象类型bool (布尔型):表示布尔逻辑量。bool (布尔型)数据范围是“true” (真)和“false”(假)。bool (布尔型)占用一个字节。bool (布尔型)的值“true” (真)和“false”是关键 字。bool (布尔型)数据为程序进行复杂的判断提供了数据类型依据,另外在程序进行关系 运算或逻辑运算时,将产生bool (布
18、尔型)结果。object (对象型):可以表示任何类型的值,其占用字节视具体表示的数据类型而定。object (对彖型)是所有其他类型的最终基类。c#中的每种类型都是直接或间接从object 类类型派生的。2.3变量与常量程序在处理数据时,必须将数据保存在计算机的内存中,保存在内存中的数据从可变性 看,分为变量和常量两种。231变量变量是在程序运行过程中,其值可以改变的数据。变量总是和变量名联系在一起的,所 以要使用变量,必须为变量命名。在c#中,命名变量的过程叫声明,且规定,变量必须先声 明后使用,事实上,在c#中所有的名称都必须先声明后使用,包括常量名、方法名、类名、 对象名等等,这些名称
19、包括变虽名统称为标识符。1. 变量命名规则在c#中,变量命名规则如下:(1)变量名的第一个字符必须是字母(包括汉字)或卜划线,具余字符必须是字母(包 括汉字)、数字或下划线。(2)变量名不能是c#的关键字或库函数名。(5)例如,下面的变量名:intsum,求和,_s, reftype等是合法变量名,而int, 2a, number of student等是非法 变量名。为变量命名最好有意义,可以提高程序的可读性。2. 声明变量声明变量就是把存放数据的类型告诉程序,以便为变量安排内存空间。变量的数据类型 可以对应所有基木数据类型。声明变罐最简单的格式为:数据类型名称变量名列表;例如:int in
20、tnumber;声明一个榕型变量bool boolopen; 声明一个布尔型变量decimal decimalbankblance;声明一个十进制变屋可以一次声明多个变量,例如:sbyte sbytea, sbyteb;声明两个有符号字节型变量如果一次声明多个变量,变最名之间用逗号分隔。3. 变量赋值c#规定,变量必须赋值后才能引用。为变量赋值需使用赋值号“=”。例如:int intnumber;intnumber=32;为变量赋值 32bool booiopen;boolopen=true; 为变屋赋值 irue也可以使川变量为变量赋值。例如:bool booiciose;boolciose
21、=boolopen;为变量赋值 true可以为几个变量一同赋值int inta,intb,intc;inta=intb=intc=32;可以在声明变量的同时为变量赋值,相当于将声明语句与赋值语句合二为一。例如: double doublearea, doubleradius=16;在上述语句中声明了两个双精度变虽,其中"doubleradius "在声明的同时为其赋值“ 16”。.2常量常量是在程序运行过程中,其值保持不变的量。常量的数据类型对以对应大多数基本数 据类型。常量有直接常最与符号常量两种。1. 直接常量肓接常最即数据值木身。(1) 整型常量整型常量
22、即整数,整型常虽冇三种形式:十进制形式,即通常意义上的整数,如,123, 48910等;八进制形式,输入八进制整型常量,需要在数字前面加“0”,如,0123, 038等;十六进制形式,输入十六进制整型常量,需要在数字前面加“ox”或“0x”,如,0x123, 0x48910 等。三种进制的整型常量,均可以带正负号,如123, -0123, -0x123等。如果想使整型常量为长整型(long)常量,可以在数字后跟小写字母“1”或大写字母“l”, 由于小写字母“1”容易和数字“1”混淆,c#会捉示推荐使用大写字母“l”。如,123l,表 示该常量是一个长整型。(2) 实型常量实型常量即带小数的数值
23、,实型常量有两种表示形式:小数形式,即人们通常的书写形式,如0.123, 12.3, .123等等。指数形式,也叫科学记数,由底数加人写的e或小写的e加指数组成,如,123e5或123e5都表示123x10。实型常量默认为双精度(double)型,如,123.5默认为double型常量。町以显式指出实 型常量是单精度(float)型,还是双精度(double)型,或者是十进制(decimal)型,如, 123.5f或123.5f为单精度型,123.5d或123.5d为双精度型,1235.m或123.5m为十进制型。八进制与十六进制没有小数形式。(3) 字符常量字符常量表示单个的unicode字
24、符集中的一个字符,通常包括数字、各种字母、标点、 符号和汉字等。字符常量用一对英文单引号界定,如,a,屮,汉導等。在c#屮,有些字符不能肓接放在单引号屮作为字符常量,这时需要使用转义符来表示这 些字符常量,转义符由反斜杠“”加字符组成。常见的转义符如表21所示。表21转义符字符形式字符意义单引号v双引号反斜杠0空字符a警报符b退格符f换页符n换行符r回车符。t横向跳格符v垂直跳格符例如,要表示一个单引号常量,需写成:中。(4)字符串常量字符串常量是由一对双引号界定的字符序列,例如:“世界,你好!”"i am a student.""how do you do?&q
25、uot;"hello"都是字符串常量。需要注意的是,即使由双引号界定的一个字符,也是字符串常量,不 能当做字符常量看待,例如,人与“a”,询者是字符常量,后者是字符串常量。如果试图将 一个字符串常量赋值给一个字符变量,系统在编译代码时将报错。例如:charca=”a”; 无法将类型“siring”隐式转换为“char”(5)布尔常量布尔常量即布尔值本身,如前所述,布尔值true (真)和false (假)是c#的两个关键字。2. 符号常量符号常量使川const关键字定义,格式为:const类型名称常量名二常量表达式;常最定义屮,“常最表达式”的意义在于该表达式不能包含变量及
26、函数等值会发生变化的 内容。常量表达式中可以包含其他已定义常量。例如:const int intmax=10; 合法int intnum=10;const double pi=3 j415926; 合法const double doublemaxarea01=pi*intmax*intmax;/合法,表达式包含两个已定义常量const double doublemaxarea=pi*intnum*intnum;不合法,表达式中包含变量。由于符号常量代表的是一个不变的值,所以符号常量不能出现在赋值号的左边,因为这 样意味着为符号常量赋值,即修改符号常量的值。如果在程序小非常频繁地使用某一常量,可
27、以将其定义为符号常量。定义符号常量的好 处在于:可以提高代码输入效率,例如,输入符号常量pi,比宜接输入兀值节省时间;可以 减少输入错课,例如,输入符号常量pi出现错课的几率远远低于输入兀值;更重要的是,由 于c#规定标识符必须先声明后使用,所以常量名一旦输入错误,在程序运行前的编译阶段即 可检査出来,从而避免了输入错误而导致的意外数据运算结果,而如果输入直接常量出现错 误,程序的编译是检查不出來的。2.3.3类型转换在程序处理数据的过程屮,经常需要将一种数据类型转换为另一种数据类型。事实上, 在c#中,对两种不同类型数据操作吋,要求将其转换为统一的数据类型。数据类型的转换冇隐式转换与显式转换
28、两种。1. 隐式转换隐式转换是系统自动执行的数据类型转换。隐式转换的基木原则是允许数值范围小的类 型向数值范围人的类型转换,允许无符号整数类型向有符号整数类型转换。例如:int x=123456;/int类型为四字节整数long y=x;将x的值读取出來,隐式转换为long类型后,赋给长整型变量yuint a=123456;无符号整型变港long b=a; 将a的值读取出来,隐式式为有符号的长整型后,赋给长整型变量bc#允许将char (字符)类型的数据隐式转换为数值范围在短整型(含短整型)以上的数 值类型。例如:char letter=a; 字符型变量letter的值为大写字母“ a”int
29、 num=32+letter; 读取leder的值,隐式转换为整数65,与32相加后的结果赋给numz所以允许将字符型数据隐式转换为整数,是因为chai类型的数据在内存中保存的实质 是整型数据,只是从意义上代表的是unicode字符集屮的一个字符。2. 显式转换显式转换也叫强制转换,是在代码中明确指示将某一类型的数据转换为另一种类型。显 式转换的一般格式为:(数据类型名称)数据例如:int x=600;short z=(shorl)x;将变量x中的值显示转换为short类型,赋值后,变量z的值为600。显式转换中可能导致数据的丢失,例如:decimal d=234.55m;int x=(int
30、)d;将变量d的值显式转换为整型,结果小数部分被截去,x的值为234。2.4自定义数据类型在数据处理过程,常常需要将一组类型不同,但内容相关,或者将数据类型一致,取值 范围冇限的一组相关数据。这时,使用棊木数据类型当然是可以处理的,但是处理起来很麻 烦,有时甚至有困难。例如,一个人事记录可能会包括姓名、编号、工资、电话、住址等数 据,表示三原色红、绿、蓝的数据。这时可以使用自定义的数据类型。自定义的数据类型包括结构与枚举。2.4.1结构类型结构类型可以用来处理一组类型不同内容相关的的数据。1. 定义结构结构的定义需要使用struct关键字,定义格式如下:struct v结构类型名称v类型名称
31、结构成员名称;v类型名称v结构成员名称;“结构类型名称”表示用八定义的新数据类型名称,可以像基本数据类型名称一样用來 定义变最。一对人括号之间定义结构成员。“结构成员名称”可以是基本数据类型,也可以另一个已定义结构类型。例如:struct dateuint year, month,day ;sti-uct employeestring name; bool sex; date birthday;string phone; decimal pay;上述例子中,首先是一个h期类型的结构,该结构包含年、月、日三个结构成员。然后 定义一个职工类型的结构,该结构除了包含姓名、性别、电话和工资等基本类型结
32、构成员外, 还包含了一个前血定义的口期类型的结构成员。2. 声明结构变量定义结构后,一个新的数据类型就产生了,可以像使用基木数据类型那样,用结构来声 明变量。例如:employee tom;声明一个结构变量tom也可以在声明结构变量的同时,为结构变虽赋值,为结构变虽赋值实质上是为结构变虽 中的成员赋值,但由于结构变虽常常包含不止一个结构成员,所以在声明时为结构变量赋值 需耍使用大括号,各项值z间用逗号分隔。例如:employee tom=u汤姆”,true,1980,5,26,”, 1500;由于employee中包含有另一结构日期,所以该成员的值也需耍使用一对大括号
33、。3. 访问结构变量一般对结构变量的访问都转化为对结构中的成员的访问,由于结构中的成员都依赖于一 个结构变量,因此使用结构屮的成员必须指出访问的结构变量。方法是在结构变最和成员之 间通过运算符连接在一起。即v结构变量名v成员名例如:=”汤姆”;tom.scx=truc;tom.birthday.year=1980;tom.birthday.month=5;tom. birthday, day二 26;tom.phone=”;tom.pay=1500;可以用一个结构变量为另一个结构变量赋值,例如:employee jerui;jcrui=tom; 用结构
34、变量tom为结构变量jerui赋值2.4.2枚举类型枚举类型是由用户定义的一纽整型符号常量。使丿ij枚举可以将一纽相关的有限常量纽织 在一起,保证变量只能具有预定的值;由于常量都有名称,易于辨认,从而提高了程序的可 读性;可以使用visual studio.net提供的智能感知选择这些常量,避免输入错误。1. 定义枚举类型定义枚举类型便用关键字enum,定义枚举类型的一般格式为:enum枚举类型名称符号常量1,符号常量2,枚举类型的成员均为符号常量,常量名zi'可用逗号分隔。例如:cnum solarsystcmsun,earth,moon上例定义了一个新的枚举类型“solarsyst
35、em”,可以用该类型声明变量。枚举常量成员的默认值为0、1、2,可以在定义枚举类型时为成员赋了特定的整数 值,例如enum solarsystemsun=700000, 太阳半径earth=6380,/地球赤道半径moon=1740 月亮半径2. 声明与访问枚举变量声明枚举变量与声明基本类型变量的格式和同,例如:solarsystem s;声明一个枚举变量s可以在声明枚举变最的同时为变量赋值,枚举变最的值,必须是枚举成员,枚举成员需 要用枚举类型引导,例如:solarsystem s= solarsystem.sun;为枚举变量 s 赋值 sun对枚举变最的访问同基木类型变量,例如:solar
36、systcm s= solarsystcm.sun;int num-s;将s的值赋给整型变量num2.5运算符与表达式运算符用于对操作数进行特定的运算。表达式是由运算符和操作数组成的式了。最简单的表达式是常量和变呆。根据运算符运算操作数的多少,运算符可以分为一元运算符、二元运算符与三元运算符。2.5.1运算符与表达式类型根据表达式中使用运算符类型的不同,把表达式分为不同类型的表达式。1. 算术运算符与算术表达式算术运算符有一元运算符与二元运算符。(1)一元运算符:(取负)、+ (取正)、+ (增量)、-(减量)。(2)二元运算符:+ (加)、(减)、* (乘)、/ (除)、% (求余)。由算术
37、运算符与操作数构成的表达式叫算术表达式。一元运算符作用于一个操作数,其中“”与“+”只能放在操作数的左边,表示操作数 为负或为正。增量与减量量符只能用于变量,不能用于wo增量与减量运算符既可以放在操作数的 左边,也可以放在操作数的右边,表示操作数增1或减1,但是放在左边或右边的意义不同, 放在左边表示先增量或减量,示进行其他运算,放在右边表示先进行其他运算,示增量或减 量。例如:int x=10,y;尸+x;先增量,再赋值,x的值为11, y的值为11x=5;y=x-;先赋值,再减量,x的值为4, y的值为5二元运算符的意义与数学意义相同,其中 (求余)运算符是以除法的余数作为运算结 果,求余
38、运算也叫求模。例如: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的值是9.0而不量9.25这是因为a和b都是整型,所以运算的结果只能是整型,这个整型结果在赋给双梢
39、度变 量x时,才被隐式转换为双精度型,因此x的值自然是9.0而不是9.25。两个整型数相除如 果想保留住小数,必须进行显示转换。例如double x;int a=37,b=4;x=(double间b;/x 的值是 9.25rh于a被强制转换为双精度型,则b在运算前也被隐式转换为双精度型(向数值范围宽 的类型转换),运算的结果自然也是双精度型。2. 字符串运算符与字符串表达式字符串运算符只有一个,即“ + ”运算符,表示将两个字符串连接起來。例如:string sconnec=nabcd,f+nef' /sconnec 的值为"abcdef”“+”运算符还可以将字符型数据与字符
40、串型数据或多个字符型数据连接在一起,例如: string sconnec="abcd,'+,e屮f;/sconnec 的值为 “abcdef”3. 关系运算符与关系表达式关系运算符用于对两个操作数进行比较,判断关系是否成立,若成立则结果为true,否 则为false,即关系运算符的运算结果为布尔型。关系运算符都是二元运算符。关系运算符共有如下六种:>,<,>=,<=,=,!=依次为大于,小于,人于等于,小于筹于,等于,不等于。需要注意的是,等于运算符 由两个等号“=”构成,以区别于赋值运算符。凡是由两个符号构成关系运算符,使 用时两个符号之间不能有空格
41、,否则将岀错。关系运算符既可以用于数值,也可以用于字符或字符串,但是用于字符串的关系运算符 只有相等“=”与不等“匸”运算符。例如:ini a=5,b=3;char ca-a',cb-b*;string sa=habcdlsb=mabc,t;bool iresult, cresull, sresult;iresult=a>b; /iresult 的值为 truecresult=ca>cb; / cresult 的值为 false sresult=sa=sb; / sresult 的值为 false需要说明的是,在进行字符或字符串比较时,实际上比较的是字符的unicode值。
42、上例中两个字符变量的比较,由于“a”的unicode值小于“b”的unicode值,所以a>b 的关系不成立,运算的结果为false (假)。字符串的比较与字符比较道理相同,相等运算要求两个字符串的个数与相应位置上的字 符完全相同运算结果为true,否则运算结果为false;不等运算要求两个字符串个数不等或者 对应位置上的字符至少冇一对不等,运算结果为true,否则为falseo4. 逻辑运算符与逻辑表达式逻辑运算符的操作数是布尔类型,运算结果与是布尔类型。在c#中,最常用的逻辑运算 符是!(非)、&&与、| (或)。非运算是一元运算符,是求原布尔值相反值的运算,如果原值
43、为真,非运算的结果为假, 否则为真。与运算是求两个布尔值都为真的运算,当两个布尔值都为真时,运算结果为真,即所谓 同真为真。或运算是求两个布尔值中至少有一个为真的运算,当两个布尔值中至少有一个为真时运 算结果为真,只有在两个布尔值均为假吋,运算结果才为假,即所谓同假为假。例如:bool bl=!truc; /bl 的值为 falsebool b2=5>3&&1>2;/b2 的值为 falsebool b3=5>3|l>2/b3 的值为 tnie5. 条件运算符与条件表达式条件运算符是c#中唯一的三元运算符,条件运算符由符号“?”与“:”组成,通过操作 三
44、个操作数完成运算,其一般格式为:布尔类型表达式?表达式1:表达式2布尔类型表达式如关系表达式或逻辑表达式等。在条件表达式运算时,首先运算“布尔 类型表达式”,如果为true,则运算结果为“表达式1”的值,如果为false,则运算结果为“表 达式2”的值。例如:decimal amount=2000,balancc=3850.55;decimal withdrawal=amount<=balancc?amount:0;/ withdrawal 值为 2000amount=5000;withdrawal=amount<=balancc?amoimt:0;/ withdrawal 的值为
45、 0条件表达式可以嵌套,例如:int x=100,y=100;string sresult=x>y?hgreater than,:x=y?l,equal to,f:mless than'1;/sresult 的结果为 equal to上例中的条件表达式对照一般格式分析,其屮布尔类型表达式为“x>y”,表达式1为 ""greater than”,表达式2本身又是一个完整的条件表达式“(x=y?”equal to”:”less than”)”。 通过眾套,可以实现多分支的选择判断。6. 赋值运算符与赋值表达式在赋值表达式中,赋值运算符左边的操作数叫左操作数,
46、赋值运算符右边的操作数叫右 操作数。左操作数通常是一个变量。赋值运算符包括简单赋值运算符和复合赋值运算符。赋值运算符是简单赋值运算 符,简单赋值运算符与其他运算符结合在一起的赋值运算符是复合赋值运算符,如“*=”、“/=”、 “= ”、"+=”、“亠”等。复合赋值运算符的意义在于将左操作数与右操作数进行“其他运算符”要求的运算,然 后再将运算结果赋值给左操作数。例如,x+=y表示先执行x+y的运算,然后再将运算结果赋 值给x,所以x+=y等效于x=x+y。赋值运算也产主运算结果,具运算结果就是左操作数的值,所以赋值运算符可以在一个 表达式中连续岀现,例如,表达式x=y=42,表示先将
47、42赋值给y,运算结果为y的值,再 将运算结杲赋值给x,最终运算结果为x的值。2.5.2运算符的优先级与结合性运算符的优先级与结合性本质上都是运算顺序问题,优先级是指当一个表达式中出现不 同的运算符时,先进行何种运算。结合性是指,当一个表达式中出现两个以上的同级运算符 时,是由左向右运算述是山右向左运算。1. 优先级在上小节介绍的各种运算符,其优先级从高到低如表2-2所示表22运算符的优先级一元运算符+ (取正)-(取负)!(非)+x (前增量)-x (前减量)乘除求余运算符* / %加减运算符+ _关系运算符<><=>=关系运算符= 1 二逻辑与运算符&&逻辑或运算符ii条件运算符a 赋值运算符二*二/ 二二+ 二-二«=»=&二八二1 二从表屮可以看出运算符的优先级有以下特点:(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业管理服务分包合同模板
- 品牌代理合作合同书
- 土地承包经营权转让合同模板
- 度企业定制人才培养合同
- 企业并购合同及辅导协议
- 对外借款合同签署-董事会决议范本
- 长短租结合住宅合同
- 未来生产线的智能管理与培训趋势分析报告
- 机器学习与神经网络的新研究进展
- 现代绿色建材技术与教育新思路
- 2025年集体经济发展计划
- 病历书写规范细则(2024年版)
- 2024-2025学年人教版八年级上册地理期末测试卷(二)(含答案)
- 双方共同买车合同范例
- 医务从业人员行为规范培训
- 中小学校食品安全管理现状与膳食经费优化方案
- 中医外治法课件
- 第15届-17届全国中学生物理竞赛预赛试卷含答案
- 道路运输企业主要负责人和安全生产管理人员安全考核题(公共部分题+专业部分题)及答案
- 外研版小学英语(三起点)六年级上册期末测试题及答案(共3套)
- 月结合同模板
评论
0/150
提交评论