1. 首页
  2. 文档大全

第4章C语言基础

上传者:7****0 2022-06-02 23:20:05上传 PPT文件 510.01KB
第4章C语言基础_第1页 第4章C语言基础_第2页 第4章C语言基础_第3页

《第4章C语言基础》由会员分享,可在线阅读,更多相关《第4章C语言基础(122页珍藏版)》请在文档大全上搜索。

1、管理学院 Copyright by Xu HuijieCopyright by Xu Huijie第第4章章 C#语言基础语言基础本章主要内容本章主要内容vC#语言概述语言概述vC#语言的基本语法语言的基本语法v面向对象编程面向对象编程4.1 C#语言概述语言概述vC#语言是专门用于语言是专门用于.NET的编程语言,是为在的编程语言,是为在.NET Framework上运行的多种应用程序而设计的。上运行的多种应用程序而设计的。vC#语言简单、功能强大、类型安全,是一种面向对象的语言,语言简单、功能强大、类型安全,是一种面向对象的语言,从从C、C+以及以及Java演化而来,吸收了其他语言的优点,

2、并解演化而来,吸收了其他语言的优点,并解决了它们存在的问题。决了它们存在的问题。 vC#语言凭借自身的多项创新,实现了应用程序的快速开发,语言凭借自身的多项创新,实现了应用程序的快速开发,几乎可以开发出所有的几乎可以开发出所有的Windows程序。程序。vC#是一种对大小写敏感的语言,在是一种对大小写敏感的语言,在C#程序中,同名的大写和程序中,同名的大写和小写代表不同的对象,因此在输入关键字、变量和函数时必须小写代表不同的对象,因此在输入关键字、变量和函数时必须使用适当的字符。使用适当的字符。v对于关键字基本上都采用小写对于关键字基本上都采用小写 。v对于私有变量的定义一般都以小写字母开头、

3、而公共变量的对于私有变量的定义一般都以小写字母开头、而公共变量的定义则以大写字母开头。定义则以大写字母开头。v在一个开发语言中,注释也是非常重要。在一个开发语言中,注释也是非常重要。C#提供了两提供了两种注释的类型:种注释的类型: 1. 第一种是:单行注释,注释符号是第一种是:单行注释,注释符号是“/”,例如:,例如: int a; /一个整型变量,存储整数一个整型变量,存储整数 2. 第二种是:多行注释,注释符号是第二种是:多行注释,注释符号是“/*”和和“*/”,任何在符号任何在符号“/*”和和“*/”之间的内容都会被编译器忽略,之间的内容都会被编译器忽略,例如:例如: /*一个整型变量,

4、存储整数一个整型变量,存储整数*/ int a; 3.XML注释符号注释符号“/”也可以用来对也可以用来对C#程序进行注释,程序进行注释,例如:例如: /一个整型变量一个整型变量 /存储整数存储整数 int a;v每一句每一句C#程序都要以语句终止符来终结,程序都要以语句终止符来终结,C#的语的语句终止符是句终止符是“;”。例如:例如: int a;v在在C#程序中,可以在一行中写多个语句,但每个程序中,可以在一行中写多个语句,但每个语句都要以语句都要以“;”结束,也可以在多行中写一个语句,结束,也可以在多行中写一个语句,但要在最后一行中以但要在最后一行中以“;”结束。结束。例如:例如: in

5、t a; string s; float f; /一行中多个语句一行中多个语句v语句块:在语句块:在C#程序中,把用符号程序中,把用符号“”和和“ ”包含包含起来的程序称为语句块。语句块在条件和循环语句起来的程序称为语句块。语句块在条件和循环语句中经常会用到,主要是把重复使用的程序语句放在中经常会用到,主要是把重复使用的程序语句放在一起以方便使用,这样有助于程序的结构化。一起以方便使用,这样有助于程序的结构化。eg14.2 C#语言的基本语法语言的基本语法vC#的数据类型包括的数据类型包括值类型、引用类型和指针类型值类型、引用类型和指针类型。指。指针类型是不安全类型,一般不推荐使用。针类型是不

6、安全类型,一般不推荐使用。v值类型直接存储值,而引用类型存储的是对值的引用。值类型直接存储值,而引用类型存储的是对值的引用。将一个值类型变量赋给另一个值类型变量时,将复制包将一个值类型变量赋给另一个值类型变量时,将复制包含的值。所有的值类型不包含含的值。所有的值类型不包含null值,它们都隐含地声值,它们都隐含地声明了一个公共的无参数的构造函数,这个构造函数返回明了一个公共的无参数的构造函数,这个构造函数返回一个初始为零的值类型的实例。例如,对于字符型,默一个初始为零的值类型的实例。例如,对于字符型,默认值是认值是“x0000”;对于;对于float,默认值是,默认值是0.0F。 v值类型包括

7、所有值类型包括所有简单数据类型简单数据类型(如字符型、浮点型和(如字符型、浮点型和整数类等)、整数类等)、枚举类型和结构类型。枚举类型和结构类型。引用类型包括类类引用类型包括类类型、对象类型、字符串类型、接口类型、委托类型和数型、对象类型、字符串类型、接口类型、委托类型和数组类型。组类型。4.2.1 C#数据类型数据类型1. 值类型值类型v值类型包括所有值类型包括所有简单数据类型简单数据类型(如字符型、(如字符型、浮点型和整数类等)、浮点型和整数类等)、枚举类型和结构类枚举类型和结构类型型。v值类型声明语法如下:值类型声明语法如下:Type name;name=TypeVaue;或者:或者:T

