《C#程序设计基础ppt课件.ppt》由会员分享,可在线阅读,更多相关《C#程序设计基础ppt课件.ppt(104页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章C#程序设计基础数据类型、运算符和表达式是编程的数据类型、运算符和表达式是编程的基础基础。C#支持种类丰富的数据类型和运算符,这种特性使C#适用于广泛的编程范围。本章将介绍C#的基本语法基本语法,包括词法结词法结构构、数据类型数据类型、变量与常量变量与常量、运算符运算符和表达式表达式等编程的基础知识。2C#程序设计实用教程3.1 词法结构词法是构成程序设计语言的最基本单词法是构成程序设计语言的最基本单位。位。程序是由若干个语句构成,而语句是由若干个具有特殊含义的单词和运算符构成的。所以学习一门编程语言,首先应该从词法词法入手。3C#程序设计实用教程3.1.1 标识符标识符(identif
2、ier)是由程序开发人员为类型、方法、变量等所选择的名字。C#的标识符应当使用字母或下划线作为开头,由字母、数字、下划线(“_”)和美元符号(“$”)组成,不能包括空格、标点符号和运算符,而且标识符的名称最好和实际的应用联系起来,这样可以使程序更容易理解,做到“见名知意”。比如,用来表示售货员的标识符使用salesman比用people更容易理解。4C#程序设计实用教程3.1.1 标识符下面是合法的标识符:Sum,average,_total,Student_name,Lotus_1_2_3下面是不合法的标识符:Abc-abc/中间使用了减号而非下划线3abc /以数字开头Abc abc /中
3、间有空格class /使用关键字作为标识符5C#程序设计实用教程3.1.1 标识符C#的标识符不能与关键字相同,但是可以使用“”前缀来避免这种冲突。例如:whilewhile上面两个标识符中,第一个标识符是合法的,而第二个标识符不是合法的,因为while是关键词。6C#程序设计实用教程3.1.1 标识符C#的标识符区别大小写,例如下面的4个标识符是不同的:MembermemberMemBerMEMBER7C#程序设计实用教程3.1.2 关键字同C和C+语言一样,C#也规定了很多关键字用于程序控制、数据说明或者其他功能,由于它们的特殊意义,所以这些关键字不能作为标识符使用。常用的关键词如表3-1
4、所示。8C#程序设计实用教程3.2 数据类型数据类型是用来定义现实生活中各种数据形式的标识符及其存储形式。C#中数据类型主要分为两大类:值类型和引用类型。在此,先讲解这两种类型,然后再讨论数据类型之间的转换。9C#程序设计实用教程3.2.1 值类型C#的值类型包括3种:简单类型、结构类型和枚举类型。简单类型包括整数类型、浮点类型、小数类型、字符类型和布尔类型等。10C#程序设计实用教程3.2.1 值类型1. 1. 整数类型整数类型整数类型的数据值只能是整数。数学上的整数可以从负无穷大到正无穷大,由于计算机存储单元的限制,程序语言提供的整数类型的值总是在一定的范围内。C#定义了8种整数类型,划分
5、的根据是这些类型所占存储器的位数。例如,一个8位的整数类型可以表示28=256个数值。11C#程序设计实用教程3.2.1 值类型整数类型如表3-2所示。12C#程序设计实用教程3.2.1 值类型2. 2. 浮点类型浮点类型实数在C#中采用浮点类型的数据来表示。浮点类型的数据包括两种:单精度浮点型单精度浮点型(float)和双精度浮点型双精度浮点型(double),其区别在于取值范围和精度不同。13C#程序设计实用教程3.2.1 值类型浮点类型数据的精度(小数点后所保留的有效数字)和取值范围如表3-3所示。14C#程序设计实用教程3.2.1 值类型3. 3. 小数类型小数类型小数类型(decim
6、al)数据是高精度的类型数据,占用16个字节,主要是为了满足需要高精度的财务和金融方面的计算。小数类型数据的取值范围和精度如下:小数类型:取值范围在1.0 x 10-287.9 x 1028之间,精度为29位数。要注意的是,小数类型数据的后面必须跟m或者M后缀来表示它是decimal类型的,如3.15m,0.35m等,否则就会被视为标准的浮点类型数据,导致数据类型不匹配。15C#程序设计实用教程3.2.1 值类型提示:提示:在C#中,可以通过给数值常数加后缀的方法来指定数值常数的类型,可以使用的数值常数后缀有以下几种:(1)u(或者U)后缀:加在整型常数后面,代表该常数是uint类型或者ulo
7、ng类型。(2)l(或者L)后缀:加在整型常数后面,代表该常数是long类型或者ulong类型。(3)ul(或者uL、Ul、UL、lu、lU、LU)后缀:加在整型常数后面,代表该常数是ulong类型。16C#程序设计实用教程3.2.1 值类型(4)f(或者F)后缀:加在任何一种数值常数后面,代表该常数是float类型。(5)d(或者D)后缀:加在任何一种数值常数后面,代表该常数是double类型。(6)m(或者M)后缀:加在任何一种数值常数后面,代表该常数是decimal类型。17C#程序设计实用教程3.2.1 值类型示例如下:137f 代表float类型的数值137.0137u 代表unit
8、类型的数值137137.2m 代表decimal类型的数值137.2137.22d 代表double类型的数值137.22137 代表int类型的数值13718C#程序设计实用教程3.2.1 值类型4. 4. 字符类型字符类型C#中的字符类型数据采用UnicodeUnicode字符集。字符类型的类型标识符是charchar,因此也可称为char类型。凡是在单引号中的一个字符,就构成一个字符常数,如下所示:a、o、*、 9在表示一个字符常数时,单引号单引号内的有效字符必须有且只能有一个,并且不能是单引号或者反斜杠()等。为了表示单引号和反斜杠等特殊的字符常数,提供了转义转义符符,在需要表示这些特
9、殊常数的地方,可以使用转义符来替代这些特殊的字符。常用的转义符如表3-4所示。19C#程序设计实用教程3.2.1 值类型常用的转义符如表3-4所示。20C#程序设计实用教程3.2.1 值类型5. 5. 布尔类型布尔类型布尔类型数据用于表示逻辑真和逻辑假,布尔类型的类型标识符是boolbool。布尔类型常数只有两种值:truetrue(代表“真”)和falsefalse(代表“假”)。21C#程序设计实用教程3.2.2 引用类型在在C#C#中,引用类型的中,引用类型的引入主要是因为值类型比较简单,引入主要是因为值类型比较简单,不能描述结构复杂、抽象能力比较强的数据不能描述结构复杂、抽象能力比较强
10、的数据。引用类型引用类型,其含义是该类型的变量不直接存储所包含的,其含义是该类型的变量不直接存储所包含的值,而是存储当前引用值的地址,因此引用类型数据的值,而是存储当前引用值的地址,因此引用类型数据的值会随所指向的值的不同而变化,同一个数据也可以有值会随所指向的值的不同而变化,同一个数据也可以有多个引用。多个引用。这与简单类型数据是不同的,简单类型数据存储的是自这与简单类型数据是不同的,简单类型数据存储的是自身的值,而引用类型存储的是将自身的值所直接指向到身的值,而引用类型存储的是将自身的值所直接指向到某个对象的值。它就像一面镜子一样,虽然从镜子可以某个对象的值。它就像一面镜子一样,虽然从镜子
11、可以看到物体,但物体并不在镜子中,只不过是物体的反射看到物体,但物体并不在镜子中,只不过是物体的反射而已。而已。22C#程序设计实用教程3.2.2 引用类型C#的引用类型有4种:类类型、数组类型、接口类型和委托类型。类(class)是面向对象编程的基本单位。它是一种包含数据成员、函数成员的数据结构。类的数据成员有常量、域和事件,函数成员包括方法、属性、构造函数和析构函数等。下面将介绍经常用到的两个类:object(对象类型)和string(字符串类型)。23C#程序设计实用教程3.2.2 引用类型1. object1. object类类在C#中,object类是系统提供的基类型,是所有类型的基
12、类,所有的类型都直接或间接派生于对象类型。因此,对于任何一个object变量,均可以赋给任何类型的值。int x1 = 10;object obj1;obj1 = x1;Object obj2 = string;对于object类型的变量,声明时必须使用object关键字。24C#程序设计实用教程3.2.2 引用类型2. string2. string类类在C#中,有一个用于操作字符串数据的string类,string类直接派生于object类,且它是被密封的,这意味着不能从其派生出类。一个字符串是被一对双引号所包含的一系列字符。例如,Hello world!就是一个字符串。string类的用
13、法十分简单:string str1=Hello,;string str2=China!“;25C#程序设计实用教程3.2.2 引用类型合并字符串也很简单:string str3=str1+str2;如果想访问单个字符,所要做的就是访问下标:char c=str30;当比较两个字符串是否相等时,简单地使用“=”比较操作符。if(str1=str2) .26C#程序设计实用教程3.2.2 引用类型C#支持以下两种形式的字符串常数。(1 1)常规字符串常数)常规字符串常数。放在双引号间的一串字符,就是一个常规字符串常数。如前面所示的,即为常规字符串常数。除了普通的字符,一个字符串常数也允许包含一个或
14、多个转义符。例如在下例中,使用了n和t转义符。27C#程序设计实用教程3.2.2 引用类型【例例3-13-1】在字符串中,转义符转义符的应用示范。程序代码如下:using System;class StringDemo static void Main() Console.WriteLine(First linenSecond line);/使用n转义符产生新的一行 Console.WriteLine(AtBtC); /使用t转义符排列输出 Console.WriteLine(DtEtF); 程序运行的结果如图3-1所示。28C#程序设计实用教程3.2.2 引用类型【例例3-13-1】在字符串
15、中,转义符转义符的应用示范。程序运行的结果如图3-1所示。29C#程序设计实用教程3.2.2 引用类型(2 2)逐字字符串常数)逐字字符串常数。 逐字字符串常数以“”开头,后跟一对双引号,在双引号中放入字符。如:中国人;Hello world!“;30C#程序设计实用教程3.2.2 引用类型逐字字符串常数同常规字符串常数的区别在于,在逐字字符串常数的双引号中,每个字符都代表其原始的含义,在逐字字符串常数中不能使用转义字符。即,逐字字符串常数中双引号内的内容在被接受时是不变的,并且可以跨越多行。所以,在逐字字符串中,以“”开始的字符被当作正常的字符处理,而不是转义符。但是要注意的是,如果要包含双
16、引号(“),就必须在一行中使用两个双引号(”“)。31C#程序设计实用教程3.2.2 引用类型(2 2)逐字字符串常数)逐字字符串常数。string str1 = hello,China; /定义规则字符串常数:hello,Chinastring str2 = “hello,China”; /定义逐字字符串常数:hello,Chinastring str3 = hellotworld; /hello worldstring str4 = hellotworld; /hellotworldstring str5 = Jack said Hello to you; /Jack said Hello
17、 to youstring str6 = Jack said Hello to you; /Jack said Hello to you32C#程序设计实用教程3.2.2 引用类型简单来说,常规字符串要对字符串的转义序列进行解释,而逐字字符串除了对双引号进行解释之外,对其它字符,无需解释,用户定义成什么样,显示结果就是什么样。33C#程序设计实用教程3.2.2 引用类型【例例3-23-2】如何定义规则字符串和逐字字符串。如何定义规则字符串和逐字字符串。程序代码如下所示:程序代码如下所示:using System;using System; class class StringDemoStrin
18、gDemo static void Main() static void Main() string str1 = one line string str1 = one linetwo linentwo linen tthreetthree line; line; string str2 = one linetwo linen string str2 = one linetwo linentthreetthree line; line; Console.WriteLineConsole.WriteLine(str1);(str1); Console.WriteLineConsole.Write
19、Line(-);(-); Console.WriteLineConsole.WriteLine(str2);(str2); 34C#程序设计实用教程3.2.2 引用类型【例例3-23-2】如何定义规则字符串和逐字字符串。程序的运行结果如图3-2所示。35C#程序设计实用教程3.2.3 类型转换数据类型在一定条件下是可以相互转换的,如将int类型数据转换成double类型数据。在C#中,允许两种转换方式:隐式转换隐式转换(implicit conversions)和显式转换显式转换(explicit conversions)。36C#程序设计实用教程3.2.3 类型转换1. 1. 隐式转换隐式转
20、换隐式转换是系统默认的,不需要加以声明就可以进行转换。在隐式转换过程中,编译器不需要对转换进行详细的检查就能安全地执行转换,例如数据从int类型到long类型的转换。37C#程序设计实用教程3.2.3 类型转换1. 1. 隐式转换隐式转换其中,从int,uint或long到float以及从long到double的转换可能会导致精度下降,但决不会引起数量上的丢失。其它的隐式数值转换则不会有任何信息丢失。隐式数据转换的使用方法如下所示:int a=10; /a为整型数据long b=a; /b为长整型数据double c=a; /c为双精度浮点型数据38C#程序设计实用教程3.2.3 类型转换2.
21、 2. 显式转换显式转换显式转换又称为强制类型转换,与隐式转换相反,显式转换需要用户明确地指定转换类型。显式转换可以将一数值类型强制转换成另一种数据类型,其格式如下:(类型标识符) 表达式上式的含义为:将表达式的值的类型转换为类型标识符的类型。比如:(int)5.17/把double类型的5.17转换成int类型39C#程序设计实用教程3.2.3 类型转换这种类型转换有可能会丢失信息或导致异常抛出,转换按照下列规则进行:(1)对于从一种整型到另一种整型的转换,编译器将针对转换进行溢出检测,如果没有发生溢出,转换成功,否则抛出一个转换异常。(2)对于从float,double或decimal到整
22、型的转换,将通过舍入到最接近的整型值作为转换的结果。如果这个整型值超出了目标类型的值域,则将抛出一个转换异常。40C#程序设计实用教程3.2.3 类型转换(3)对于从double到float的转换,double值通过舍入取最接近的float值。如果这个值太小,结果将变成正0或负0;如果这个值太大,将变成正无穷或负无穷。(4)对于从float或double到decimal的转换,将转换成小数形式并通过舍入取到小数点后28位。如果值太小,则结果为0;如果太大以致不能用小数表示,或是无穷或Null,则将抛出转换异常。(5)对于从decimal到float或double的转换,小数的值通过舍入取最接近
23、的值。这种转换可能会丢失精度,但不会引起异常。41C#程序设计实用教程3.2.3 类型转换显式数据转换的使用方法如下所示:(int) 7.18m /decimal类型的数值7.18转换为int类型的数值7转换的结果为7。C#中还经常要进行string类型和其他简单类型的转换,这里需要使用框架类库中提供的一些方法。42C#程序设计实用教程3.2.3 类型转换3. string3. string类型转换为其他类型类型转换为其他类型整型、浮点型、字符型和布尔类型都对应有一个结构类型,该结构类型中提供parseparse方法方法,可以把string类型转换成相应的类型。例如,要把string类型转换成
24、int类型,则有相应的int.parse(string)方法,如:string str = 123;int i = int.Parse(str);则i的值为123。43C#程序设计实用教程3.2.3 类型转换4. 4. 其他类型转换为其他类型转换为stringstring类型类型计算后的数据如果要以文本的方式输出,如在文本框中显示计算后的数据,则需要将数值数据转换成string类型,转换方法是执行ToStringToString方法方法。例如:int j = 5 * 8;string str = 5 * 8的积是: + j.ToString();除了使用相应类的Parse()方法之外,还可以使
25、用System.Convert类的对应方法将数字转换为相应的值。44C#程序设计实用教程 3.2.4 装箱与拆箱装箱(boxing)和拆箱(unboxing)是C#类型系统中重要的概念。它允许将任何类型的数据转换为对象,同时也允许任何类型的对象转换到与之兼容的数据类型。经过装箱操作,使得任何类型的数据都可以看做是对象的类型系统。反之,拆箱是装箱的逆过程。必须注意的是:装箱转换和拆箱转换过程中必须遵循类型兼容的原则,否则转换会失败。45C#程序设计实用教程 3.2.4 装箱与拆箱1 1装箱转换装箱转换装箱转换是指将一个值类型的数据隐式地转换成一个对象类装箱转换是指将一个值类型的数据隐式地转换成一
26、个对象类型(型(objectobject)的数据,或者把这个值类型数据隐式转换成一个)的数据,或者把这个值类型数据隐式转换成一个被该值类型数据对应的接口类型数据。把一个值类型装箱,被该值类型数据对应的接口类型数据。把一个值类型装箱,就是创建一个就是创建一个objectobject类型的实例,并把该值类型的值复制给该类型的实例,并把该值类型的值复制给该objectobject。例如,下面的语句就执行了装箱转换:例如,下面的语句就执行了装箱转换:intint i i=108=108;object object objobj= =i i;上面的语句中,第上面的语句中,第1 1条语句先声明一个整型变量
27、条语句先声明一个整型变量i i并对其赋值,并对其赋值,第第2 2条语句则先创建一个条语句则先创建一个objectobject类型的实例类型的实例objobj,然后将,然后将i i的值复的值复制给制给objobj。46C#程序设计实用教程 3.2.4 装箱与拆箱在执行装箱转换时,也可以使用显式转换,例如:int i=120;object obj=(object) i;47C#程序设计实用教程 3.2.4 装箱与拆箱【例例3-33-3】演示装箱转换。程序代码如下:using System;class BoxingDemo static void Main() Console.WriteLine(装
28、箱转换演示:); int i = 120; object obj = i; i = 300; Console.WriteLine(obj=0, obj); Console.WriteLine(i=0, i); 48C#程序设计实用教程 3.2.4 装箱与拆箱【例例3-33-3】演示装箱转换。该程序执行后,输出结果如下:装箱转换演示:obj=120i=300说明:说明:从上面的输出结果可知,通过装箱转换,可以把一个整型值复制给一个object类型的实例,而被装箱的整型变量自身的数值并不会受到装箱的影响。49C#程序设计实用教程 3.2.4 装箱与拆箱2拆箱转换和装箱相反,拆箱转换是指将一个对象类
29、型的数据显式地转换成一个值类型数据,或者将一个接口类型显式地转换成一个执行该接口的值类型数据。拆箱操作包括两步,首先检查对象实例,确保其是给定值类型的一个装箱值,然后把实例的值复制到值类型数据中。50C#程序设计实用教程 3.2.4 装箱与拆箱例如,下面的语句就执行了拆箱转换:object obj=225;int i=(int)obj;上面的语句在执行过程中,首先检查obj这个object实例的值是否为给定值类型的装箱值,由于obj的值为225,给定的值类型为整型,所以满足拆箱转换的条件,会将obj的值复制给整型变量i。需要注意的是,拆箱转换必须需要执行显式转换,这是与装箱转换不同之处。51C
30、#程序设计实用教程 3.2.4 装箱与拆箱【例例3-43-4】演示拆箱转换。程序代码如下:using System;class UnboxingDemo static void Main() int i=225; object obj = i; /装箱转换 int j = (int)obj; /拆箱转换 Console.WriteLine(i=0nobj=1nj=2, i, obj, j); 52C#程序设计实用教程 3.2.4 装箱与拆箱【例例3-43-4】演示拆箱转换。该程序执行后,输出结果如下:i=225obj=225;j=22553C#程序设计实用教程3.4 结构类型结构类型1. 结构
31、类型的声明结构类型的声明 结构类型由若干结构类型由若干“成员成员”组成的。数据成员称为字段,组成的。数据成员称为字段,每个字段都有自已的数据类型。声明结构类型的一般格式每个字段都有自已的数据类型。声明结构类型的一般格式如下:如下: struct 结构类型名称结构类型名称 字段访问修饰符字段访问修饰符 数据类型数据类型 字段字段1; 字段访问修饰符字段访问修饰符 数据类型数据类型 字段字段2; . 字段访问修饰符字段访问修饰符 数据类型数据类型 字段字段n; ;一般情况下,字段访问修饰符是一般情况下,字段访问修饰符是public,并且不可以省略。,并且不可以省略。补充:补充:例如,以下声明一个具
32、有姓名和年龄的结构体类型例如,以下声明一个具有姓名和年龄的结构体类型Student:struct Student/声明结构类型声明结构类型Student public int xh;/学号学号 public string xm;/姓名姓名 public string xb;/性别性别 public int nl;/年龄年龄 public string bh;/班号班号;2. 结构类型变量的定义结构类型变量的定义 声明一个结构类型后,可以定义该结构类型的变量(简声明一个结构类型后,可以定义该结构类型的变量(简称为结构变量)。定义结构变量的一般格式如下:称为结构变量)。定义结构变量的一般格式如下:
33、 结构类型结构类型 结构变量结构变量; 例如,在前面的结构类型例如,在前面的结构类型Student声明后,定义它的两声明后,定义它的两个变量如下:个变量如下: Student s1,s2;3. 结构变量的使用结构变量的使用1)访问结构变量字段)访问结构变量字段访问结构变量字段的一般格式如下:访问结构变量字段的一般格式如下: 结构变量名结构变量名.字段名字段名 例如,例如,s1.xh表示结构变量表示结构变量s1的学号,的学号,s2.xm表示结构变量表示结构变量s2的姓名。的姓名。 结构体变量的字段可以在程序中单独使用,与普通变量完结构体变量的字段可以在程序中单独使用,与普通变量完全相同。全相同。
34、2)结构变量的赋值)结构变量的赋值 结构变量的赋值有两种方式。结构变量的赋值有两种方式。 结构变量的字段赋值:使用方法与普通变量相同。结构变量的字段赋值:使用方法与普通变量相同。 结构变量之间赋值:要求赋值的两个结构变量必须类型相结构变量之间赋值:要求赋值的两个结构变量必须类型相同。例如:同。例如: s1=s2;这样这样s2的所有字段值赋给的所有字段值赋给s1的对应字段。的对应字段。 【例例3.2】 设计一个控制台程序说明结构类型的应用。设计一个控制台程序说明结构类型的应用。using System;namespace Proj3_2 class Program struct Student
35、/结构类型声明应放在结构类型声明应放在Main函数的外面函数的外面 public int xh; /学号学号 public string xm; /姓名姓名 public string xb; /性别性别 public int nl; /年龄年龄 public string bh; /班号班号 static void Main(string args) Student s1,s2;/定义两个结构类型变量定义两个结构类型变量 s1.xh = 101; s1.xm = 李明李明; s1.xb = 男男; s1.nl = 20; s1.bh = 07001; Console.WriteLine(学号
36、学号:0,姓名姓名:1,性别性别:2,年龄年龄:3, 班号班号:4, s1.xh, s1.xm, s1.xb, s1.nl, s1.bh); s2 = s1;/将结构变量将结构变量s1赋给赋给s2 s2.xh = 108; s2.xm = 王华王华; Console.WriteLine(学号学号:0,姓名姓名:1,性别性别:2,年龄年龄:3, 班号班号:4, s2.xh, s2.xm, s2.xb, s2.nl, s2.bh); 3.3 常量和变量正确定义和使用常量及变量,会使开发人员在编程过程中减少错误,提高程序开发效率。60C#程序设计实用教程 3.3.1 常量常量是指那些基于可读格式的固
37、定数值,在程序的运行过程中其值是不可改变的。通过关键字const来声明常量,其格式如下:const 类型标识符 常量名 = 表达式;类型标识符指示所定义的常量的数据类型,常量名必须是合法的标识符,在程序中通过常量名来访问该常量。如下例所示:const double PI = 3.14159265;上面的语句就定义了一个double类型的常量PI,它的值是3.14159265。61C#程序设计实用教程 3.3.1 常量常量有如下特点:(1)程序中,常量只能被赋予初始值。一旦赋予一个常量初始值,这个常量的值在程序的运行过程中就不允许改变,即无法对一个常量赋值。(2)定义常量时,表达式中的运算符对象
38、只允许出现常量,不能有变量存在。例如:int a = 20;const int b = 30;const int c = b + 25; /正确,因为b是常量const int k = a + 45; /错误,表达式中不允许出现变量c = 150; /错误,不能修改常量的值62C#程序设计实用教程 3.3.2 变量变量变量是程序运行过程中用于存放数据的存储单元。变量的值在程序的运行过程中是可以改变的。1 1变量的定义变量的定义在定义变量时,首先必须给每一个变量起名,称为变量名,以便区分不同的变量。变量名必须是合法的标识符。为了保存不同类型的数据,除了变量名之外,在定义变量时,还必须为每个变量指
39、定数据类型,变量的类型决定了存储在变量中的数值的类型。对于一个变量的定义,变量名和变量类型缺一不可。C#中,采用如下格式定义一个变量:类型标识符 变量名1, 变量名2, 变量名3,.63C#程序设计实用教程 3.3.2 变量变量定义如下例所示:int i, j, k;/同时声明多个int类型相同的变量,在类型的后面用逗号分割变量名float fSum;string strName, strAddress;注意:注意:任何变量在使用前,必须先定义,后使用。64C#程序设计实用教程 3.3.2 变量2 2变量的赋值变量的赋值变量是一个能保存某种类型的具体数据的内存单元,可以通过变量名来访问这个具体
40、的内存单元。变量的赋值,就是把数据保存到变量中的过程。给一个变量赋值的格式如下:变量名=表达式;这里的表达式同数学中的表达式是类似的,如9+10、4+a-c都是表达式。单个常数或者变量,也可以构成表达式。由单个常数或者变量构成的表达式的值,就是由这个常数或者变量本身。变量赋值的意义是:首先计算表达式的值,然后将这个值赋予变量。65C#程序设计实用教程 3.3.2 变量比如,定义了两个double类型的变量dblTotalScore、dblAverageScore和一个int类型的变量nStudentCount:double dblTotalScore,dblAverageScore;int n
41、StudentCount;66C#程序设计实用教程 3.3.2 变量2 2变量的赋值变量的赋值下面给dblTotalScore、nStudentCount赋值,应该写成:dblTotalScore = 2000;nStudentCount = 20;如果要让dblAverageScore的值等于dblTotalScore的值除以nStudentCount,应该写成:dblAverageScore = dblTotalScore / nStudentCount;67C#程序设计实用教程 3.3.2 变量在程序中,可以给一个变量多次赋值。变量的当前值等于最近一次给变量所赋的值。如:nStudent
42、Count = 20; /此时nStudentCount等于20nStudentCount = 70;/此时nStudentCount等于70nStudentCount = nStudentCount + 15; /此时nStudentCount等于8568C#程序设计实用教程 3.3.2 变量在对变量进行赋值时,表达式的值的类型必须同变量的类型相同。对于string类型的变量strName和int类型的变量nScore:string strName;int nScore;则下面的赋值语句是正确正确的:strName = Jim;strName = Xiaobao;nScore = 100;但
43、是,以下的赋值语句是错误错误的:strName = 120; /不能把整数赋予字符串变量nScore = Hello;/不能把字符串赋予整形变量69C#程序设计实用教程 3.3.2 变量3 3变量的初始化变量的初始化在定义变量的同时,也可以对变量赋值,称为变量的初始化。在C#中,对变量进行初始化的格式如下所示:类型标识符 变量名=表达式;例如:int nStudentCount = 150;/定义一个int类型变量nStudentCount,并将其赋予初始值为15070C#程序设计实用教程补充:补充: 理解引用类型的变量理解引用类型的变量 引用表示所使用的是变量或对象的地址而不是变量或引用表示
44、所使用的是变量或对象的地址而不是变量或对象本身。当声明引用类型变量时,程序只是分配了存对象本身。当声明引用类型变量时,程序只是分配了存放这个引用的存储空间。要想创建对象并把对象的存储放这个引用的存储空间。要想创建对象并把对象的存储地址赋给该变量,就需要使用地址赋给该变量,就需要使用new操作符。例如:操作符。例如: MyClass var; /MyClass是已定义的类或类型是已定义的类或类型 var=new MyClass();数组示例:数组示例: int a = new int3 1, 2, 3; for (int i = 0; i 3; i+) Console.Write(0 ,ai);
45、using System;using System.Collections.Generic;using System.Text;namespace 理解引用类型的变量 class Program static void Main(string args) int a = 1, 2, 3, 4, 5 ; for (int i = 0; i a.Length; i+) Console.Write(ai+ ); Console.WriteLine(); int b = a; for (int i = 0; i b.Length; i+) bi *= 2; for (int i = 0; i b的结果
46、为false。关系运算可以和算术运算混合起来使用,此时,关系运算符两边的运算对象可以是算术表达式的值,在C#中,是先求表达式的值,然后将这些值做关系运算。例如:4+86-3 /结果是true87C#程序设计实用教程using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1 class Program static void Main(string args) char a1 = a; char a2 = b; bool bl = a1 a2; Console.Writ
47、eLine(Convert.ToInt16(a1); Console.WriteLine(bl); Console.ReadLine(); 3.4.1 运算符4. 逻辑运算符逻辑运算符用于表示两个布尔值的逻辑关系,逻辑运算结果是布尔类型。C#中,逻辑运算符如表3-8所示。89C#程序设计实用教程 3.4.1 运算符逻辑非运算逻辑非运算的结果是原来运算结果的逆,如果原来运算结果为false,则经过逻辑非运算后,结果为true。逻辑与运算逻辑与运算的含义是,只有两个运算对象都为true,运算结果才为true,如果只有其中一个是false,结果就为false。逻辑或运算逻辑或运算的含义是,只有两个运
48、算对象中有一个为true,运算结果就为true,只有两个运算对象都为false,结果才为false。90C#程序设计实用教程 3.4.1 运算符逻辑运算的规律总结如表3-9所示。当需要多个判定条件时,可以方便地使用逻辑运算符把关系表达式连接起来。如果表达式中同时存在着多个逻辑运算符,逻辑非的优先级最高,逻辑与的优先级高于逻辑或。91C#程序设计实用教程 3.4.1 运算符5. 位运算符位运算是指二进制位的运算,每个二进制都是由0或1组成,进行位运算时,依次取运算对象的每一个位,进行位运算。位运算符如图3-10所示。在此表中,设x = 6,其二进制表示为00000110;y = 10,其二进制表
49、示为00001010。92C#程序设计实用教程using System;namespace ConsoleApplication3 class Program static void Main(string args) int x = 2; int x1 = Transfer(x); Console.WriteLine(移位前的x为:0, x1); Console.WriteLine(请输入要移动的位数:); int y=x int.Parse(Console.ReadLine(); int x2 = Transfer(y); Console.WriteLine(移位后的x为:0, x2);
50、Console.ReadLine(); / / 十进制转换为二进制 / / / public static int Transfer(int num10) int num2; string str = null; while (num10 0) num2 = num10 % 2; num10 = num10 / 2; str = num2.ToString() + str; num2 = int.Parse(str); return num2; 3.4.1 运算符左移位运算左移位运算将各个位向左移动指定的位数,舍弃移出的位,并在右边用0填充。右移位运算将各个位向右移动指定的位数,舍弃移出的位,