语言基础课件_第1页
语言基础课件_第2页
语言基础课件_第3页
语言基础课件_第4页
语言基础课件_第5页
已阅读5页,还剩187页未读 继续免费阅读

下载本文档

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

文档简介

第6章

VisualC#语言基础本章包含的内容:1)标识符和关键字2)命名空间

3)数据类型

4)变量和常量5)常用类6)表达式和运算符7)控制语句8)异常和异常处理第6章

VisualC#语言基础本章重点:1)掌握VisualC#语言的标识符、关键字、命名空间;

2)掌握VisualC#语言的数据类型、变量、常量、常用类

3)掌握VisualC#语言的运算符、表达式、控制语句

。6.1标识符和关键字

标识符是程序员对程序中各种元素的唯一性标识,通常是用户在程序中命名的有意义的名称。

VisualC#的标识符必须遵循下列语法规则:(1)只能使用字母、数字和下画线组成。(2)必须以字母、下画线或@开始。(3)VisualC#的标识符是大小写敏感的。。

(4)标识符不能使用C#中预定义的关键字名,但以@符号开头的标识符,允许使用关键字作为标识符。

(5)标识符不可与VisualC#中的类库名相同。一般情况下,变量名首字母小写,后面各单词首字母大写;而常量名、类名、方法名、属性名等首字母大写6.1标识符和关键字

下面是合法的标识符示例:

Tea

ITree

@objec

下面是非法的标识符示例:

4Ab//数字不能开头float//关键字不能用

two+ten//+是非法字符Lyang//有空格6.1标识符和关键字

VisualC#编译器保留的,具有特殊的意义和用途的保留字,称为关键字。关键字不能用做变量名、方法名和类名,且均用小写字母表示。如果非要用VisualC#保留字作标识符,应在保留字前使用@字符做前缀。

6.2命名空间

6.2.1命名空间简介命名空间是类、函数或组件的容器,把它们按类别放入不同的命名空间中。命名空间提供了一个逻辑上的层次结构体系,可以将系统中大量的类库有序组织在一起,使应用程序能方便地使用和管理。

命名空间就像在文件系统中使用一个文件夹可以管理多个文件一样.但与文件夹管理文件所不同的是,命名空间只是一种逻辑上的划分,而不是物理上的存储分类。命名空间可以避免命名冲突。一个命名空间中可以包含其他的命名空间,6.2命名空间

6.2命名空间

6.2.2命名空间的声明命名空间用namespace关键字声明,具体语法格式如下:namespacename[.name1]...;{

命名空间定义//类型声明}

name、name1为命名空间名,且该命名空间名必须是唯一的,并且是合法C#语言标识符。有效命名空间名的声明可以用一个单独的标识符或一个用“.”符号分开的标识符序列来表示命名空间的嵌套关系。6.2命名空间

6.2命名空间

namespaceNp{ classA{} classB{}}

Np.A.namespaceNp1.Np2{ classA{}}等价于:namespaceNp1{

6.2命名空间

namespaceNp2{ classA{}}}//Np1.A.Np1.Np2.A6.2命名空间

6.2命名空间

注意:用关键字namespace声明一个命名空间时,命名空间的声明要么是源文件using语句后的第一条语句,要么作为成员出现在其他命名空间的声明之中。

在同一命名空间中,不允许出现同名命名空间成员或同名的类。

如果在应用程序中没有显式声明命名空间,应用程序中会创建默认命名空间。该默认的命名空间,其名称就是项目的名称。6.2命名空间

6.2命名空间

6.2.3命名空间的使用

命名空间的使用有如下两种方法:(1)直接定位命名空间的位置在该方法中任何一个命名空间都可以在程序代码中直接使用。

例如:

System.Console.WriteLine("中华人民共和国");该程序代码调用了命名空间System的类Console中方法WriteLine。6.2命名空间

6.2命名空间

(2)使用using关键字使用using关键字,能够引用给定的命名空间或创建命名空间的别名,具体语法格式如下:using[别名=]命名空间或

using别名=命名空间.类6.2命名空间

usingSystem; //使用命名空间SystemusingAlias=Np1.MyClass; //定义命名空间Np1中MyClass类的一个别名为AliasnamespaceNp1 //定义命名空间Np1{publicclassMyClass

{publicoverridestringToString(){return"Np1.MyClass";}}}6.2命名空间

namespaceNp2 //定义命名空间Np2{classMyClass

{}}namespaceNp3 //定义命名空间Np3{usingNp1; //使用命名空间Np1usingNp2; //使用命名空间Np2classTest{publicstaticvoidMain(){AliasA=newAlias();