8、ype name=new Type(); /声明加初始化声明加初始化 (1)简单数据类型)简单数据类型v简单数据类型是简单数据类型是C#预先定义的结构类型,预先定义的结构类型,简单类型用关键字定义,这些关键字仅仅简单类型用关键字定义,这些关键字仅仅是在是在System命名空间里预先定义的结构类命名空间里预先定义的结构类型的化名,比如关键字型的化名,比如关键字int对应对应System.Int32。简单类型以下的数据类型如。简单类型以下的数据类型如下表所示:下表所示:(1)简单数据类型)简单数据类型类类 型型CTS类型类型说说 明明范范 围围SbyteSystem.SByte8位有符号整数-12

9、8127shortSystem.Int1616位有符号整数-3276832767intSystem.Int3232位有符号整数-21474836482147483647longSystem.Int6464位有符号整数-263263byteSystem.Byte8位无符号整数0255ushortSystem.Unit1616位无符号整数065535unitSystem.Unit3232位无符号整数04294967295ulongSystem.Ulong64位无符号整数0264floatSystem.Single32位单精度浮点数1038doubleSystem.Double64位双精度浮点数10

10、308decimalSystem.Decimal128位双精度浮点数1028(1)简单数据类型)简单数据类型浮点类型浮点类型v小数在小数在C#中采用两种数据类型来表示:单精度中采用两种数据类型来表示:单精度float和双精度和双精度double, 它们的差别在于取值范围和它们的差别在于取值范围和精度不同。精度不同。v计算机对浮点数的运算速度大大低于对整数的运计算机对浮点数的运算速度大大低于对整数的运算,对精度要求不是很高的浮点数计算中,我们可算,对精度要求不是很高的浮点数计算中,我们可以采用以采用float型,而采用型,而采用double 型获得的结果将更为型获得的结果将更为精确,如果在程序中

11、大量地使用双精度类浮点数将精确,如果在程序中大量地使用双精度类浮点数将会占用更多的内存单元,而且计算机的处理任务也会占用更多的内存单元,而且计算机的处理任务也将更加繁重。将更加繁重。(1)简单数据类型)简单数据类型字符类型字符类型v除了数字以外计算机处理的信息主要就是字符了,除了数字以外计算机处理的信息主要就是字符了,C#的的char类型为双字节型,它的数据可以占有类型为双字节型,它的数据可以占有2个个字节。以下方法给一个字符变量赋值,如:字节。以下方法给一个字符变量赋值,如:char c = A; v C#中用转义符在程序中指代特殊的控制字符。例中用转义符在程序中指代特殊的控制字符。例如字符

12、串常量如字符串常量”c:windowssystem32”的真实含义的真实含义是路径是路径c:windowssystem32。vC#可以用反转符可以用反转符去掉反斜杠的转义。例如字符去掉反斜杠的转义。例如字符串常量串常量”c:windowssystem32”也表示路径也表示路径c:windowssystem32。 (1)简单数据类型)简单数据类型布尔类型布尔类型v布尔类型是用来表示真和假布尔类型是用来表示真和假,只有两种取只有两种取值值:真或假真或假;在在C#中可以把中可以把true 或或false赋给赋给布尔类型变量,也可以把一个逻辑表达式布尔类型变量,也可以把一个逻辑表达式赋给布尔类型变量。

13、例如:赋给布尔类型变量。例如: bool isTeacher=true;bool b=(85); /b值结果为假值结果为假(false) (2)枚举类型)枚举类型v枚举类型是枚举类型是C#中一种轻量级的值类型,中一种轻量级的值类型,用来表达一组特定的值的集合行为,以用来表达一组特定的值的集合行为,以enum关键字进行声明。关键字进行声明。格式:格式:enum ;(2)枚举类型)枚举类型v枚举枚举enum 实际上是为一组在逻辑上密不实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号可分的整数值提供便于记忆的符号,比如我比如我们声明一个代表星期的枚举类型的变量:们声明一个代表星期的枚举类型的

14、变量:enum WeekDaySunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday;(3)结构类型)结构类型v结构类型是一种可包含构造函数、常数、结构类型是一种可包含构造函数、常数、字段、方法、属性、索引器、运算符、事件字段、方法、属性、索引器、运算符、事件和嵌套类型的值类型。和嵌套类型的值类型。v它是用来封装小型的相关变量组,把它们它是用来封装小型的相关变量组,把它们封装成一个实体来统一使用,以封装成一个实体来统一使用,以struct关键关键字进行声明。字进行声明。2. 引用类型引用类型 v引用类型变量又称为对象,在引用

15、类型变量又称为对象,在C#中,引中,引用类型有:类类型(用类型有:类类型(class)、接口类型)、接口类型(interface)、委托类型()、委托类型(delegate )等。)等。和值类型相比,和值类型相比,引用类型不存储它们所代引用类型不存储它们所代表的实际数据,只存储对实际数据的引用。表的实际数据,只存储对实际数据的引用。C#有两个内置的引用类型,分别为有两个内置的引用类型,分别为Object和和String类型类型,下面将对其进行详细的讲解。下面将对其进行详细的讲解。(1)对象类型)对象类型v对象类型(对象类型(Object)在)在.NET框架中是框架中是System.Object

16、的别名,在的别名,在C#的统一类型系的统一类型系统中,所有类型(预定义类型、用户定义统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间类型、引用类型和值类型)都是直接或间接从接从Object继承的。可以将任何类型的值继承的。可以将任何类型的值赋给赋给Object类型变量。类型变量。(换句话说,它是其换句话说,它是其他类型的基类,可将任何类型的值赋予对他类型的基类,可将任何类型的值赋予对象类型的变量。象类型的变量。)eg2(2)string 类类vC#定义了一个基本的类定义了一个基本的类string,专门用于,专门用于对字符串的操作。字符串在实际中应用非对字符串的操作。字符

