资源描述
,C#,程序设计,第,1,章,C#2.0,开发环境,1.1.1.NET Framework 2.0,简介,一个建立、配置和运行,web,服务以及应用程序的多语言环境,是,Microsoft,的新一代,web,应用程序开发平台,它包含以下三个主要部分,:,公共语言运行时环境(,common language runtime,CLR,),框架类库,(Framework Class,Library,FCL,),ASP.NET,1.1.2 C#,介绍,C#,是一种面向对象的编程语言,是从,C,和,C+,派生出来的一种简单、现代、面向对象和类型安全的编程语言,其语言体系都构建在,.NET,框架上,并且能够与,.NET,框架完美结合。,优势:,快速应用开发(,RAD,)功能,语言的自由性,强大的,Web,服务端组件,支持跨平台与,XML,的融合,对,C+,的继承,1.2 VS 2008,集成开发环境,集成开发环境(简称,IDE Integrated Development Environment,)是用于提供程序开发环境的应用程序,主要包括代码编辑器、编译器、调试器和图形用户界面工具,为用户提供了一个完全的编程环境。,Visual Studio2008,是微软公司出品的一款大型应用软件,是,.NET,开发的首选工具,其中,C#,是使用最广发的开发语言,方便用户快速有效的建立应用程序。,1.2.1,安装环境要求,系统配置要求:,处理器:最低,1.6GHZ,,推荐,2.2GHZ,或以上。,内存:最低,384MB,(,Vista,最低,768MB,),推荐,1GB,或以上。,硬盘:最低,5400RPM,,推荐,7200RPM,或更高转速,,Visual Studio 2008,安装最小需要,1.22GB,的可用硬盘空间,完全安装需要大概,4GB,的可用硬盘空间。,现实设备:最低,1024*768,,推荐,1280*1024,或以上的分辨率。,操作系统:建议使用,Windows XP,或更新版本操作系统。,1.2.2,软件安装步骤,(,1,)首先购买,Visual Studio 2008,的安装光盘,也可以下载,Visual Studio 2008,安装软件,网上有很多下载地址。将,Visual Studio 2008,安装光盘放入,DVD,光驱,屏幕将弹出图,1-1,所示的窗体。,1.2.2,软件安装步骤(续),(,2,)单击第,1,项“安装,Visual Studio 2008”,链接,进入下一步安装,如图,1-2,所示,用户此时可以根据自己意愿选择是否参加微软帮助改进安装活动。,1.2.2,软件安装步骤(续),(,3,)单击“下一步”,弹出如图,1-3,所示的窗体。这个窗体中包含用户许可协议,用户必须接受许可协议中的条款才可继续安装,且用户需在制定的文本框中输入产品的密钥。,1.2.2,软件安装步骤(续),(,4,)单击“下一步”按钮,进入如图,1-4,所示的窗体,用户此时可以根据自己的需求选择“默认值”、“完全”或“自定义”模式安装组件。如果硬盘空间足够,建议用户完全安装。此处允许用户选择更改安装路径,,Visual Studio 2008,的默认安装路径为“,C:Program FilesMicrosoft Visual Studio9.0”,。,1.2.2,软件安装步骤(续),(,5,)完成设置,单击“安装”按钮,开始安装,安装软件将进入一个漫长的安装过程,如图,1-5,所示。,1.2.2,软件安装步骤(续),(,6,)安装完成后显示安装成功的窗体,如图,1-6,示,重新启动电脑,安装结束。,1.2.3 VS 2008,基本功能简介,(1),菜单栏,在标题栏下的水平栏,包含:文件、编辑、查看等,7,个菜单,(2),工具栏,为了操作更方便、快捷,常用的菜单命令按功能分组,被分别放入相应的工具栏中,方便开发人员的使用,(3),工具箱面板,工具箱是,Visual Studio 2008,的重要工具,它提供了进行,Windows,窗体应用程序开发所必需的控件,通过工具箱开发人员可以方便地进行可视化的窗体设计,简化了程序设计的工作量,提高了工作效率。,1.2.3 VS 2008,基本功能简介,(续),(4)“,属性”面板,“属性”面板是,Visual Studio 2008,的一个非常有用的工具。该面板为,Widows,窗体应用程序的开封提供了简单的属性修改方式,还提供了事件的管理功能,可以管理控件事件,方便编程时对事件的处理。如图,1-11,所示。,(5),代码编辑器,代码编辑器提供了强大的代码编辑功能,它提供了自动换行、渐进式搜索、代码的大纲显示等新功能,窗体如图,1-12,所示。,1.2.3 VS 2008,基本功能简介,(续),(6)“,错误列表”面板,编写程序代码、编译程序和运行程序过程中发现的错误都会显示到“错误列表”面板中。在开发过程中,“错误列表”面板会提示错误信息,方便开发人员可以从及时发现错误并修改错误。,(7)“,输出”面板,“输出”用于提示项目的生成情况。,1.3,命名空间,“,命名空间”,也称“名称空间”,是,VS.NET,中的各种语言使用的一种代码组织的形式,通过名称空间来分类,区别不同的代码功能,是解决命名冲突的主要途径。,命名空间是数据类型的一种组合方式,但在命名空间中所有数据类型的名称都会自动加上该命名空间的名字作为其前缀。命名空间还可以相互嵌套。例如,大多数用于一般目的的,.NET,基类位于命名空间,System,中,基类,Array,在这个命名空间中,所以其全名是,System.Array,。,.NET,需要在命名空间中定义所有的类型,例如,可以把,Customer,类放在命名空间,YourCompanyName,中,则这个类的全名就是,YourCompanyName.Customer,。,1.4,创建第一个,C#,项目,1.4.1,第一个控制台应用程序,.NET,可以实现多种应用程序开发,包括控制台应用程序、,Windows,窗体应用程序、,WPF,应用程序、,WCF,服务应用程序等。,创建步骤:,(,1,)选择“文件”,“,新建”,“,项目”命令,弹出“新建项目”的窗口。,1.4.1,第一个控制台应用程序,(续),(,2,)在“新建项目”窗口中,先选择左边“项目类型”列表框“,Visual C#”,选项,然后选择右边“模板”列表框“控制台应用程序”选项。在下方,需要输入项目名称“,HelloWorld,”,,选择项目保存位置。,(,3,)单击“确定”按钮,,Visual Studio 2008,自动生成应用程序。,1.4.1,第一个控制台应用程序,(续),(,4,)编写程序代码,在,Main,()函数中加入一行代码,用于显示“,Hello World”,。,static void,Main(string,args,),Console.Write(Hello,World);/,用于显示“,Hello World”,字符串,(,5,)最后运行程序。选择“调试”,“,启动调试(或按,F5,)”,也可以选择“调试”,“,开始执行(或按,Ctrl+F5,)”运行程序。,1.4.2,第一个,Windows,窗体应用程序,Windows,窗体应用程序就是,Windows,图形界面应用程序,它能通过窗体和对话框完成于计算机用户的信息交互,并实现一系列的功能。,开发步骤:,(1),选择“文件”,“,新建”,“,项目”命令,弹出“新建项目”的窗口,在“新建项目”窗口中,先选择左边“项目类型”列表框“,Visual C#”,选项,然后选择右边“模板”列表框“,Windows,窗体应用程序”选项。在下方,需要输入项目名称“,Welcome”,,选择项目保存位置,单击“确定”按钮。,1.4.2,第一个,Windows,窗体应用程序,(续),(2),查看“解决方案资源管理器”窗口,如图所示。在文件“,Form1.cs”,上单击右键,选择“重命名”,将其改名为“,Welcome.cs,”,。,(3),查看主窗口,里面自动生成一个名为“,Form1”,的窗体,然后单击右侧“属性”窗口,该窗口如图,1-20,所示,修改,Name,属性为“,Welcome”,,修改,Text,属性为“,Welcome”,。,1.4.2,第一个,Windows,窗体应用程序,(续),(4),单击主窗口左侧的“工具箱”窗口,出现一些,Windows,控件。,(5),双击“,Label”,控件,或者单击后按住左键将其拖至主窗口的窗体中,并设置“,Lable,”,控件的属性。,(6),双击“,Button”,控件,或者单击后按住左键将其拖至主窗口的窗体中,并设置“,Button”,控件的属性。,Name,lbtnShow,Text,显示,Name,lblDisplay,Text,空,BackColor,Window,1.4.2,第一个,Windows,窗体应用程序,(续),(7),双击“显示”按钮,将进入代码窗口,可以看到,VS.NET,已经自动生成了很多代码。进入代码窗口后,光标自动位于方法“,btnShow_Click,()”,内部,在光标处添加如下代码:,this.lblDisplay.Text,=Welcome to C#!;,(,8,)选择“调试”,“,开始执行(不调试)”菜单项,或者使用快捷键“,CTRL+F5”,运行程序,单击“显示”按钮,在标签中就会出现如图所示的结果。,1.5 MSDN,MSDN,的全称是,Microsoft Developer Network,是微软公司面向软件开发者的一种信息服务,是开发人员不可缺少的工具。,MSDN,实际上是一个以,Visual Studio,和,Windows,平台为核心整合的开发虚拟社区,包括技术文档、在线电子教程、网络虚拟实验室、微软产品下载等等一系列服务,它涵盖了所有的可以被开发扩充的平台和应用程序,作为一个学习者,更应该学会使用,MSDN,。,MSDN,的基本使用,(1),目录浏览,单击工具栏“目录”按钮,可以在主界面左侧,可以让用户快速的对,MSDN,的结构有一个大概的了解,为用户使用,MSDN,起到导航的作用。,(2),索引快速访问,单击工具栏“索引”按钮,可以在主界面的左侧,“,索引”面板。用户可以在“查询”文本框中输入所要查询的内容并回车,,MSDN,将自动搜索最匹配的技术文档,供用户阅读。,(3),搜索,MSDN,文档库,MSDN,还为用户提供了一种强大的搜索功能,可以提供对本地帮助、,MSDN Online,、,Codezone,社区等许多文档库的详细搜索。单击工具栏中的,搜索,按钮,并在文本框中输入搜索的内容提要,并回车,搜索的结果将以概要方式呈现在主界面中,用户可以根据自己的需要选择不同的文档进行阅读。,第,2,章,C#,程序设计基础,2.1 C#,语句,语句是构成程序的主要组成部分,编写任何程序都必须以语句为单位构成的。所谓语句,其实就是构造所有,C#,程序的过程构造块。,C#,语句可以分为,5,大类,分别是:,1.,控制语句,能 完成一定的控制功能,,C#,提供了,9,种控制语句。,2.,方法调用语句,由一次函数调用加一 个分号构成一个语句,3.,表达式语句,由一个表达式构成一个语句,4.,空语句,是由一个分号组成,不进行任何操作,5.,代码块,是可以用,把一些语句括起来成为复合语句,2.2,关键字与标识符,C#,语言主要由关键字、标识符、运算符等元素组成。这几种元素有着不同的语法含义和组成规则,它们之间相互配合,共同完成,C#,的语义表达。,2.2.1,关键字,关键字也被称为保留字,是,C#,语言本身使用的标识符,它有特定的语法含义,所有的,C#,关键字不用做标识符,其常见的关键字如右所示。,2.2.2,标识符,标识符是对程序中的各个元素,(,如变量、常量、方法等,),加以命名时使用的命名记号。在,C#,语言中,标识符是一个字符序列,它有特定的命名规则:,标识符必须以字母、下划线“,_”,或者“,”,开头,后面的字符可以是字母、下划线或数字,不能包含空格、标点符号、运算符等其他符号;,标识符不能命名为,C#,的关键字;,标识符不能命名为,C#,的库函数。,(1),变量,1.,数据类型,数值型:,byte,、,short,、,int,和,long,浮点型:,float,和,double,字符型:,char,布尔型:,bool,数值类型,C#,数据类型,大小,默认值,示例,sbyte,(byte),有,(,无,),符号的,8,位整数,0,byte,gpa,=2;,short (,ushort,),有,(,无,),符号的,16,位整数,0,short salary=3400;,int,(,uint,),有,(,无,),符号的,32,位整数,0,int rating=20;,long (,ulong,),有,(,无,),符号的,64,位整数,0L,long population=23451900;,float,32,位浮点数,精确到小数点后,7,位,0.0F,float temperature=40.6F;,double,双精度浮点型,,15,或,16,个有效数字,0.0,double temperature=40.6;,decimal,28,个有效数字的精确小数型,0.0,decimal temperature=40.6,变量(续),2.,变量声明,在,C#,中,使用变量之前必须声明。变量声明的语法规则如下:,type identifier=,value,identifier,=value,;,声明多个同类型的变量,可以用逗号隔开。,变量的两种方式赋值:,使用赋值运算符,(=),给变量,i,赋值,例如:,int,i;,i=10;,声明变量,并初始化它的值,例如:,int,i=10,;,变量(续),3.,变量的类型,在,C#,语言中,把变量分成,3,种类型,它们有各自的特点。,实例变量:是不带任何关键字的变量,例如:,int,i,。实例变量在其所在的方法调用结束后,其数据会被清除掉,所占的内存空间也会被释放。,静态变量:是使用了“,static”,关键字修饰的变量,例如:,static,int,i,。静态变量在函数调用结束仍保留变量值,直到程序结束前一直存在。另外,静态变量不在类的方法中定义,因为这没有意义。,局部变量:是指一个独立的代码块中声明的变量,只有在这个代码块中有效,一旦离开这个作用域,将不再存在。,(,2,)常量,常量的声明和变量类似,需要指定数据类型、常量名、初始值,并需要使用关键字,const,,常量声明的语法规则如下:,const typeidentifier=value,;,2.3,运算符与表达式,1.,一元运算符,一元运算符就是运算和一个变量就可构成一个表达式。,C#,的一元运算符包括自增运算符,(+),和自减运算符,(-),。自增运算符,(+),是操作数加,1,,自减运算符,(-),是操作数减,1,。,2.,二元运算符,二元运算符需要两个操作数的参与,常见的二元运算符,算术运算符:加,(+),、减,(-),、乘,(*),、除,(/),和取模运算符,(%),逻辑运算符:表示操作数的逻辑关系,其运算结果用布尔值表示。常见的逻辑运算符有,、,=,、,=,、,!=,、,&,、,|,、,!,。,位运算符:用来对数据按二进制位进行运算的操作符,其运算符包括与,(&),、或,(|),、异或,(),、非,(),、左移,(),3.,三元运算符,三元运算符,(,?:,),也叫做条件运算符,它需要三个操作数。该运算符的一般形式为:,exp1,?,exp2,:,exp3,;,其中,exp1,、,exp2,、,exp3,是表达式,首先计算,exp1,,如果结果为真,则将,exp2,的运算结果作为整个表达式的结果;如果结果为假,则将,exp3,的运算结果作为整个表达式的结果。,4.,其他简化运算符,+=,、,-=,、,*,=,、,/=,、,%=,、,&=,、,|=,、,=,、,=,运算符的优先级,表达式,表达式是可以结算且结果为单个值、对象、方法或命名空间的代码片段。表达式可以使用运算符和参数构成符号,C#,规则的式子,而参数又可以是由其他运算符与参数构成的表达式组成,因此表达式可以很简单,也可以很复杂。,在编写程序时,不同参数的数据类型可能不同,在,C#,中,这种进行数据统一的方法叫做转化。转换是可以把一个表达式的编译时类型当作另一种编译时类型处理。转化有隐式的或显式的。,隐式转换时,系统将按照数据类型的表示范围由小到大的转换原则自动进行。数据类型的表示范围由小到大的顺序依次为:小,大,即,byteshortcharintlongfloatdouble,;,显式转化正好相反,当数据类型的标识范围由大到小的顺序时,必须采用显式转化,否则编译器会报错。,2.4,枚举与结构,public class Holiday,public,enum,WeekDays,Monday,Tuesday,Wednesday,Thursday,Friday,public void,GetWeekDays,(String,EmpName,WeekDays,DayOff,),/,处理工作日,static void Main(),Holiday,myHoliday,=new Holiday();,myHoliday.GetWeekDays,(Richie,Holiday.WeekDays.Wednesday,);,1.,枚举(,Enum,,,Enumerator,的缩写)是一组已命名的数值常量,用于定义具有一组特定值的数据类型,以,enum,关键字声明:,Wednesday=2,枚举(续),C#,中的枚举包含与值关联的数字,默认情况下,将,0,值赋给枚举的第一个元素,然后对每个后续的枚举元素按,1,递增,在初始化过程中可重写默认值,枚举不能定义自己的方法、属性或事件,,枚举不能实现接口。,public,enum,WeekDays,Monday=1,Tuesday=2,Wednesday=3,Thursday=4,Friday=5,2.,结构,结构是几个数据组成的数据结构,它可以包含方法。结构声明的语法规则如下:,访问修饰符,struct,结构名,:,实现的接口,结构体,;,其中,,内容是可选的,访问修饰符可以是,public,、,private,等关键字。结构体的类型可以相同,也可以不同,甚至可以是其他的结构类型。,结构(续),定义:,struct,Point_self short x,y;,struct,RectArea,Point_self,LeftTop,;Point_self,RightBottoms,;,public void Drawing(),引用分量,p1.x=5;p1.y=10;p2.x=p1.x;p2.y=p1.y+5;,说明职员信息的结构,2.5,数组与集合,1.,数组,一维数组:,说明:,int,MyIntArray,;,Point,MyPointArray,;,创建:,int,MyIntArray,=new int5;,Point,MyPointArray,=new,PointarraySize,;,初始化:,String,MyFreandPhone,=,“,0288540233,”,”,02885412222,”,”,01088774563,”,;,访问数组的元素:从,0,开始,MyIntArray1=10,Console.writeline(MyFreandPhon1);,多维数组:,多维数组说明:,int,MyMatrix,;,int,My3Darray;,多维数组创建:,设,Length,width,是常量,int,MyMatrix,=new,intlength,width;,多维数组初始化:,int,MyMatrix,=1,,,2,,,3,,,4,,,4,,,3,,,2,,,1,,,9,,,8,,,7,,,6;,多维数组元素引用:,MyMatrix2,,,3 3,行,4,列的元素,数组(续),2.,数组运算:,数组元素的遍历:是指全部访问数组中的元素一次且仅一次,,C#,提供了,foreach,语句以实现数组的遍历功能,使用,foreach,语句可以访问数组中的每个元素而不需要知道每个元素的下标。,查找数组元素:在数组中查找元素,可以有两种结果,一是从整个数组中寻找与给定值相同的元素,二是判断数组中是否含有与给定值相同的元素。最常用查找方法有:顺序检索、二分检索、使用,System.Array.IndexOf,方法检索。,数组排序:将数组中的元素值按递增或递减的次序排列。数组排序的算法有很多,常用的有选择法、冒泡法、插入法、合并排序等。,数组中元素的插入和删除;,集合,集合是指一组类似的对象,,C#,提供了强大的集合操作能力。集合类似于数组,但是可以用笔数组更灵活、更有效的方式处理集合中的数据项。,1.,一般集合,一般集合是常见的集合数据结构,包括以下几种:,列表,(,ArrayList,),:一个一维的动态数组,可以装载一组相似的数据元素;,队列,(,Quene,),:先进先出的列表;,堆栈,(Stack),:先进后出的列表;,哈希表,(,Hashtable,),:集合中的每个元素都是一个,对的列表;,字典,(,DictionaryEntry,),:一个,对。,集合(续),2.,常见集合操作,列表,(,ArrayList,),:,C#,提供了实现列表,(,ArrayList,),的常用属性和方法,其说明如下所示:,Capacity,:获取或设置,ArrayList,可包含的元素数,Count,:获取,ArrayList,中实际包含的元素数,Item,:获取或限制指定索引处的元素,Add/,AddRange,:将对象添加到,ArrayList,的结尾处,Clear,:从,ArrayList,中移除所有元素,Index/,IndexRange,:将元素插入,ArrayList,的指定索引处,Remove/,RemoveRange,:从,ArrayList,中移除特定对象,Sort,:对,ArrayList,或其中一部分的元素进行排序,队列,(Queue),:,C#,提供了实现队列,(Queue),的常用属性和方法,其说明如下所示:,Count,:获取,Queue,中实际包含的元素数,Clear,:从,Queue,中移除所有元素,Enqueue,:入队操作,Dequeue,:出队操作,堆栈,(Stack),:,C#,提供了实现堆栈,(Stack),的常用属性和方法,其说明如下所示:,Count,:获取,Stack,中实际包含的元素数,Clear,:从,Stack,中移除所有元素,Push,:入栈操作,Pop,:出栈操作,第,3,章 程序控制结构,重点内容,了解顺序结构,理解与应用,if,和,switch,分支选择语句,理解与应用,while,、,do-while,和,for,循环语句,理解与应用,break,和,continue,控制转向语句,3.1,顺序结构,顺序结构就是各语句按出现的先后次序执行。,程序的执行过程是:先执行语句,A,,然后执行语句,B,,最后执行语句,C,。,3.2,分支选择结构,分支结构,顾名思义,是指程序进入分支结构后,面临走哪一条路、执行哪一条分支的选择。选择是通过对某一个条件进行测试后做出的,条件往往由关系或逻辑表达式来描述。,if,语句,1.,简单,if,语句,简单,if,语句只在条件为真时执行一个分支,当条件为假时不做任何操作,其语法规则如下:,if(,布尔表达式,),语句,(,组,),其执行的流程右图所示。,2.if-else,语句,当指定布尔表达式为真时执行一个分支,当条件为假时执行另一个分支,其语法规则如下:,if(,布尔表达式,),语句,(,组,),else,语句,(,组,),其执行的流程右图所示。,if,语句(续),3.,嵌套,if,语句,if,语句中包含其他,if,语句,则内层的,if,语句嵌套在外层,if,语句中。内层,if,语句又可以包含其他的,if,语句,这种嵌套的深度没有限制,其语法规则如下:,if(,布尔表达式,1),语句,(,组,),else if(,布尔表达式,2),语句,(,组,),else,语句,(,组,),其执行的流程图右图所示。,嵌套,if,语句可以实现多重选择,但是使用嵌套,if,语句时,太多层的,if,语句容易引起混乱,而且一定要注意,if,与,else,的匹配。,【,例,4-6,】,求分段函数的值。,设有一个数学函数的表达式为:,程序流程如图所示。,开始,输入变量,x,输出结果,x0?,y,1,结束,Yes,No,X,0?,y,0,y,1,Yes,No,switch,语句,witch,语句实现多重条件选择,其语法规则如下:,switch,(表达式),case,表达式值,1,:,语句块,1,;,break,;,case,表达式值,2,:,语句块,2,;,break,;,default,:,语句块;,break,;,其中,每个可能的分支都对应着一个,case,语句,,switch,判断表达式的值符合哪一个,case,语句中的表达式值,就执行这个,case,语句对应的分支,其执行的流程图所示。,switch,语句(续),使用,switch,语句必须注意以下规则:,表达式必须能计算出一个,char,、,byte,、,short,或,int,型值;,switch,表达式的值与,case,表达式值必须是相同的数据类型;,关键字,break,语句是可选的,编写,break,语句可以避免编程错误,提高代码的可维护性;,关键字,default,语句是可选的。,3.3,循环结构,当程序需要不停执行某种功能,直到达到某种条件才停止,可以采用循环结构实现。循环中要重复执行的语句块称为循环体,每个循环包含一个循环条件,它是控制循环体执行的布尔表达式,每循环一次后都要重新计算循环条件。若条件为真,重复执行循环体,若条件为假,终止循环。,C#,提供了,4,种循环语句:,for,循环语句、,while,循环语句、,do-while,循环语句和,foreach,循环语句。,for,循环语句,for,循环语句是最常见的一种循环结构,一般情况下,它使用一个变量来控制循环体的执行次数和终止条件,其语法规则如下:,for,(初始化操作;循环条件;每次循环后的操作),语句块;,/,循环体,for,语句小括号中的初始化操作、循环条件和每次循环后的操作都是用分号隔开,通常初始化操作初始化循环条件中的变量,每次循环后的操作增加或减少这个变量,而循环条件检验这个变量是否达到终止值,其执行的流程如图所示。,while,循环语句,while,循环语句是另一种常用的循环结构,它对于循环次数有限但又不知道具体次数的情况相当有效,其语法规则如下。,while,(循环条件),语句块;,/,循环体,while,循环语句的功能是:当给定的循环条件为真时,执行循环体,当给定的循环条件为假时,则终止循环。,while,循环语句不用知道循环体的循环次数,相比,if,循环语句更加灵活,其程序流程如图所示。,使用,while,循环语句时,应该注意以下规则:,while,循环语句先对循环条件进行计算,然后才决定是否执行循环体,只有在循环条件为真时才执行循环体。如果条件从开始就不成立,则一次循环体也不执行;,当循环条件第一次出现为假时,循环才能终止。,do-while,循环语句,do-while,循环语句是,while,循环语句的变体,它跟,while,循环语句类似,当循环条件为真时,循环体就会不断地重复执行,当循环条件为假时,则终止循环、退出循环语句,其语法规则如下:,do,语句块;,/,循环体,while,(表达式);,do-while,循环语句是先执行循环体后进行循环条件判断,所以,do-while,循环语句至少执行一次循环体,其程序流程如图所示。,foreach,循环语句,foreach,循环语句是一条新语句,该语句为数组或对象集合中的每个元素重复一个嵌入语句组,它用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用其语法规则如下:,foreach,(类型 变量名,in,集合对象),语句块;,/,循环体,嵌入语句为数组或集合中的每一个元素继续执行。当集合中的所有元素完成循环后,终止并退出循环。,常用算法,累加、连乘,在循环结构中,最常用的算法时累加和连乘。累加是在原有的基础上一次一次地每次加一个数;连乘则是在原有乘的基础上一次一次地每次乘以一个数。,【,例,3.7,】,求自然对数,e,的近似值,要求其误差小于,0.00001,,近似公式为,e=1+1/1!+1/2!+1/3!+1/n!,。(程序见教材例,3.7,),2.,求素数,素数,又称为质数,是一个大于,2,的整数,并且只能被,1,和本身整除,而不能被其他整数整除的数。,判别某数,n,是否为素数的方法很多,最简单的是从素数的定义求解,其算法思想是:对于,m,从,i=2,3,,,n-1,判别,n,能否被,i,整除,只要有一个能整除,,n,不是素数;否则,n,是素数。,【,例,3.8,】,求,1000,以内的素数。(程序见教材例,3.8,),3.4,控制转向的语句,C#,为程序控制结构提供了,4,种不同的控制跳转语句:,break,、,continue,、,return,和共同语句。在前面的循环结构中,为了提供程序效率,需要强制跳出循环,就必须使用控制跳转语句。,break,语句,break,语句是用于立刻终止语句的执行。在循环语句中,,break,语句用于包含它的最内层循环。同样地,它还可以用于中断,if,语句和,switch,语句。当程序执行到,break,语句,程序跳转到北终止执行的语句后,其语法规则如下:,break,;,continue,语句,continue,语句与,break,语句一样,可以实现跳转。当程序遇到,continue,语句后,结束当前进行的这次循环,将程序控制转移到循环体尾部,以便进行下一次循环条件判断。,continue,语句与,break,语句的区别是,,break,语句终止整个循环的执行,而,continue,语句只终止当前这一次循环的执行,其他的循环可以继续进行,其语法规则如下:,continue,;,return,语句,return,语句是终止包含它的方法的执行,并将控制返回到主调函数继续执行,它返回时可附带一个可选值。如果方法为,void,类型,则可以省略,return,语句,其语法规则如下:,return,;,goto,语句,goto,语句属于无条件跳转语句,,C#,语言支持代码行加上标签,这样就可使用,goto,语句直接跳转到标签代表的语句上。,goto,语句一个好处就是可以保证程序存在唯一的出口,避免了过于庞大的,if,嵌套,但是由于它是无条件跳转,可读性差,所以建议只用在多重循环的跳出,其它情况尽量不用,其语法规则如下:,goto,标签;,goto,语句(续),【,例,4-10,】,goto,语句的简单应用。,using System;,class Program,static void,Main(string,args,),goto,h;,w:,Console,.,WriteLine,(world!);,return;,h:,Console,.Write(hello);,goto,w;,程序的运行效果如图所示,常用算法实例,1.,穷举算法,穷举也称为枚举,是最常用的算法之一,它的基本思想是一一列举各种可能进行测试,从中找出符合条件的解。计算机能够实现高速运算,是由于它借助于循环结构实现穷举,它比人工操作更为有效。,【,例,3.9,】,用穷举算法,在,5,行中显示自然数中的前,50,个素数,并按一行十个素数输出。,namespace _3._9,class Program,static void,Main(string,args,),int,count=0,number=2;,bool,isPrime,=true;,Console.WriteLine,(,自然数中前,50,个素数列表为:,);,while(count 50),isPrime,=true;,/,判断是否为素数,for(,int,j=2;j=(,int)(Math.Sqrt(number,);j+)/,减小穷举的规模,if(number%j=0),isPrime,=false;,break;,if(,isPrime,=true),count=,count,+1;,if(count%10=0),Console.WriteLine(number,);,else,Console.Write(number,+);,number+;,程序运行结,果如图所示。,常用算法实例(续),2.,迭代算法,迭代就是不断由已知值推出新值,直到求解为止。显然,迭代算法是利用计算机的高速运算能力和循环程序来实现的。一般来说迭代由,3,个环节组成:,迭代初始值,迭代公式,迭代终止条件,【,例,3.10,】,用迭代算法计算:,20+21+22+263,。,namespace _3._10,class Program,static void,Main(string,args,),float t=1,s=0;/,迭代初始条件,for(,int,i=0;i“,逐语句”开始单步执行程序,程序首先暂停在主函数的第一行,使用快捷键,F10,或,F11,单步执行程序。,F10,与,F11,的区别是:,F10,可以跳过一行代码中所调用的方法。,2.,设置断点:单,VS 2008,提供了设置断点解决大规模程序差错。在设置断点时,首先把光标放置指定的地方,使用快捷键,F9,或,Ctrl+B,,或者选择“调试”,“,新建断点”,如图下所示。,设置断点后,选中这个断点,右键单击该断点,选择“条件,”,选项,即可出现右图所示的设置“断点条件”窗口。设置断点条件完成后,单击调试按钮或使用快捷键,F5,,运行程序,当程序运行到指定的断点位置,并满足断点暂停条件时,代码会暂停运行,此时就可以使用单步执行方式来仔细观察程序的运行状态,找出程序的错误地点。,4.3,捕获异常,C#,中可以使用,try-catch,语句来捕获程序抛出的异常,其语法规则如下所示:,try,处理代码;,catch,(异常),/,捕获异常,捕获异常;,4.4,异常处理,当出现异常后,,C#,用,try-catch,语句捕获异常,它还提供了对异常处理的内建支持,即通过,try-catch,语句、,try-catch-finally,句语和,throw,语句实现结构化、统一化的类型安全的异常处理。,try-catch,语句,在,try-catch,语句中,,try,语句会捕获到程序出现的异常,然后将程序控制转移到相应的,catch,语句中。如果,try,语句没有遇到任何异常,则程序直接执行,try-catch,语句后面的代码。一个,try-catch,语句中,可以使一个,try,语句后匹配一个或多个,catch,语句,程序根据,try,语句指定的异常类型与,catch,语句中指定的异常类型匹配关系,执行相应的,catch,语句。,try-catch-finally,语句,在,try-catch-finally,语句中,无论是否出现异常,是否有,catch,语句,,finally,语句一定会执行,其语法规则如下所示:,try,处理代码;,catch,(异常),/,捕获异常,捕获异常;,finally,代码块;,throw,语句,throw,语句用于抛出在程序执行期间出现异常情况的信号。,throw,语句通常与,try-catch,或者,try-catch-finally,语句配合使用。开发人员可以使用,throw,语句显示抛出异常(即开发人员自定义的异常)。,不捕捉异常的后果,捕捉,C#,
展开阅读全文