Console.WriteLine(A.ToString());}}}在使用using时,不能直接usingsingNp1.MyClass使用,因为Np1.MyClass是命名空间Np1下的一个MyClass类,非命名空间.可以这样使用:

usingAlias=Np1.MyClass;6.2命名空间

6.2命名空间

6.2.4C#系统定义的命名空间命名空间分为两类:用户自定义的命名空间和系统定义的命名空间。如:见书上

System.Collection

相关类型

System.Text

字体功能System.IO读写接口

System.Data

数据类型

System.XML

网页代码

System.Net

网络协议接口

System.Web

浏览器与服务器接口…6.2命名空间

间类

述System.Collection提供与集合相关的类型,如列表、队列、位数组、哈希表和字典等System.Text提供了操作字体集合的功能System.IO提供允许读写文件和数据流的接口System.Threading提供启用多线程的类和接口System.Drawing提供了对GDI+基本图形功能的访问System.Data包含了数据访问使用的一些主要类型System.XML为处理XML提供基于标准的支持System.Net可为当前网络上的多种协议提供简单的编程接口System.Net.Sockets提供对Windows套接字的访问System.Web提供进行浏览器与服务器通信的类和接口System.Timers提供Timer组件,在指定的时间间隔引发一个事件System.Windows.Forms创建使用标准Windows图形接口和基于Windows的应用程序6.3数据类型

VisualC#支持两种基本数据类型:值类型和引用类型。

值类型与引用类型的区别:值类型变量存储的是该数据类型所代表的实际数据,变量包含其数据,可以直接访问其值,并且该变量存储在内存的栈(Stack)中;引用类型的变量存储对数据的引用,即地址。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象6.3数据类型6.3数据类型

6.3数据类型

6.3.1值类型简单类型(Simpletypes)包括数值类型、字符类型和布尔类型。简单类型通过关键字标识,而这些关键字是System命名空间中预定义结构类型的别名。

6.3数据类型关

字System命名空间中的名字关

字System命名空间中的名字sbyteSystem.SbyteulongSystem.UInt64byteSystem.BytecharSystem.CharshortSystem.Int16floatSystem.SingleushortSystem.UInt16doubleSystem.DoubleintSystem.Int32boolSystem.BooleanuintSystem.UInt32decimalSystem.DecimallongSystem.Int646.3数据类型1.整数类型

型类

明字

数取

围sbyte8位有符号整型1-128~127byte8位无符号整型10~255short16位有符号整型2-32768~32767ushort16位无符号整型20~65535int32位有符号整型4-2147483648~2147483647uint32位无符号整型40~4294967295long64位有符号整型8-9223372036854775808~9223372036854775807ulong64位无符号整型80~184467440737095516156.3数据类型2.字符类型字符类型包括数字字符、英文字母和表达式符号等。在VisualC#中,字符类型采用国际公认的unicode字符集。unicode字符在机器中占16位,最多能够表示65536个字符。

字符型变量类型为char,一般是用单引号括起来的一个字符。例如,可以使用如下形式表示字符变量:charval='A'; //字符Acharval2='1'; //字符16.3数据类型6.3数据类型

对于不可表示的特殊字符,可以使用\u加unicode编码字符来表示。例如:\u0x000C //换页\u0x000D //回车为了表示单引号和反斜杠等特殊字符常数,可以使用转义字符来替代这些特殊字符。

VisualC#常用的转义字符转

符字

名unicode值转

符字

名字符的unicode值\'单引号0x0027\t水平制表符0x0009\"双引号0x0022\v垂直制表符0x000B\\反斜杠0x005C\r回车0x000D\0空字符0x0000\n新行0x000A\a蜂鸣0x0007\f换页0x000C6.3数据类型例如:charval1='\0x0022'; //双引号charval2='\''; //转义字符,单引号charval3=(char)90;//整数转换charval4=‘\f’; //转义字符,换页

intval5=‘a’;

6.3数据类型3.实数类型

VisualC#中有三种实数类型:float(单精度浮点数)double(双精度浮点数)decimal(十进制数类型)在使用实数类型时要在数据的末尾加相应的符号字母:如

十进制数:0.456、3.53、854.0

科学计数:345e3、567E2

6.3数据类型数

型类

明字节

数取

围取

度示

例float单精度浮点型4

1.5e−45到3.4e387位floatva=12.9F;double双精度浮点型8

5.0e−324到1.7e30815~16位doubleva=23.45D;decimal十进制数类型161.0e-28到7.9e2828~29位decimalva=3.33M;例如:float型:3.23f、double型:34.2d