17、串在实际中应用非常广泛,在类的定义中封装了许多内部的常广泛,在类的定义中封装了许多内部的操作,我们只要简单地加以利用就可以了,操作,我们只要简单地加以利用就可以了,可以可以用加号用加号+ 合并两个字符串,采用下标合并两个字符串,采用下标从字符串中获取字符从字符串中获取字符等。等。vstring String1 = “Welcome”; /定义定义string类型变量类型变量vstring String2 = “Welcome ” + “ everyone”; /字符串相加字符串相加vchar c = String10; /把把String1中的第一个值中的第一个值String10赋给字符赋给字

18、符c (2)string 类类v尽管尽管string是引用类型,但相等和不相等运算是引用类型,但相等和不相等运算(=和和!=)被定义比较)被定义比较string对象的值,这使得比对象的值,这使得比较字符相等性变得更为直观,如下面代码所示。较字符相等性变得更为直观,如下面代码所示。vstring a=“hello”;vstring b=h;vb+=ello; /b此时为此时为hellova=b; /值相等值相等v(object)a!=b; /值不等值不等eg33. 装箱和拆箱装箱和拆箱v装箱就是将值类型转换为引用类型装箱就是将值类型转换为引用类型Object,这使得值类型可以存放在垃圾回收堆中。

19、这使得值类型可以存放在垃圾回收堆中。如图所示:如图所示:v拆箱就是从对象中提取值类型,将引用类拆箱就是从对象中提取值类型,将引用类型转换为值类型。如图所示:型转换为值类型。如图所示:v例如下面的一段代码:例如下面的一段代码:int a = 10;object b = (object) a; / 装箱装箱b=123;a = (int) b; / 拆箱拆箱v相对于简单的赋值而言,拆箱和装箱需要大量的相对于简单的赋值而言,拆箱和装箱需要大量的运算。对值类型进行装箱时,必须分配并构造一个运算。对值类型进行装箱时,必须分配并构造一个全新的对象。拆箱所需要的强制转换也需要大量的全新的对象。拆箱所需要的强制

20、转换也需要大量的计算。因此装箱和拆箱会对性能产生影响。计算。因此装箱和拆箱会对性能产生影响。4.2.2 变量和常量变量和常量1.变量变量v变量是指在程序运行过程中其值可以不断变化的变量是指在程序运行过程中其值可以不断变化的量。变量通常用来保存程序运行过程中的输入数据、量。变量通常用来保存程序运行过程中的输入数据、计算获得的中间结果和最终结果。变量的命名规则计算获得的中间结果和最终结果。变量的命名规则必须符合标识符的命名规则,并且变量命名要人性必须符合标识符的命名规则,并且变量命名要人性化,以便理解。化,以便理解。v在在C#中,变量可分为静态变量、实例变量、数组中,变量可分为静态变量、实例变量、

21、数组变量、局部变量、参数值、引用参数和输出参数这变量、局部变量、参数值、引用参数和输出参数这7种。下面分别对这种。下面分别对这7中变量进行简单的讲解。中变量进行简单的讲解。(1)静态变量)静态变量v通过通过static修饰符声明的变量称为静态变修饰符声明的变量称为静态变量。静态变量只有被创建并加载后才会生量。静态变量只有被创建并加载后才会生效,同样被卸载后失效。声明一个整型静效,同样被卸载后失效。声明一个整型静态变量态变量a的代码如下:的代码如下:static int a= 0;注意:最好在声明时对静态变量赋值。注意:最好在声明时对静态变量赋值。(2)实例变量)实例变量v声明变量时,没有声明变

22、量时,没有static修饰的变量称为实例变量。修饰的变量称为实例变量。当类被实例化时,将生成属于该类的实例变量。当当类被实例化时,将生成属于该类的实例变量。当不再对该实例进行引用,并且已执行实例的析构函不再对该实例进行引用,并且已执行实例的析构函数后,此实例变量将失效。类中实例变量的初始值数后,此实例变量将失效。类中实例变量的初始值是该类型变量的默认值。为了方便进行赋值检查,是该类型变量的默认值。为了方便进行赋值检查,类中的实例变量应是初始化的。例如,声明一个整类中的实例变量应是初始化的。例如,声明一个整型的实例变量型的实例变量a,代码如下:,代码如下:int a;(3)数组变量)数组变量v数

23、组元素随着数组的存在而存在,当任意数组元素随着数组的存在而存在,当任意一个数组实例被创建时,该数组元素也被一个数组实例被创建时,该数组元素也被同时创建。每个数组元素的初始值是该数同时创建。每个数组元素的初始值是该数组元素类型的默认值。声明一个整型数组组元素类型的默认值。声明一个整型数组变量的代码如下:变量的代码如下:int arry=new int5;(4)局部变量)局部变量v顾名思义,具有局部作用的变量称为局部变量,顾名思义,具有局部作用的变量称为局部变量,它只在定义它的块内起作用。所谓块是指大括号它只在定义它的块内起作用。所谓块是指大括号“”和和“”之间的所有内容。局部变量从被声明的之间的

24、所有内容。局部变量从被声明的位置开始起作用,当块结束时,局部变量也就消失。位置开始起作用,当块结束时,局部变量也就消失。声明一个整形的局部变量声明一个整形的局部变量n的代码如下:的代码如下:public void Test() int n=0;(5)参数值)参数值v声明一个变量时,该变量没有声明一个变量时,该变量没有ref和和out修饰,可修饰,可称值变量为值参数。值参数在其隶属的函数子句被称值变量为值参数。值参数在其隶属的函数子句被调用时自动生成,同时被赋给调用中的参数值。当调用时自动生成,同时被赋给调用中的参数值。当函数成员返回时,值参数失效。为了方便赋值检验,函数成员返回时,值参数失效。