、decimal型:77.3m6.3数据类型

4.布尔类型布尔型数据使用true和false两个值来表示“真”和“假”两个概念,主要用于逻辑判断。VisualC#中,布尔类型的标识符为bool。

将整数类型转换成布尔类型是不合法的。例如:booly=1; //非法:无法转换“1”为布尔类型

布尔类型数据主要应用在流程控制中,用于判断布尔类型变量的“真”、”假“来改变流程的执行方向。6.3数据类型6.3数据类型5、枚举类型枚举类型是值类型的一种特殊形式,即由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型都有基础类型,默认基础类型为int。默认情况下,第一个枚举数的值为0,后面每个枚举数的值依次递增1。

使用enum

关键字来声明枚举类型,基本格式如下:enum

枚举类型名[:基础类型]{由逗号分隔的枚举数标识符};例如:enumDays{Sun,Mon,Tue,Wed,Thu,Fri,Sat}; //Sun为0,Mon为1,Tue为2,……6.3数据类型6.3数据类型

6.3.2引用类型引用类型不直接存储它们所代表的实际数据,而是存储实际数据的引用(地址)。

VisualC#语言中引用类型的变量一般用运算符new来建立,可存储实际数据的地址。

6.3数据类型VisualC#中引用类型主要包括以下几种:类(class)接口(interface)

委托(delegate)

数组(array)C#语言中,无论如何定义引用类型变量,都不会变为值类型变量。6.3数据类型1.对象类(object类)C#中的所有类型,包括所有值类型和引用类型,都以object类为基类,直接或间接地从object类继承而来。任何一个类定义,如果不指定基类,默认object为基类。因此,对一个object变量,可以赋予任何类型的值给它。使用object关键字声明object类型的变量,该关键字是在命名空间System中定义的,是类System.Object的别名。6.3数据类型例如:inty=32;objectobj1; //定义obj1对象obj1=y;objectobj2='C'; //定义obj2对象objectobj3=“Yes” //定义obj3对象

使用object关键字声明object类型的变量,该关键字是在命名空间System中定义的,是类System.Object的别名。6.3数据类型2.数组类数组是包含相同类型元素的VisualC#内置集合类,是在进行批量数据处理时要用到的数据结构。通常使用数组名、数据元素的数据类型和维数来说明一个数组。

在C#中,数组是System.Array类对象,声明一个数组,就产生了一个数组类对象,数组名是该数组对象的一个引用,即地址。6.3数据类型可以将数组分为如下3类:一维数组多维数组不规则数组

6.3数据类型

一维数组①定义定义一维数组的语法格式:

数组类型[]数组名;

int[]a;double[]b;数组必须初始化后才能使用。

6.3数据类型②初始化

两种方法:动态、静态。动态初始化一维数组的格式:数组类型[]数组名=new数组类型[n]{元素值0,元素值1,……,元素值n-1}

int[]a=new

int[2]{1,2};

int[]b;

b=new

int[2]{1,2};6.3数据类型静态初始化一维数组的格式:数组类型[]数组名={元素值0,元素值1,……,元素值n-1}

int[]a={1,2};

int[]b;b={1,2};

静态初始化必须和定义放在一起。多维数组:定义:

string[]str1;//引用变量str1,一维数组string[,]str2;//引用变量str2,二维数组Str2=newstring[3,4];Str2[1,2]=“efg”;例如:int[]x1=newint[]{3,5,6};//一维,有3个元素

int[]x2=newint[3]{3,5,6};

int[]x3={3,5,6};

6.3数据类型int[,]x4=newint[,]{{7,8,9},{1,2,3}};//二维数组int[][]y=new

int[3][];//定义数组y,有三个元素,每个元素都是一个数组y[0]=new

int[]{10.20,30};//定义第一个元素,是一个数组y[1]=new

int[]{40.50,60};//每个元素的数组可以不等长y[2]=new

int[]{70.80,90};6.3数据类型6.3数据类型3.字符串类(string)

字符串类(string)是System.String类型的别名,表示一个unicode字符序列,专门用于对字符串的操作。

(1)字符串的定义stringstr;//用引用类型变量str,定义一个字符串

str="Wang"; //str指向字符串"Wang"stringName="Li"+""+"Ming"; //"+"运算符连接两个字符串char[]str2={'中','华','人','民','共','和','国'};strings3=newstring(str2);6.3数据类型6.3数据类型(2)查找字符串stringstr="中华人民共和国";

int

i=str.IndexOf("民");

搜索“民”在字符串中的位置,因为等一个字符索引为0,所以“民”在字符串中的位置为i=6(书上为3)(因为一个汉字占2个字节。(3)比较字符串stringstr1="CDE";stringstr2="cde";

int

i=string.Compare(str1,str2);//str1<str2,则i<0;str1>str2,则i>0;str1=str2,则i=0;该方法区分大小写6.3数据类型6.3数据类型(4)判断是否为空字符串stringstr="";strings1="不空";if(str.Length==0)s1="空";

(5)字符串大小写转换stringstr="CcDdEf";stringstr1=str.ToLower();//把字符转换为小写,str值不变stringstr2=str.ToUpper();//把字符转换为大写,str值不变6.3数据类型6.3数据类型6.3.3类型转换

C#语言中,提供2种数据的类型转换方式:隐式转换和显式转换。

1.隐式转换隐式转换是系统默认的,编译器不需要对转换进行详细的检查,就能安全地执行转换,该转换过程不需加以声明。在隐式转换过程中,转换一般不会失败,也不会导致信息丢失。

6.3数据类型数

型转

型sbyteshort、int、long、float、double、decimalbyteshort、ushort、int、uint、long、ulong、float、double、decimalshortint、long、float、double、decimalushortint、uint、long、ulong、float、double、decimalintlong、float、double、decimaluintlong、ulong、float、double、decimallongfloat、double、decimalulongfloat、double、decimalbool无charushort、int、uint、long、ulong、float、double、decimalfloatdoubledouble无decimal无6.3数据类型

2.显式转换又称强制类型转换。当明确要求编译器把数值从一种类型转换成另一种类型时,就需要明确地指定转换类型。显式转换可能导致信息丢失。显式转换的格式如下:(转换的类型标识符)表达式;将“表达式”的值转换成“转换的类型标识符”的值。

6.3数据类型例如:bytev1;shortv2=232;v1=(byte)v2;//把short类型v2转换成byte类型需要特别注意以下两点:显式转换可能会导致错误;从float、double、decima转换成整型数据,将舍入到最接近的整型值。如果该整型值超出范围,则出现转换异常。

6.4变量和常量

6.4.1常量就是在编译时其值能够确定,并且在程序运行过程中值不发生变化的量。只能对常量赋值一次,一旦赋值,其后使用时不可改变。C#语言使用关键字const定义常量。习惯上,常量的标识符全部用大写。(1)直接常量(2)符号常量符号常量声明的格式如下:

const

类型名常量名=常量表达式;6.4变量和常量

6.4.2

变量

对于变量的使用必须遵循先声明后使用。(1)变量的声明:类型变量名[=初值],[变量名=[初值]...];

变量声明时应注意:①变量名必须符合C#关于标识符的定义。②一条变量声明语句中,可声明多个相同类型的变量。③变量使用之前必须被赋值。变量可以在定义时被赋值,也可以在定义时不赋值,但在使用之前单独被赋值。④变量的数据类型,决定该变量可以赋予什么类型的数据,数据的取值范围多大,以及对该数据所允许的操作。

6.4变量和常量

(2)变量的初始化

C#允许变量在声明的时候对它进行初始化。如果在定义变量时没有初始化,可以在子程序中使用赋值语句对其进行赋值。如果在定义变量时没有给变量赋值,系统给变量指定一个默认的初始值。例如:

inti1,i2,i3=3,i4;//连续定义4个整型变量,其中i3初始值为3,i1,i2,i4使用默认值(3)变量的作用域6.5常用类

C#提供了各种功能丰富的内建类,其中有些类是经常使用的,本节将介绍5个常用类的使用方法。6.5.1DateTime类

System命名空间中提供了DateTime类,表示时间上的某一刻,通常以日期和当天的时间表示。DateTime类中的方法,可以通过下列格式进行调用:

DateTime.方法名(参数)

;

称说

明Date获取此实例的日期部分Day获取此实例所表示的日期为该月中的第几天DayOfWeek获取此实例所表示的日期为星期几DayOfYear获取此实例所表示的日期为该年中的第几天Hour获取此实例所表示的日期的小时部分Millsecond获取此实例所表示的日期的毫秒部分Minute获取此实例所表示的日期的分钟部分Month获取此实例所表示的日期的月份部分Now获取一个DateTime对象。该对象设置为此计算机上的当前日期和时间Second获取此实例所表示的日期的秒部分TimeOfDay获取此实例的当天的时间Today获取当前日期Year获取此实例所表示的日期的年份部分

称说

明AddDays将指定的天数加到此实例的值上AddHours将指定的小时数加到此实例的值上AddMilliseconds将指定的毫秒数加到此实例的值上AddMinutes将指定的分钟数加到此实例的值上AddMonths将指定的月份数加到此实例的值上AddSeconds将指定的秒数加到此实例的值上AddYears将指定的年份数加到此实例的值上Compare比较DateTime

的两个实例DaysInMonth返回指定年和月中的天数GetDateTimeFormats将此实例的值转换为标准DateTime

格式说明符支持的字符串表示形式IsLeapYear返回指定的年份是否为闰年ToLongDateString将此实例的值转换为等效的长日期字符串表示形式ToLongTimeString将此实例的值转换为等效的长时间字符串表示形式ToShortDateString将此实例的值转换为等效的短日期字符串表示形式ToShortTimeString将此实例的值转换为等效的短时间字符串表示形式ToString将此实例的值转换为等效的字符串表示6.5常用类

6.5.2Array类

System命名空间的Array类,提供创建、操作、搜索和排序数组的方法,在公共语言运行库中用做所有数组的基类。Array类中的方法,可以通过下列格式进行调用:Array.方法名(参数)名

称方

法Clone创建Array的副本Copy将一个Array的一部分元素复制到另一个Array中,并根据需要执行类型强制转换CopyTo

将当前一维Array的所有元素复制到指定的一维Array中Exists确定指定数组包含的元素是否与指定谓词定义的条件匹配Find搜索与指定谓词定义的条件匹配的元素FindAll检索与指定谓词定义的条件匹配的所有元素ForEach对指定数组的每个元素执行指定操作GetLength

获取一个32位整数,该整数表示Array的指定维中的元素数GetLongLength

获取一个64位整数,该整数表示Array的指定维中的元素数GetValue获取当前Array中指定元素的值IndexOf返回Array中某个值第一个匹配项的索引LastIndexOf

返回Array中某个值的最后一个匹配项的索引Resize将数组的大小更改为指定的新大小Reverse倒置Array中元素的顺序SetValue

将当前Array中的指定元素设置为指定值Sort对一维Array对象中的元素进行排序6.5常用类

6.5.3String类

System命名空间中提供了String类,专门用于存储字符串,可以用它实现字符串运算功能。在String类运算中可以使用“+”运算符重载来连接两个字符串。String类中的方法,可以通过下列格式进行调用:String.方法名(参数)名

称方

法IndexOf(String)报告指定字符串在此实例中的第一个匹配项的索引Insert在此实例中的指定索引位置插入一个指定的String实例IsNullOrWhiteSpace指示指定的字符串是null、空,还是仅由空白字符组成LastIndexOf(String)报告指定字符串在此实例中的最后一个匹配项的索引位置Remove(Int32)删除此字符串中从指定位置到最后位置的所有字Substring(int

startIndex,intlength)从此实例检索子字符串ToLower(

)将此字符串转换为小写形式ToUpper(

)将此字符串转换为大写形式Trim(

)从当前字符串移除所有前导空白字符和尾部空白字符Trim(Char[])从当前字符串移除数组中指定的一组字符的所有前导匹配项和尾部匹配项6.5常用类

6.5.4Math类System命名空间中提供了Math类,可以用它实现常用算术运算功能。Math类中的方法,可以通过下列格式进行调用。Math.方法名(参数)

6.5常用类

6.5.5Convert类

System命名空间中提供了Convert类,可以用它将一个基本数据类型转换为另一个基本数据类型。Convert类中的方法,支持.NETFramework中数据类型之间的转换。可以通过下列格式进行调用,其中常用的方法如表6-13所示。Convert.方法名(参数)6.6表达式和运算符6.6.1表达式表达式是指定计算的操作符、操作序列,类似数学运算中的表达式。它由运算符、运算数和括号组成,可以进行嵌套。

表达式中可以包含多种运算符,如算术运算符、赋值运算符、逻辑运算符、字符串运算符、关系运算符等。表达式可以赋值给一个变量、一个常量,也可作为逻辑判断的条件或包含多个类方法调用

6.6表达式和运算符6.6.2运算符运算符是完成一个动作的特定语言的语法标记。

C#运算符一般分为以下3种类型:一元运算符,即单目运算符,参与运算的操作数个数1个。二元运算符,即双目运算符,参与运算的操作数个数2个。三元运算符,即三目运算符,参与运算的操作数个数3个。6.6表达式和运算符1.算术运算符C#提供算术运算符实现加、减、乘、除等基本的数学运算。运

符说

明运

量示

例+加法双目x+y-减法双目x-y*乘法双目x*y/除法双目x/y%求余双目x%y6.6表达式和运算符说明:(1)用算术运算符将操作数连接起来构成算术表达式,表达式值的类型由运算符和操作数决定。(2)+、-、*、/运算与数学中的运算类似,按先乘除后加减的优先级顺序进行计算。(3)在除法运算过程中,系统默认的返回值类型与最高精度的操作数类型相同。(4)在两个整数进行除法运算时,其运算结果也是整数,余数部分被舍去。

(5)“/”用来求除法的商,而“%”用来求除法的余数。C#中“%”运算只适应于整数数据,余数的符号与左操作数的符号相同。例如:10%3=1、-8%3=-2

6.6表达式和运算符usingsystem;

classProgram{staticvoidMain(string[]args){

Console.WriteLine(8+3);

Console.WriteLine(8-3);

Console.WriteLine(8*3);

Console.WriteLine(8/3);

Console.WriteLine(8.0/3);

Console.WriteLine(8%3);

Console.WriteLine(-8%3);

Console.WriteLine(8%-3);

Console.WriteLine(-8%-3);}}6.6表达式和运算符1152422.666666666666672-22-2请按任意键继续...6.6表达式和运算符

2.自增减运算符自增减运算符实现对一个给定变量增1或减1运算。运

符说

明运

量示

例++自增单目i++--自减单目i--说明:(1)自增和自减运算符的操作数必须是一个变量,不能是常量表达式。如果写成10++、(x*y)--是非法的。(2)自增和自减运算的作用是使变量的值增1和减1。(3)自增和自减运算分前序和后序,运算符可以写在变量的前面或后面,对于前序运算符,遵循的原则是“先增减,后使用”,而后序运算符正好相反。

6.6表达式和运算符【例6-2】分析程序的输出结果。usingSystem;Console.WriteLine(y);classTestConsole.WriteLine(j);{publicstaticvoidMain()}

{}inti=6,j=3,x,y;[执行结果】x=i++;6y=++j;7Console.WriteLine(x);4

Console.WriteLine(i);4

6.6表达式和运算符3.赋值运算符

符说

明运

量示

例=赋值双目x=y+=加法赋值双目x+=y

等效于x=x+y-=减法赋值双目x-=y等效于x=x-y*=乘法赋值双目x*=y等效于x=x*y/=除法赋值双目x/=y等效于x=x/y%=模赋值双目x%=y等效于x=x%y&=与赋值双目x&=y等效于x=x&y|=或赋值双目x|=y等效于x=x|y^=异或赋值双目x^=y等效于x=x^y<<=左移赋值双目x<<=y等效于x=x<<y>>=右移赋值双目x>>=y等效于x=x>>y6.6表达式和运算符说明:(1)由赋值运算符构成的表达式为赋值表达式。一般形式是:变量=表达式(2)C#中,可以对变量进行连续赋值,其赋值运算符是右关联的,即表达式从右到左按顺序进行分组。

(3)在进行赋值操作时,如赋值操作的两边操作数类型不一致,要进行数据类型转换。(4)赋值运算符又可分简单赋值运算符和复合赋值运算符。假设用op表示复合赋值运算符中的算术运算符或位运算符,其表达式形式为:6.6表达式和运算符6.6表达式和运算符

aop=b其等效于a=aopb例如:a+=6; //等效于a=a+6a*=(b/9);//等效于a=a*(b/9)6.6表达式和运算符

(5)在复合赋值运算时,如返回类型能隐式转换成a的类型,则执行a=aopb;否则其运算等效于a=(T)aopb,其中T为a的类型。

【例6-3】分析程序的输出结果。usingSystem;classTest{publicstaticvoidMain(){intx=9,y=8,j=1;6.6表达式和运算符x-=7;y%=j+2;

Console.WriteLine(x);

Console.WriteLine(y);

}}[执行结果]226.6表达式和运算符4.关系运算符关系运算符就是判断两个表达式的关系,其返回值为布尔类型

符说

明运

量示

例>大于双目x>y;如:x=5,y=6,值为假>=大于等于双目x>=y;如:x=5,y=6,值为假<小于双目x<y;如:x=5,y=6,值为真<=小于等于双目x<=y;如:x=5,y=6,值为真==等于双目x==y;如:x=5,y=6,值为假!=不等于双目x!=y;如:x=5,y=6,值为真6.6表达式和运算符说明:(1)由关系运算符将两个表达式连接起来,构成的表达式为关系表达式。

(2)关系表达式的值只有2个,true和false。。(3)在使用关系运算符比较相等和不相等关系时,应区分比较的是值还是引用。对于基本数据类型的变量,关系运算符判断的是值;而对于对象数据类型变量,比较的是引用。(4)当比较字符串时,比较的是字符串的值,而非字符串的引用。(5)关系运算符是比较相同类型的数据。但要对不同类型的数据进行比较,可能会产生错误。因此,通常先把不同类型的数据转换成同一类型,再进行比较。

6.6表达式和运算符5.逻辑运算符逻辑运算符一般实现逻辑运算,如逻辑与、逻辑或。运

符说

明运

量示

例&&逻辑与双目(5>6)&&(6>3),值为假||逻辑或双目(5>6)||(6>3),值为真!逻辑非单目!(5>6),值为真6.6表达式和运算符6.位运算符信息在计算机中都是以二进制位存放的,即以二进制的0或1保存。位运算符就是对数据按二进制位进行运算的操作符。运算符说明运算分量示例&位与双目x&y|位或双目x|y^位异或双目x^y~位取反单目~x<<位左移双目x<<y;x的值向左移y位>>位右移双目x>>y;x的值向右移y位6.6表达式和运算符7.其他特殊运算符

C#除了提供以上基本运算符之外,还包括一些特殊的运算符号。

符说

明运

量示

例?:条件运算三目x>y?x:ytypeof获得对象的类型单目typeof(x)sizeof获得指定类型在内存中所占字节数单目sizeof(char)is检查表达式是否是指定的类型双目xisintnew创建一个新的类型实例单目classX{};Xx=newX;6.6表达式和运算符(1)条件运算符,也是唯一的三目运算符。功能相当于一段程序,其一般形式为:表达式1?表达式2:表达式3先计算表达式1,如果表达式的值1为真,则计算表达式2的值,表达式2的结果也是条件表达式的值;如果表达式1的值为假,则计算表达式3的值,表达式3的结果也是条件表达式的值。例如:x=5;y=4;max=x>y?x:y;max的值为5。6.6表达式和运算符(2)typeof运算符用于获得指定数据类型在system名字空间中定义的类型名字。其一般形式为:

typeof(类型标识符)【例6-6】分析程序的输出结果。usingSystem;classTest{staticvoidMain(){Console.WriteLine(typeof(int));

Console.WriteLine(typeof(string));

Console.WriteLine(typeof(double[]));}}【执行结果】System.Int32

System.String

System.Double[]6.6表达式和运算符(3)is运算符用于检查表达式是否为指定类型,返回值是一个布尔值。其一般形式为:aisT//其中:a是一个表达式,T是一个类型。如果a是T类型,其结果为true,否则结果为false。【例6-7】分析程序的输出结果。usingSystem;classTest{publicstaticvoidMain(){Console.WriteLine(3isint);

Console.WriteLine(3isfloat);

Console.WriteLine(3.0fisfloat);

Console.WriteLine(4.0disdouble);}}【执行结果】TrueFalseTrueTrue6.6表达式和运算符(4)sizeof运算符用于求指定数据类型在内存中所占字节数。其一般形式为:

sizeof(类型标识符)返回值为一个整数,获得该数据类型在内存中所占字节数。【例6-8】分析程序的输出结果。usingSystem;classTest{publicstaticvoidMain(){

Console.WriteLine("char类型所占字节数:{0}",sizeof(char));

Console.WriteLine("int类型所占字节数:{0}",sizeof(int));

Console.WriteLine("uint类型所占字节数:{0}",sizeof(uint));

Console.WriteLine("long类型所占字节数:{0}",sizeof(long));}}【执行结果】char2字节;int4个字节;uint4个字节;long8字节6.6表达式和运算符

(5)new运算符用于创建一个新的类的实例。其有如下三种形式:对象创建表达式,用于创建一个类类型的实例或值类型的实例。数组创建表达式,用于创建一个数组类型实例。委托创建表达式,用于创建一个新的委托类型实例。6.6表达式和运算符6.6.3运算符的优先级见书上表6-266.7控制语句

6.7.1控制语句简介任何程序都可以用顺序结构、选择结构和循环结构组成。C#程序语言提供了下列控制语句来实现选择和循环结构。选择控制:if、else、case、switch

循环控制:for、while、do、foreach

跳转控制:break、continue6.6控制语句

6.7.2选择语句

C#提供了以下两种语句来实现选择结构:

if语句

switch语句6.6控制语句

1.if语句if语句又称为分支语句,它一般有3种格式。

if(布尔表达式)语句

if–else语句嵌套的if语句6.7控制语句

(1)if(布尔表达式)语句语法格式为:if(布尔表达式){语句}说明:①布尔表达式一般称为条件表达式。②{}括号内的语句可以是单条语句或块语句。单条语句,可不用{}。③如果布尔表达式值为真(true),则执行{}内的语句6.7控制语句

【例6-9】分析程序的输出结果。usingSystem;namespaceConsoleApplication1{classTest{staticvoidMain(string[]args){

intx=-6;if(x<0)x=-x;

Console.WriteLine("x的绝对值等于:{0}",x);}}【执行结果】X的绝对值等于:66.7控制语句

(2)if–else语句语法格式为:if(布尔表达式){语句1}else{语句2}说明:①布尔表达式一般称为条件表达式。②该语句提供了两条分支以供选择。如果布尔表达式值为真(true),则程序执行{语句1},否则执行{语句2}。③不能在if–else语句的else之前加分号。

6.7控制语句

【例6-10】比较两个数的大小。usingSystem;namespaceConsoleApplication1{classTest{staticvoidMain(string[]args)

{intx=6,y=10;if(x>y)Console.WriteLine("x大于y:{0}",x);elseConsole.WriteLine("y大于x:{0}",y);

}}}6.7控制语句

(3)嵌套的if语句语法格式为:if(布尔表达式1){语句1}elseif(布尔表达式2){语句2}elseif(布尔表达式3){语句3}

…elseif(布尔表达式n){语句n}else{语句n+1}6.7控制语句

6.7控制语句

【例6-11】编写一个程序,输入一个四则运算符,即+、-、*、/中任意一个,输出对应的英文单词。

……staticvoidMain(string[]args){charc;

Console.WriteLine("输入一个运算符:");c=char.Parse(Console.ReadLine());if(c=='+')Console.WriteLine("Plus!");elseif(c=='-')

Console.WriteLine("Minus!");elseif(c=='*')

Console.WriteLine("Multiply!");elseif(c=='/')

Console.WriteLine("Divide!");elseConsole.WriteLine("未知?");}}}