25、为了方便赋值检验,所有的值参数都被认为是已被初始化过的。例如,所有的值参数都被认为是已被初始化过的。例如,声明一个方法声明一个方法Test的参数为整型的值参数变量的参数为整型的值参数变量a,代码如下:代码如下:public void Test(int a) (6)引用参数)引用参数v用用ref修饰符声明的参数为引用参数。引用参数不创建新的存修饰符声明的参数为引用参数。引用参数不创建新的存储位置。引用参数的值总是与基础变量相同。若要使用储位置。引用参数的值总是与基础变量相同。若要使用ref参数,参数,则定义方法和调用方法都必须显式使用则定义方法和调用方法都必须显式使用ref关键字。例如,声明关键

26、字。例如,声明一个方法一个方法Test的参数为整型的引用参数变量的参数为整型的引用参数变量a。声明具有引用参数的方法:声明具有引用参数的方法:public void Test(ref int a) 调用具有引用参数的方法:调用具有引用参数的方法:int b=0;Test(ref b);(6)引用参数)引用参数引用参数的赋值规则:引用参数的赋值规则:按量作为引用参数在函数成员调用中传递按量作为引用参数在函数成员调用中传递之前必须已明确赋值之前必须已明确赋值在函数成员内部,引用参数被视为初始已在函数成员内部,引用参数被视为初始已赋值赋值在结构类型的实例方法或实例访问器内部,在结构类型的实例方法或实

27、例访问器内部,this关键字的行为与该结构类型的引用参数关键字的行为与该结构类型的引用参数完全不同完全不同(7)输出参数)输出参数v用用out修饰符声明的参数是输出参数。输出参数不创建修饰符声明的参数是输出参数。输出参数不创建新的存储位置。相反,输出参数表示在对该函数成员调新的存储位置。相反,输出参数表示在对该函数成员调用中被当作用中被当作“自变量自变量”的变量所表示的同一个存储位置。的变量所表示的同一个存储位置。因此,输出参数的值总是与基础变量相同。声明一个方因此,输出参数的值总是与基础变量相同。声明一个方法法Test的参数为整型的引用参数变量的参数为整型的引用参数变量a的代码如下:的代码如

28、下:public void Test(out int a) 调用具有输出参数的方法:调用具有输出参数的方法:int b=0;Test(out b);(7)输出参数)输出参数v输出参数的赋值规则:输出参数的赋值规则:变量在作为参数在函数成员调用中传递之前,不变量在作为参数在函数成员调用中传递之前,不一定要明确赋值一定要明确赋值在正常完成函数成员调用之后,每个作为输出参在正常完成函数成员调用之后,每个作为输出参数传递的变量都被认为在该执行路径中已赋值数传递的变量都被认为在该执行路径中已赋值在函数成员内部,输出参数被视为初始未赋值在函数成员内部,输出参数被视为初始未赋值函数成员的每个输出参数在该函数

29、成员正常返回函数成员的每个输出参数在该函数成员正常返回前都必须已明确赋值前都必须已明确赋值在结构类型的实例构造函数内部,在结构类型的实例构造函数内部,this关键字的行关键字的行为与结构类型的输出参数完全相同为与结构类型的输出参数完全相同2.常量常量v常量又称常数,是在程序运行的过程中其值不改变的常量又称常数,是在程序运行的过程中其值不改变的量。在量。在C#中,常量的数据类型主要有几种:中,常量的数据类型主要有几种:sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,decimal,bool,string等。等。常量通常使

30、用常量通常使用const关键字声明,代码如下:关键字声明,代码如下:class Calendar1 public const int num=10;上面的示例中,常数上面的示例中,常数num始终为始终为10,不能更改。,不能更改。v只要不造成循环引用,用于初始化一个常数的表达式就可以只要不造成循环引用,用于初始化一个常数的表达式就可以引用另一个常数。代码如下:引用另一个常数。代码如下:class Calendar2 const int a=10; const int b=5; const double c=a/b;v常数可标记为常数可标记为public(公有)、(公有)、private(私有)

31、、(私有)、protected(派生)、(派生)、internal(程序集)或(程序集)或protectedinternal(类派生的(类派生的当前程序集)。这些访问修饰符定义类的用户访问该常数的方当前程序集)。这些访问修饰符定义类的用户访问该常数的方式。式。4.2.3 数据类型转换数据类型转换1. 隐式转换隐式转换v隐式类型转换是指将低精度数值转换为高隐式类型转换是指将低精度数值转换为高精度数值,可以直接赋值而不用任何转换。精度数值,可以直接赋值而不用任何转换。隐式转换可能在多种情况下发生,包括在隐式转换可能在多种情况下发生,包括在调用方法时或在赋值语句中。调用方法时或在赋值语句中。v隐式类

32、型转换如下表所示:隐式类型转换如下表所示:源类型源类型目标类型目标类型Sbyteshort、int、long、float、double、decimalbyteshort、ushort、int、uint、long、ulong、float、double、decimalshortint、long、float、double、decimalushortint、uint、long、ulong、float、double、decimaluintlong、ulong、float、double、decimalcharushort、int、uint、long、ulong、float、double、decimalfl

33、oatdoubleulongfloat、double、decimalLongfloat、double、decimal隐式类型转换表隐式类型转换表v例如,将整型转换为单精度型。代码如下:例如,将整型转换为单精度型。代码如下:int a=10;float b=a; /整型转换为单精度型整型转换为单精度型2. 显式转换显式转换v显式转换是指将高精度数值转换为低精度数值,显式转换是指将高精度数值转换为低精度数值,必须指明将要转换的目标类型。必须指明将要转换的目标类型。由于数据类型的差由于数据类型的差异,有可能丢失部分数据。例如,将双精度型转换异,有可能丢失部分数据。例如,将双精度型转换为整型。代码如下

34、:为整型。代码如下:double a=10.023;int b=(int)a; /双精度型转换为整型双精度型转换为整型转换后转换后b=10;3. System.Convert转换转换vSystem.Convert类为支持的转换提供了一整套方类为支持的转换提供了一整套方法。它提供了一种与语言无关的方法来执行转换,法。它提供了一种与语言无关的方法来执行转换,而且可用于针对公共语言运行库的所有语言。而且可用于针对公共语言运行库的所有语言。Convert类可确保所有公共转换都可使用一般格式。类可确保所有公共转换都可使用一般格式。该类可执行收缩转换以及不相关数据的转换。例如,该类可执行收缩转换以及不相关

35、数据的转换。例如,可以从可以从String类型转换为数值类型,从类型转换为数值类型,从DateTime转转换为换为String类型,以及从类型,以及从Sting类型转换为类型转换为bool类型。类型。vConvert转换的方法,如下表所示:转换的方法,如下表所示:方方 法法说说 明明ToBase64CharArray将8位无符号整数数组的子集转换为用Base64数字编码的Unicode字符数组的等价子集ToBase64String将8位无符号整数数组的子集转换为其等效String形式(使用Base64数字编码)ToByte将指定的值转换为8位无符号整数ToChar将制定的值转换为Unicode

36、字符ToDateTime将指定的值转换为Decimal(十进制数字)ToDecimal将指定的值转换为双精度浮点数(128位)ToDouble将指定的值转换为双精度浮点数(64位)ToInt16将指定的值转换为16位有符号整数ToInt32将指定的值转换为32位有符号整数ToInt64将指定的值转换为64位有符号整数ToSByte将指定的值转换为8位有符号整数ToString将指定的值转换为字符串ToSingle将指定的值转换为单精度浮点数Convert类转换方法类转换方法v用用Convert方法将方法将string类型转化为类型转化为Int的代码如下:的代码如下:string a=”1234

37、56”;int b=Convert.ToInt32(a);以上转换的结果为以上转换的结果为b=123456vConvert方法也可以进行字符串类型与日期类型的转换,如果想将一方法也可以进行字符串类型与日期类型的转换,如果想将一个字符串类型的日期转换为字符串类型,可以进行如下代码转换:个字符串类型的日期转换为字符串类型,可以进行如下代码转换:string str=”1993/10/02”;DateTime dt=Convert.ToDateTime(str);则则dt即为日期型字符。同理也可将日期类型转换为字符串类型,代码如即为日期型字符。同理也可将日期类型转换为字符串类型,代码如下:下:Dat

38、eTime dt=”1993/10/02”;string str=Convert.ToString(dt);4.2.4 运算符与表达式运算符与表达式v程序对数据的操作,其实就是指对数据的各种运程序对数据的操作,其实就是指对数据的各种运算。被运算的对象,如常数、常量、变量等称为操算。被运算的对象,如常数、常量、变量等称为操作数。运算符是指用来对操作数进行各种运算的操作数。运算符是指用来对操作数进行各种运算的操作符号,如加号或减号等。诸多的操作数通过运算作符号,如加号或减号等。诸多的操作数通过运算符连成一个整体后,就成为一个表达式。符连成一个整体后,就成为一个表达式。v在在C#.NET中具有丰富的

39、运算符,可分为算术运算中具有丰富的运算符,可分为算术运算符、赋值运算符、位逻辑运算符、比较运算符、链符、赋值运算符、位逻辑运算符、比较运算符、链接运算符、逻辑运算符、字符运算符。接运算符、逻辑运算符、字符运算符。1. 算术运算符算术运算符v算术运算符用于组合数字、数值变量、数算术运算符用于组合数字、数值变量、数值字段和数值函数,以得到另一个数字。值字段和数值函数,以得到另一个数字。用于链接运算表达式的各种运算符如下表用于链接运算表达式的各种运算符如下表所示:所示:运算符运算符运算符定义运算符定义举举 例例说说 明明+加法符号X=A+BX等于A加B所得的结果-减法符号X=A-BX等于A减B所得的

40、结果*乘法符号X=A*BX等于A乘B所得的结果/除法符号X=A/BX等于A除B所得的商%取模符号X=A%BX等于A除B所得的余数算术运算符算术运算符2. 赋值运算符赋值运算符v赋值运算符用于赋值运算。在赋值运算符用于赋值运算。在C#.NET中常用中常用的赋值运算符及其描述如下表所示:的赋值运算符及其描述如下表所示:运算符运算符运算符定义运算符定义举举 例例说说 明明=赋值X=A+=加X+=AX=X+A-=减X-=AX=X-A*=乘X*=AX=X*A/=除X/=AX=X/A%=取余X%=AX=X%A赋值运算符赋值运算符3.比较运算符比较运算符v比较运算符用于比较两个对象之间的相互关系,比较运算符