【执行结果】输入一个运算符:*

Multiply!

6.7控制语句

6.7控制语句

2.switch语句一般语法格式为:switch(表达式){ case常量表达式1:语句1;break; case常量表达式2:语句2;break;

… case常量表达式n:语句n;break; default:语句n+1; }6.7控制语句

6.7控制语句

说明:(1)程序执行时,先计算表达式的值,根据其值,进行相应的case分支选择。表达式的值与每个常量表达式的值进行比较,如果相等,则程序转入该case分支进行执行。如果表达式的值与所有的常量表达式的值都不相等,程序执行默认的default分支。(2)一般地,每个case分支内都须有一个break语句,当程序执行到该语句时,则跳出switch语句。(3)表达式的值可以是sbyte、byte、short、ushort、int、uint、long、ulong、char等。

6.7控制语句

【例6-12】编写一个程序,输入学生成绩,给出对学生成绩的对应评语。usingSystem;namespaceConsoleApplication1{classTest{staticvoidMain(string[]args){

intscore;

Console.WriteLine("请输入学生的成绩");score=int.Parse(Console.ReadLine());

6.7控制语句

switch(score/10){case10:Console.WriteLine("满分!");break;case9:Console.WriteLine("优秀!");break;case8:Console.WriteLine("良好!");break;

6.7控制语句

case7:Console.WriteLine("中等!");break;case6:Console.WriteLine("及格!");break;default:Console.WriteLine("不及格!");break;}}}}6.7控制语句

6.7.3循环语句C#提供了以下几种语句来实现循环结构。

while语句

do-while语句

for语句

foreach

语句6.7控制语句

1.while语句while语句可根据其布尔表达式的值零次或多次执行它的嵌套语句,它是最常用的循环结构语句之一。其一般语法格式为:while(布尔表达式){语句}

6.7控制语句

说明:(1)由while关键字和布尔表达式构成循环头。{}括号内语句构成循环体,可以是单一语句、块语句或空语句。(2)布尔表达式为控制循环的条件,依据布尔表达式的值决定循环体语句的执行次数。(3)程序执行时,首先判断布尔表达式的值,如果该值为真(true),则执行循环体语句,再次判断布尔表达式的值,如果仍为真,继续执行循环体语句,直到布尔表达式的值为假(false)为止。(4)一般在循环体内需要有改变布尔表达式的值的语句,让程序能按要求退出循环,否则就构成死循环。6.7控制语句

6.7控制语句

【例6-13】编写一个程序,求出自然数1~10之和。……classTest{staticvoidMain(string[]args){

inti=1,sum=0;while(i<=10){sum+=i;i++;}

Console.WriteLine("sum={0}",sum);}}}[执行结果]s

温馨提示

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

最新文档

评论

0/150

提交评论