41、用于比较两个对象之间的相互关系,返回值为返回值为True和和False。各种比较运算符如下表。各种比较运算符如下表所示:所示:运算符运算符说说 明明举举 例例结结 果果=运算符检验两个操作数A、B是否相等3=1False运算符检验第一个操作数A是否大于第二个操作数B31True运算符检验第一个操作数A是否小于第二个操作数B3=运算符检验第一个操作数A是否大于或等于第二个操作数B3=1True=运算符检验第一个操作数A是否小于或等于第二个操作数B312)&(1210) /x=Truex=(2312)|(1210) /x=Truex=(2312)|(1210) /x=Truex=(2312)|(1

42、212) /x=Falsex=(2312)(1212)(1210) /x=False5.运算符优先级运算符优先级v当表达式中包含多个运算符时,运算符的当表达式中包含多个运算符时,运算符的计算是有优先级的。例如,表达式计算是有优先级的。例如,表达式x+y*z会会按按x+(y*z)计算,因为计算,因为*运算符的优先级高于运算符的优先级高于+运算符。下表按优先级降低的顺序提供了运算符。下表按优先级降低的顺序提供了所有运算符。同一行中的运算符具有相同所有运算符。同一行中的运算符具有相同的优先级,按它们在表示中出现的顺序从的优先级,按它们在表示中出现的顺序从左向右计算。左向右计算。类别操作符类别操作符操

43、作符操作符初级操作符(x) x.y f(x)a x x+ +xnew type of sizeof checked unchecked一元操作符+ - ! + +xx (T) x乘除操作符* / %加减操作符+ -移位操作符 关系操作符 = is as等式操作符= !=逻辑与操作符&逻辑或异操作符逻辑或操作符|条件与操作符&条件或操作符|条件操作符?:赋值操作符= *= /= %= += -= = &= = |=比较运算符比较运算符v当操作数出现在两个同级运算符之间时,当操作数出现在两个同级运算符之间时,运算符的关联控制运算的执行顺序。所有运算符的关联控制运算的执行顺序。所有的二进制运算都是向

44、左关联的,即运算的的二进制运算都是向左关联的,即运算的执行顺序是从左向右的。优先级和关联性执行顺序是从左向右的。优先级和关联性可以通过带括号的表达式控制。可以通过带括号的表达式控制。4.2.5 流程控制流程控制v一个程序指令一般都是按顺序执行的,但一个程序指令一般都是按顺序执行的,但实际上在许多时候会根据一定的条件来执实际上在许多时候会根据一定的条件来执行不同的程序指令段,这就需要有相关的行不同的程序指令段,这就需要有相关的控制语句来控制程序的流程。这个过程叫控制语句来控制程序的流程。这个过程叫做流程控制,这种改变流程的语句叫做控做流程控制,这种改变流程的语句叫做控制语句。制语句。1. 分支结

45、构分支结构v使用分支结构语句块中的条件表达式可以使用分支结构语句块中的条件表达式可以控制程序中哪些语句被执行,以及以什么控制程序中哪些语句被执行,以及以什么样的次序执行。在样的次序执行。在C#中选择语句又可以分中选择语句又可以分为两种:为两种:if语句和语句和switch语句。语句。(1)if语句语句简单条件表达式简单条件表达式vIf语句是最有用的控制结构之一,当条件为真时执行一系列语句,当语句是最有用的控制结构之一,当条件为真时执行一系列语句,当条件为假时执行另一系列语句。条件为假时执行另一系列语句。If分支语句在程序中计算条件值,并根分支语句在程序中计算条件值,并根据条件值决定下一步执行的

46、操作。简单的据条件值决定下一步执行的操作。简单的if分支结构有以下两种形式。分支结构有以下两种形式。格式一:格式一:if(布尔表达式布尔表达式) 程序语句程序语句 格式二:格式二:if(布尔表达式布尔表达式) 程序语句程序语句 else 程序语句程序语句 v当当if语句中的布尔表达式的值为语句中的布尔表达式的值为“True”时,则执行后面的程序语句,时,则执行后面的程序语句,例如:例如:string str;if(score=60) str=”恭喜您通过了!恭喜您通过了!”;else str=”很遗憾您没通过!很遗憾您没通过!”;vIf语句可以嵌套语句可以嵌套if语句,如下例所示:语句,如下例

47、所示:int Number,Digits;Number=53; /初始化初始化Number变量变量if(Number10) Digits=1;else if(Number100) Digits=2; else Digits=3; v上述代码等同于如下代码:上述代码等同于如下代码:int Number,Digits;Number=53; /初始化初始化Number变量变量if(Number10) Digits=1;else if(Number=60&score=60)?”通过通过”:”没通过没通过”;上面代码执行的结果为上面代码执行的结果为str被赋值为被赋值为“通通过过”。(2)switch语

48、句语句v如果要将同一表达式与多个不同的值进行比较,可以使用如果要将同一表达式与多个不同的值进行比较,可以使用switch语句替换语句替换if语句。另外,语句。另外,switch语句只计算表达式一次,然后在每语句只计算表达式一次,然后在每次比较中都在使用它。次比较中都在使用它。switch结构的语法如下所示:结构的语法如下所示:switch(条件表达式条件表达式)case值值1:语句语句1;break;case值值2:语句语句2;break;default:语句语句;break;eg4(2)switch语句语句vSwitch语句的形式是以语句的形式是以switch表达式开始,后跟表达式开始,后跟

49、一连串的一连串的switch块,每一个块,每一个switch块通过块通过case来标记。来标记。当条件表达式的值对应与某个特定的当条件表达式的值对应与某个特定的case值时,程值时,程序就紧跟着该序就紧跟着该case的代码。若没有与之匹配的的代码。若没有与之匹配的case值,而定义了值,而定义了default条件,则执行条件,则执行default条件中的条件中的代码。代码。v另外,每个另外,每个switch块结束处必须使用块结束处必须使用break语句,语句,否则就会产生编译错误。因为编译器不允许连续执否则就会产生编译错误。因为编译器不允许连续执行多个行多个switch块。块。(2)switc

50、h语句语句v假如考查课的成绩按优秀、良好、中等、及格、不及格分为假如考查课的成绩按优秀、良好、中等、及格、不及格分为五等,分别用五等,分别用4,3,2,1,0来表示。但实际的考卷为百分制,来表示。但实际的考卷为百分制,分别对应的分数为分别对应的分数为90100,8090,7080,6070,60以下。以下。下面的程序将考卷成绩下面的程序将考卷成绩x转换为考查课的成绩转换为考查课的成绩y,代码如下:,代码如下:int y,x=78;switch(x/10)case 10:y=4;break;case 9:y=4;break;case 8:y=3;break;case 7:y=2;break;ca

51、se 6:y=1;break;default:y=0;break;(2)switch语句语句该示例的执行顺序如下:该示例的执行顺序如下:先计算条件表达式(先计算条件表达式(x/10)的值,从)的值,从x初初值整除值整除10后,可得,表达式的值为后,可得,表达式的值为7。若若case标记中的某个常数值与条件表达标记中的某个常数值与条件表达式的值相等,执行控制权就会传送该式的值相等,执行控制权就会传送该case标记后的语句。本实例应执行标记后的语句。本实例应执行“case7:”后的语句,即执行后的语句,即执行“y=2”。2. 循环结构循环结构v循环结构用于在一定条件下多次重复执行一组语循环结构用于

52、在一定条件下多次重复执行一组语句。可以根据下列条件重复执行语句:直到条件为句。可以根据下列条件重复执行语句:直到条件为真时直到条件为真时,直到条件为假时,指定的次真时直到条件为真时,直到条件为假时,指定的次数、集合中的每一个对象执行一次。数、集合中的每一个对象执行一次。vC#支持的循环结构包括以下几种:支持的循环结构包括以下几种:for语句语句foreach语句语句while语句语句dowhile语句语句(1)for语句语句v当事先知道某个语句块要被执行多少次时,当事先知道某个语句块要被执行多少次时,for循环可循环可很好地发挥作用。很好地发挥作用。for语句的格式为:语句的格式为:for(i

53、nitializer;condition;iterator) Embedded-statementv其中其中initializer、condition、iterator这三项都是可选项。这三项都是可选项。Initializer为循环控制变量做初始化,循环控制变量可以为循环控制变量做初始化,循环控制变量可以有一个或多个(用逗号隔开);有一个或多个(用逗号隔开);condition为循环控制条为循环控制条件,也可以有多个语句;件,也可以有多个语句;iterator按规律改变循环控制变按规律改变循环控制变量的值。量的值。 (1)for语句语句v下面的例子是在浏览器中显示数字下面的例子是在浏览器中显示

54、数字19,清楚地显示出了清楚地显示出了for语句是怎样工作的:语句是怎样工作的:for(int i=0;i10;i+) Response.write(i.ToString()+”);(1)for语句语句v下面的过程将计数器变量下面的过程将计数器变量j每次循环重复是递增每次循环重复是递增2。循环。循环结束后,结束后,Total为为2、4、6、8和和10的总和。的总和。public int TwoTotal() int j,Total=0; for(j=2;j=4;j=j-2) Total=Total+j; if(Total30) break; return(Total);v如上例,当如上例,当T

55、otal的值大于的值大于30时,计数器并未超过其结束值,但时,计数器并未超过其结束值,但for循循环依然会终止。环依然会终止。eg5(2)foreach语句语句vforeach语句为数组或对象集合中的每一个元素重复一个嵌入语句为数组或对象集合中的每一个元素重复一个嵌入语句组。语句组。foreach语句用于循环访问集合以获取所需要的信息,语句用于循环访问集合以获取所需要的信息,但不应用于更改集合内容,以免产生不可预知的副作用。但不应用于更改集合内容,以免产生不可预知的副作用。此语此语句的形式如下:句的形式如下:foreach(type identifier in expression) stat

56、ementv其中各参数含义如下:其中各参数含义如下:utype:identifier的类型;的类型;uidentifier:标识符,表示集合元素的迭代变量。如果迭代变:标识符,表示集合元素的迭代变量。如果迭代变量为值类型,则无法修改的只读变量也是有效的;量为值类型,则无法修改的只读变量也是有效的;uexpression:对象集合或数组表达式。集合元素的类型必须可:对象集合或数组表达式。集合元素的类型必须可以转换为以转换为identifier类型;类型;ustatement:要执行的嵌入语句。:要执行的嵌入语句。(2)foreach语句语句v当与数组一起使用时,当与数组一起使用时,foreach

57、语句为数组中的每个元素重复执行嵌入语句为数组中的每个元素重复执行嵌入语句。下面这个示例搜索一个整数数组中的偶数和奇数,并统计其个数。语句。下面这个示例搜索一个整数数组中的偶数和奇数,并统计其个数。int odd=0,even=0;int arr=new int1,2,3,4,5,6,7,8,9,10,11;foreach(int i in arr)if(i%2=0) even+;else odd+;eg7(3)dowhile语句语句v当事先不知道需要执行多少次循环体时,可以使用当事先不知道需要执行多少次循环体时,可以使用dowhile语句,执行的具体次数取决于条件表达式的值。可以在条件表语句,

58、执行的具体次数取决于条件表达式的值。可以在条件表达式为达式为True时一直重复语句。条件通常从两个值的比较得到,时一直重复语句。条件通常从两个值的比较得到,也可以是任何计算为布尔值(也可以是任何计算为布尔值(True或或False)的表达式。)的表达式。与与while语句不同,语句不同,do语句的体循环至少执行一次,与语句的体循环至少执行一次,与expression的值无关。的值无关。其语法结构如下所示:其语法结构如下所示:do statementwhile(expresion);v其中各参数的含义如下:其中各参数的含义如下:uexpression:一个表达式,可隐式转换为布尔类型或包含重载:

59、一个表达式,可隐式转换为布尔类型或包含重载True和和False运算符的类型。此表达式用于测试循环终止条件运算符的类型。此表达式用于测试循环终止条件ustatement:要执行的嵌入语句:要执行的嵌入语句(3)dowhile语句语句v下面这个程序段说明下面这个程序段说明do语句的用法:语句的用法:int x;int y=0;do x=y+; Response.Write(x.ToString()+“”);while(y5);v该程序的执行结果是:该程序的执行结果是:“1,2,3,4,5”。(3)dowhile语句语句注意,在下面这个程序段中,虽然条件求得注意,在下面这个程序段中,虽然条件求得f

60、alse值,值,但循环仍将执行一次。但循环仍将执行一次。int n=10;do Response.Write(“当前当前n的值是:的值是:”+n.ToString(); n+;while(n5);改程序段执行的结果是:改程序段执行的结果是:“当前当前n的值是:的值是:10”。(4)while语句语句v当循环体的执行次数不确定时,还可以使用当循环体的执行次数不确定时,还可以使用while语句,具体语句,具体执行次数取决于条件表达式的值,只要条件为执行次数取决于条件表达式的值,只要条件为True,则重复该,则重复该语句。语句。while语句始终在循环开始前检查该条件,因此语句始终在循环开始前检查该

61、条件,因此while循循环执行零次或很多次。环执行零次或很多次。它的语法结构形式为:它的语法结构形式为:while(expression) statement其中各参数含义如下:其中各参数含义如下:vexpression:是一个表达式,可隐式转换为布尔类型或则包含:是一个表达式,可隐式转换为布尔类型或则包含重载重载True和和False运算符的类型。此表达式用于测试循环终止条运算符的类型。此表达式用于测试循环终止条件件vstatement:要执行的嵌入语句:要执行的嵌入语句eg84.2.6 数组数组v在进行批量处理数据的时候我们要用到数组在进行批量处理数据的时候我们要用到数组,数组数组是一组类

62、型相同的有序数据是一组类型相同的有序数据,存放在相邻的内存块存放在相邻的内存块中。中。v数组按照数组名、数据元素的类型和维数来进行数组按照数组名、数据元素的类型和维数来进行描述描述,C#中中,数组中的元素可以是任何数据类型。数组中的元素可以是任何数据类型。v数组允许通过同一名称引用一系列的变量,并使数组允许通过同一名称引用一系列的变量,并使用一个称为用一个称为“索引索引”或或“下标下标”的数字来进行区分。的数字来进行区分。这在许多情况下,有助于代码的精炼和简洁,因为这在许多情况下,有助于代码的精炼和简洁,因为可以使用索引号设置循环来高效地处理任何数量的可以使用索引号设置循环来高效地处理任何数量

63、的元素。元素。1. 声明数组变量声明数组变量vC#数组从零开始建立索引,即数组索引从零开始。数组从零开始建立索引,即数组索引从零开始。C#中数组的工作方式与在大多数其他流行语言中中数组的工作方式与在大多数其他流行语言中的工作方式类似,但还是有一些差异应引起注意。的工作方式类似,但还是有一些差异应引起注意。v在声明数组时,方括号在声明数组时,方括号“”必须跟在类型后面,必须跟在类型后面,而不是标识符后面。而不是标识符后面。在在C#中,将方括号放在标识中,将方括号放在标识符后面是不合法的语句。如下:符后面是不合法的语句。如下:int table; /正确正确int table; /错误错误1. 声

64、明数组变量声明数组变量下面的示例展示如何声明不同类型的数组:下面的示例展示如何声明不同类型的数组:v一维数组一维数组int numbers;v多维数组多维数组string, names;v数组的数组(交错的):数组的数组(交错的):byte scores;1. 声明数组变量声明数组变量但是,声明数组并不是实际创建它们,在但是,声明数组并不是实际创建它们,在C#中,数组是中,数组是对象,必须进行实例化。下面的示例展示如何创建数组:对象,必须进行实例化。下面的示例展示如何创建数组:v一维数组一维数组int numbers = new int5;v多维数组多维数组string, names = ne

65、w string5,4;v数组的数组(交错的)数组的数组(交错的)byte scores = new byte5;for (int x = 0; x scores.Length; x+) scoresx = new byte4;eg92.数组的初始化数组的初始化v 数组的初始化有两种方式:第一种是在声明数组的时候数组的初始化有两种方式:第一种是在声明数组的时候进行初始化;第二种是使用进行初始化;第二种是使用new关键字进行初始化。关键字进行初始化。v例如下面语句声明并初始化一个一维整数数组:例如下面语句声明并初始化一个一维整数数组:int numbers = new int5 1, 2, 3,

66、 4, 5;string names = new string3 Matt, Joanne, Robert;v可省略数组的大小,如下所示:可省略数组的大小,如下所示:int numbers = new int 1, 2, 3, 4, 5;string names = new string Matt, Joanne, Robert; 3.访问数组成员访问数组成员v访问数组成员可以直接进行,类似于在访问数组成员可以直接进行,类似于在 C/C+ 中中访问数组成员。例如,下面的代码创建一个名为访问数组成员。例如,下面的代码创建一个名为 numbers 的数组,然后向该数组的第五个元素赋以的数组,然后向该数组的第五个元素赋以 5:int numbers = 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0;numbers4 = 5;v下面的代码声明一个多维数组,并向位于下面的代码声明一个多维数组,并向位于 1, 1 的成员赋以的成员赋以 5:int, numbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;numbers1, 1 = 5;3.访问数组成员


文档来源:https://www.renrendoc.com/paper/212527664.html

文档标签:

下载地址