C#简单程序设计.ppt

上传人:小飞机 文档编号:5416949 上传时间:2023-07-05 格式:PPT 页数:65 大小:260KB
返回 下载 相关 举报
C#简单程序设计.ppt_第1页
第1页 / 共65页
C#简单程序设计.ppt_第2页
第2页 / 共65页
C#简单程序设计.ppt_第3页
第3页 / 共65页
C#简单程序设计.ppt_第4页
第4页 / 共65页
C#简单程序设计.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《C#简单程序设计.ppt》由会员分享,可在线阅读,更多相关《C#简单程序设计.ppt(65页珍藏版)》请在三一办公上搜索。

1、C#应用程序设计教程,本课程的前序课程:大学本专科计算机导论 本课程主要讲述内容:Windows客户端应用程序设计,本书详细内容,第1章简单程序设计 第2章数据类型 第3章C#面向对象编程基础 第4章程序调试与异常处理 第5章C#可视化编程基础 第6章常用控件和类的使用 第7章文本编辑器的实现 第8章图形图像编程 第9章文件和流 第10章多线程和Socket编程初步 第11章数据库与ADO.NET,C#及Visual Studio开发工具介绍,C#2000年 C#诞生 2001年 C#被ECMA(欧洲计算机制造者协会)规定为高级 语言开发标准(ECMA-334)2003年 C#被ISO(国际标

2、准化组织)规定为高级语言开发 标准(ISO/IEC 23270)VS开发工具 2003年 发布Visual Studio.NET 2003(VS.NET2003)2005年11月 发布Visual Studio 2005(VS2005)英文版 2006年1月 发布VS2005 Professional简体中文版,VS2005的各种版本(功能从最强到最弱)VS2005 Team 版本 用于大型团队开发 VS2005 Professional版本 用于大中型软件公司 VS2005 Standard版本 用于小型软件公司 VS2005 Express版本 用于业余开发者(初学者)本课的上机实验环境

3、VS2005 Express版本 安装建议(1)操作系统使用 WindowsXP SP2(2)至少256MB内存,最好512MB,第1章 简单程序设计,Microsoft.Net FrameWork(微软.Net架框,以下简称.Net FrameWork)是微软提出的新一代软件开发模型,是一种面向网络、支持各种用户终端的开发平台环境,是生成、部署和运行所有.NET应用程序的基础。它包括以下2个主要部分。,1.1.NET平台简介,1.1.1 公共语言运行环境,公共语言运行环境(Common Language Runtime,简称CLR)是.NET框架的基础。.NET源程序首先被编译为微软中间语言

4、(Microsoft Intermediate Language,简称MSIL)代码,形成扩展名为.exe或.dll文件,MSIL定义了一系列与CPU类型无关的可移植指令集,可在CLR中运行。扩展名为exe或dll的可执行文件运行时,CLR同时运行。MSIL语言代码不是CPU可执行的机器码,CLR中的JIT编译器(Just In Time)负责将MSIL代码翻译成机器代码在CPU中运行,由CLR来管理.NET应用程序的运行,CLR提供内存管理、线程管理、远程管理等服务,并对程序代码的安全和可靠性把关。可编写在任意指定操作系统中运行的CLR,凡是使用符合公共语言规范(Common Languag

5、e Specification,CLS)的语言开发的程序均可在其上运行。因此,.NET源程序具有平台无关性。,1.1.2 框架类库,为了提高开发效率,各种开发平台都为用户提供工具类库,如C+的MFC、JAVA的WFC、VB的VBRUN等。.NET框架提供了一个统一的、面向对象的、层次化的可扩展编程接口:框架类库(Framework Class Libraries,FLC),使得开发人员可以在.NET环境下使用各种不同的语言来进行应用开发。按照应用领域的不同,.NET将类库划分为四个部分:,基本类库:提供输入/输出、字符串操作、安全性管理、网络通信、文本管理等标准功能。ADO.NET:数据库访问

6、及XML类。ASP.NET:Web服务和Web窗体,用来建立强大的Web应用程序。Windows窗体类:Windows窗体支持的一组类,用于开发基于Windows的图形用户界面应用程序。总之,.NET开发框架在公共语言运行时的基础上,为开发者提供了完善的类库,开发者可使用多种语言及Visual Studio开发工具来快速构建下一代的网络应用。,1.2 C#语言特点,Microsoft.Net FrameWork是微软提出的新一代软件开发模型C#语言是.Net FrameWork中新一代的开发工具C#语言编写的源程序,被C#语言编译器编译为中间语言代码(MSIL),由通用语言运行环境(CLR)中

7、的既时编译器(JIT)将中间语言代码翻译为CPU可执行的机器码,由CPU执行,CLR为C#语言中间语言代码运行提供了一种运行时环境,C#语言的CLR和JAVA语言的虚拟机类似。这种执行方法使运行速度变慢,但带来其他一些好处,主要有:通用语言规范 自动内存管理 交叉语言处理 更加安全 版本支持 完全面向对象,1.3 编写控制台应用程序,【例1.1】程序的代码如下:/在屏幕输出一行欢迎信息,从第一个/开始到本行结束是解释using System;/引用命名空间Systemnamespace MyApplication/声明命名空间MyApplication class Test/class是关键字

8、,表示定义一个类,Test是类名/主函数(方法)Main,必须是静态的 static void Main(string args)/语句,调用方法WriteLine输出字符 Console.WriteLine(欢迎使用C#!);/大括号必须成对出现,用微软Visual C#2005 Express Edition(以后简称VS2005)生成控制台程序,具体步骤如下:(1)运行VS2005程序,单击菜单“文件(F)|新建项目(P)”菜单项,打开“新建项目”对话框如下图。在模板(T)列表框中选择控制台应用程序,单击确定按钮,创建项目。,(2)出现如下图界面,按图中那样修改Program.cs文件。

9、编写一个应用程序可能包含多个文件,才能生成可执行文件,所有这些文件的集合叫做一个项目,项目名称可以是任何标识符,本项目名称为ConsoleApplication1。,(3)按CTRL+F5键,运行程序,运行结果如图1.3。需要注意的是,和以往使用过的绝大多数编译器不同,C#编译器只执行编译过程,不经过链接直接生成扩展名为.exe的可执行文件或扩展名为.dll的动态链接库,C#编译器中不包含链接器。,(4)单击菜单文件(F)|全部保存(L)菜单项,打开保存项目对话框,在名称(N)编辑框中键入保存的项目文件名称:控制台程序,在解决方案名称(M)编辑框中键入保存的解决方案名称:例1_1。单击位置(L

10、)编辑框后的浏览(B)按钮,选择保存的文件的路径,在该路径下将创建文件夹例1_1,项目的所有文件都保存到这个文件夹下。这里请注意,必须保存项目的所有文件,将来才能重新打开项目。如仅保存Program.cs,将不能重新打开项目。,1.4 程序结构,C#程序结构是指构成应用程序的必要元素,包括程序组成要素、语法规则及书写格式等。1.4.1 C#程序的组成要素 例1.1是一个简单的控制台应用程序,其功能是在屏幕上输出一行字:欢迎使用C#!。分析这个程序,可以看出C#程序有命名空间、类和方法、语句和大括号等组成要素。,1.标识符 标识符是程序中为一些要素所定义的名称,如例1.1中的命名空间名MyApp

11、lication、类名Test、方法名Main等。程序中所有定义的标识符都有实际意义是很好的编程习惯。标识符命名时必须遵循如下命名规则:由字母、数字、下划线_组成,C#语言中标志符允许包含中文字符。第一个字符必须是字母、中文字符或下划线,不能是数字或除下划线外的特殊字符。C#对字母大、小写敏感,两个标识符即使只是对应字母大、小写不同,也是不同的标识符,这点和VB 语言不同。标识符不能与关键字同名。,如例1.1程序中的MyApplication、Test、Main等都是合法的标识符。而下面的标识符都是非法标识符。2example/非法起始字符,起始字符不能是数字#200/非法起始字符,起始字符不

12、能是特殊字符 Hello*/含有非法字符“*”,标识符中不能有“*”if/if是关键字,关键字不能作为标识符 Hello World/含有非法字符空格标识符中不能有空格,2.关键字 在C#代码中的关键字是由C#语言定义并使用的具有特定意义的字符串,它们不能在程序中用作标识符。在VS2005环境的代码视图中关键字默认以蓝色显示。如例1.1代码中的using、namespace、class、static、void等,均为C#的关键字。3.类和方法 C#语言用类来组织程序的变量和方法,所有变量和方法必须定义在一个类中。例1.1程序Class Test语句定义了一个名为Test的类,其中关键字Clas

13、s表示定义一个类,Test是类名。在类Test中声明了一个名为Main的方法,用来指示应用程序从该处开始执行。C#要求每个程序必须且只能有一个Main方法,该方法必须是静态的(用static修饰),所谓静态方法表示程序运行后,该方法就已存在,可以使用,Main方法必须放在某一个类中。类中还可以定义其他方法。有关类和方法的详细内容将在后面章节详细介绍。,4.命名空间 命名空间是C#语言提供的对类库程序和程序员编写的程序分层组织方式,不同程序代码可以分类放到不同的命名空间中,为使用和维护这些程序提供了方便,使用命名空间的另一个原因是减少程序中标志符同名的可能性,不同命名空间中的标志符可以同名,同一

14、命名空间中的标志符不能同名。命名空间有两种,一种是系统预定义的命名空间,它提供系统预定义的基本数据类型和程序代码,供设计程序时使用,由using关键字导入。如例1.1程序中“using System;”语句,就导入了System命名空间,它提供了构建应用程序时所需要的所有系统功能,代码中的“Console.WriteLine”就是该命名空间提供的Console类(控制台类)中定义的在屏幕输出一行字符的方法WriteLine。在创建项目时,VS2005会自动生成导入该命名空间的代码,并且放在程序的第一行。,另一种是用namespace关键字声明的用户自定义命名空间,例1.1中的“MyApplic

15、ation”就是用户自定义命名空间。全局命名空间应是源文件using语句后的第一条语句。在一个命名空间声明中还可以声明该命名空间的子命名空间。在同一命名空间中,不允许出现同名命名空间成员或同名的类。例子如下:using System;namespace N1 namespace N2/命名空间N1的子命名空间成员N2 class A/在N2命名空间定义的类不应重名 static void f1();class B static void f2();,也可以采用非嵌套的语法来实现以上命名空间:namespace N1.N2/类A、B在命名空间N1.N2中class A static void f

16、1();class B static void f2();不同文件中的程序,如果使用相同命名空间名称声明,表示这些程序在同一个命名空间中。如在一个程序中,需引用其他命名空间的类或函数,可以使用语句using,例如需使用上边定义的方法f1()和f2(),可以采用如下代码:,using N1.N2;class WelcomeAppA.f1();using N1.N2是告诉应用程序到哪里找到类A。如果不使用using语句,应使用如下形式:class WelcomeApp/表示类A在命名空间N1.N2中N1.N2.A.f1();命名空间声明不是必须的,例如在上述程序中,可以不声明“MyApplicat

17、ion”这一用户自定义命名空间,程序照样可以正常运行,系统将所定义的程序放到默认的命名空间中。但在实际的程序开发过程中,一个程序往往由许多模块组成,使用命名空间有利于程序的组织和管理。,5.语句 语句就是C#程序中执行操作的指令。在C#语言语句必须用分号;结束,这也是与VB不同的地方。可以一行上书写多条语句,也可以将一条语句书写在多行上。当语句中包含不同层次的内容时,C#用点“.”操作符表示从属关系。比如例1.1代码第6行通常应该写成如下形式:(欢迎使用C#!);其中,“System”表示一个命名空间,“Console”表示该命名空间中的一个类,“WriteLine”表示该类中的一个方法。不过

18、,因为在第2行中使用了using指令,已经导入了“System”命名空间,所以使用该空间中的类时,不必显示给出命名空间的名称。,6.大括号 在C#中,大括号和是一种范围标志,是组织代码的一种方式,用于标识应用程序中逻辑上有紧密联系的一段代码的开始与结束,和必须成对出现。大括号可以嵌套,以表示应用程序中的不同层次,例如,在例1.1程序中命名空间MyApplication下的大括号标识该命名空间的代码范围,类Test下的大括号标识该类的代码范围,方法Main下的大括号,标识该方法的范围。并且类Test包含在命名空间MyApplication中,方法Main又包含在类Test中。,1.4.2 C#程

19、序的格式,C#程序中的代码应按照一定的格式书写,代码格式有两类:一类属于C#的语法规则,这类格式必须遵守;还有一类属于结构格式,这在程序设计中不是必须的,但统一结构格式的书写方法有助于使代码层次清晰,从而提高程序的可读性,提高编程效率。1.缩进与空格 缩进用于表示代码的结构层次,这在程序设计时不是必须的,但是缩进可以清晰地表示程序的结构层次。例如在例1.1程序中,命名空间及标识其范围的一对大括号顶格书写,命名空间中的类及标识其范围的一对大括号向内缩进一个制表位,类中的方法及标识其范围的一对大括号向内缩进两个制表位,方法中的语句向内缩进三个制表位。,2.注释例1.1程序的第1行是注释,它指出了该

20、程序的文件名及该程序的主要功能。在程序代码中加上必要的注释可以提高程序的可读性,便于维护。一般情况下,每定义一个类、方法和结构等,都要在头部用注释说明其用途、使用方法、参数意义等。C#中注释有两种:单行注释:以“/”开始,本行其后的所有字符都是注释信息,注释到行尾结束。多行注释:以“/*”开头、“*/”结束,可以换行,其间的字符均被视作注释字符。例如,一个文件的头部都应使用注释增加如下信息:/*版权信息*文件名称*程序功能简介*作者,完成日期*/,1.5 基本数据类型和表达式,本节先介绍C#语言内置数值类型、字符类型和布尔类型数据,然后介绍表达式和运算符。,1.5.1 基本数据类型,本节介绍C

21、#语言内置的基本数据类型。根据数据的性质可分为四类,即数值型、字符型、布尔型和对象型。本节不介绍内置对象类型,有关内容在后续章节介绍。1.数值类型 数值类型有整数与实数类型两种,每种类型所占内存位数、其取值范围见下表所示。,整数 整数可以用十进制表示,如123、45678等;也可以用十六进制表示,如0 x12、0X3A等,即在数字前面加“0 x”或“0X”。C#的整数没有八进制表示形式。一般说来,整型常量值的默认数据类型是int型,但当其值超出了int型的取值范围时,它将根据其数值大小相应被视为一个unit型、long型或ulong型。也可在整型常量后加后缀将它显示说明为指定类型,例如后缀U(

22、或u)指定整数为uint或ulong型(视其值大小而定)。如果在整型常量后同时加上这两种后缀UL,它就是一个ulong型常量。123456L/long类型 25u/uint类型 25ul/ulong类型,浮点数 浮点型常量只能用十进制表示,共有两种表示形式:一般形式和指数表示形式。一般形式又称小数表示形式,浮点数由整数和小数两部分组成,其中整数部分为0时在实际使用时可省略。例如:2.6,.9,8.0,小数部分不能省略,此与C+语言不同。如8.0不能写成8.。指数表示形式时,浮点数由尾数、字母E(或e)、指数部分组成。例如:2.3E12,.25E6,-0.35E-5。浮点型常量默认类型为doub

23、le型,如果要将其说明为float型,需在其值后加后缀F(或f)。如果要将其说明为decimal型,需在其值后加M(或m)。也可在数值后加上后缀D(或d)将其显示说明为double型。例如:2.8f,6.9D,4.6E7M。,2.字符类型(char)字符型数据在内存中占2字节,包括数字字符、英文字母、表达符号、中文等,数据范围是065535之间的Unicode字符集中的单个字符。采用Unicode字符集可以表示世界上大多数语言。字符型数据通常情况下就是用单引号括起来的一个字符。例如:A,1,*,#此外,C#语言还提供了一些转义字符,以反斜杠“”开头,后跟一个字符或Unicode码。书中表1-2

24、列出了C#语言中常用的转义字符。3.布尔型 布尔型数据表示布尔逻辑量,只有两个值“true”(真)和“false”(假)。布尔型数据为程序进行复杂的判断提供了数据类型依据。和C语言不同,不能认为0是false,其他值是true。,1.5.2 常量和变量,1.变量 变量是指在程序运行过程中值可以发生变化的量。C#中要求变量在使用前必须先声明后使用。变量名必须为合法标识符,有关变量的命名规则参见小节中的标识符命名规则。变量定义的一般形式为:类型 变量名表;其中变量名表可以是单个变量,也可以是多个变量的列表。下面是一些合法的变量定义形式。char ch;/声明了一个字符型变量chint num,su

25、m;/声明了两个整型变量,num和sumdouble total,salary;/声明了两个双精度变量total和salary此外,也可以在定义变量时对其进行初始化,例如:char ch=a;/定义了一个字符型变量ch,并为其赋初值“a”int x=50,y;/定义了两个整型变量x和y,并为x赋初值为50/常量1.25后加了f是将值1.25强制转换为float型(默认情况下/1.25为double型)float ff=1.25f;/定义了一个单精度变量ff,并为其赋初值为1.25,2.常量:常量是在程序运行中值保持不变的量。常量有直接常量和符号常量两种。直接常量:在节中介绍的各种类型的常数,其

26、取值直接反映了其类型,故称作直接常量。符号常量:符号常量使用const或readonly关键字来定义,格式如下:const 类型 符号常量名=常量表达式;“常量表达式”的意义在于该表达式不能包含变量及函数等值会发生变化的内容。常量表达式中可以包含其他已定义常量。例如:const int min=-32767;/合法const double PI=3.14;/合法const double TT=PI*min;/合法,表达式包含两个已定义常量int RR=10;const double SS=PI*RR*RR;/不合法,表达式中包含变量,1.5.3 运算符和表达式,运算符是表示实现某种运算的符号。

27、表达式是由变量、常量、运算符和圆括号等按一定的规则组成的式子。表达式经过运算后产生一个结果,其类型由数据和运算符共同决定。1.算术运算符和算术表达式 下表按列出了C#中的算术运算符,其中“-”运算符在单目运算(单个操作数)中作取负号运算,在双目运算(两个操作数)中作减法运算。以下介绍的操作符的操作数可为整数类型和实数类型,结果仍为数值型数据。(表1-3中,设变量a、b、c为整型,值为5),2.关系运算符和关系表达式 关系运算符用于对两个操作数进行比较,判断关系是否成立,结果为逻辑值。若成立则结果为true,否则为false。关系运算符有六种:、=、=、=、!=,依次为大于、大于等于、小于、小于

28、等于、等于、不等于。关系运算符用于数值型数据时,比较的是两个操作数的实值。用于字符型数据比较时,比的是字符的Unicode编码值。注意等于“=”和赋值运算符“=”的区别,如:“a=b”中是将b的值赋值给a,从而使得a和b的值相等,而“a=b”则是判定a与b的值是否相等,并不会修改a或b的值。3.逻辑运算符和逻辑表达式 常用的逻辑运算符是!(非)、&(与)、|(或),逻辑运算符的操作数是布尔类型,运算结果也是布尔类型。使用逻辑运算符将多个关系表达式连接起来,构成的表达式叫逻辑表达式,用来表示复杂的逻辑关系,逻辑表达式的运算结果也是布尔类型。例如有如下声明:,int a=5,b=3,x=10,y=

29、20;/两个条件必须同时成立才为true,因此mark=falsebool mark=(a b)/c的值为25,使得c取a和b中较大的值。,5.赋值运算符和赋值表达式 赋值运算符包括单赋值运算符和复合赋值运算符。“=”是简单赋值运算符,其作用是将“=”右边表达式的值赋给其左边的操作数(称左操作数,通常为一个变量)。复合运算符是由“=”与其他运算符结合在一起组成的,如“+=”、“-=”、“*=”、“/=”等。例如:“x+=y”相当于“x=x+y”。6.溢出检查操作符checked和unchecked 在进行整型算术运算(如+、-、*、/等)或从一种整型显式转换到另一种整型时,有可能出现运算结果超

30、出这个结果所属类型值域的情况,这种情况称之为溢出。整型算术运算表达式可以使用checked或unchecked溢出检查操作符,决定在编译和运行时是否对表达式溢出进行检查。如果表达式不使用溢出检查操作符或使用了checked操作符,常量表达式溢出,在编译时将产生错误,表达式中包含变量,程序运行时执行该表达式产生溢出,将产生异常提示信息。而使用了unchecked操作符的表达式语句,即使表达式产生溢出,编译和运行时都不会产生错误提示。但这往往会出现一些不可预期的结果,所以使用unchecked操作符要小心。下面的例子说明了checked和unchecked操作符的用法:,using System;

31、class Teststatic void Main(string args)const int x=int.MaxValue;/x等于int类型所能表示的最大数unchecked/不检查溢出int z=x*2;/编译时不产生编译错误,z=-2Console.WriteLine(z=0,z);/显示-2checked/检查溢出int z1=(x*2);/编译时会产生编译错误Console.WriteLine(z=0,z1);,1.5.4 运算符的优先级与结合性,优先级是指当一个表达式中出现不同的运算符时,先进行何种运算。结合性是指当一个表达式中出现两个以上的同级运算符时,是由左向右运算还是由右

32、向左运算。C#中运算符的优先级有如下特点:一元运算符的优先级高于二元和三元运算符。不同类运算符的优先级关系是:算术运算符关系运算符逻辑运算符条件运算符赋值运算符。同类运算符中优先级也有高低之分。算术运算符中,乘、除、求余高于加、减;关系运算符中,小于、小于等于、大于、大于等于高于相等和不相等;逻辑运算符的优先级为非与或。当一个操作数出现在两个有相同优先级的运算符之间时,运算符按照出现的顺序从左向右执行(赋值运算符均为从右向左执行)。,1.6 控制结构,学习了基本数据类型、运算符和表达式,就可以采用控制结构来编写程序。本节介绍C#语言中的控制结构,包括顺序结构、选择结构、循环结构和跳转语句。,1

33、.6.1 顺序结构,顺序结构是程序设计中最简单、最常用的基本结构。在该结构中,各语句是按照其书写次序一条接一条地顺序执行。1.赋值语句 C#中的赋值语句是由赋值表达式加语句结束符号“;”构成。由于C#的赋值表达式形式丰富,所以赋值语句也表现出多样性。,单赋值语句 由一个赋值操作符构成的赋值语句,其格式为:变量=表达式;其中“变量”是被赋值的对象,可以是基本变量或者是后边章节介绍的其他类型变量。“=”称为“赋值符号”,功能是把“表达式”的值赋给左边的“变量”。赋值号两端的数据类型原则上应该一致,当两者类型不一致,在将表达式转换为变量的类型时,如果任何情况下都不会导致信息丢失,例如表达式为int类

34、型,变量为long类型,系统将自动进行数据类型的转换(隐式转换),如果将表达式转换为变量的类型时,信息可能丢失,例如表达式为long类型,变量为int类型,必须进行显示转换,请参考后边有关章节。一些例子如下:Double pi=3.1415926;/声明一个双精度型的变量pi,并初始化。int i=0;i+;/变量i完成自增1的操作,等效于i=i+1;string myName=”李小飞”;/将字符串常量赋值给字条串变量int total;total=100;/将常量100赋值给数值变量total/编译错误,3.5默认为Double类型single x=3.5;/不能将double类型隐式转换

35、为single类型,复合赋值语句:复合赋值语句是使用+=、-=、*=、/=等运算符构成的赋值语句,例如:int x=5;x-=6;/相当于x=x-6,x的最后值为-1string s=”abcd”;s+=”efjh”;/相当于s=s+”efjh”,s的最后值为”abcdefgh”连续赋值语句:连续赋值语句是在一条语句中使用多个赋值运算符进行赋值的语句,这种语句可以一次为多个变量赋相同的值。例如:int x,y,z;x=y=z=6;/该语句使x、y、z同时被赋予整数6。,1.6.2 选择结构,选择语句控制程序执行流程的方式是:根据给定的条件,决定执行哪些语句,不执行哪些语句。C#中提供了两种选择

36、语句,if语句和switch语句。1.if语句:if语句的一般形式为:if(布尔表达式)语句1 else语句2 其含义是如果布尔表达式的值为true,执行语句1,否则执行语句2。语句可以是一条语句,也可是多条的复合语句。如果是复合语句时,其格式为:多条语句。else分支可以省略,如果没有,其形式如下:if(布尔表达式)语句1,其含义是如果布尔表达式的值为true,执行语句1;否则不执行语句1而直接执行其后的语句。2.switch语句if语句嵌套使用时,如果嵌套太深,程序将变得复杂、难以理解,使用switch语句可以方便地解决这种问题。switch语句又称开关语句,它的一般形式如下:switch

37、(控制表达式)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;/可以有多条case语句case 常量表达式n:语句n;break;default:语句n+1;break;,1.6.3 循环结构,程序中往往需要重复执行某些语句。循环语句就具有这样的功能,它能使程序在给定条件满足时,重复执行一些语句。循环中反复被执行的语句称为循环体。C#语言4种循环语句:while语句、do-while语句、for语句和foreach语句。其中,foreach语句主要用于操作集合(数组),将在后面的章节中介绍。1.while语句while语句的一般形式为:while(布尔表

38、达式)循环体其中,循环体可以是单一语句或语句块。while语句的执行过程为:(1)计算的值,假定为M;(2)若M为true,则执行一遍循环体,执行完循环体所有语句后,自动转向第(1)步执行。否则结束整个语句的执行,转去执行while语句后面的语句。while语句的执行过程可用图1.4表示出来。,2.do-while语句:do-while语句的一般格式如下:do 循环体while(布尔表达式);注意:do-while语句最后的分号不能省略。do-while语句的执行过程可用图1.5来表示。,3.for语句 for语句又称for循环,灵活的使用for语句完全可以解决编程中的一切循环问题,一切可用w

39、hile语句和do-while语句实现的功能都可用for语句实现。其执行过程如下图。for语句的一般形式如下:for(初始化变量;布尔表达式;调整变量值)循环体 for语句的执行顺序是:首先初始化变量,然后计算布尔表达式的值,如果布尔表达式的值为true,则执行循环体,否则退出循环。每次执行完循环体后,调整变量值,然后再计算布尔表达式的值,并根据其值决定是否继续执行循环体。,4.循环嵌套:当一个循环(称为“外循环”)的循环体内包含另一个循环(称为内循环),称为循环的嵌套,这种语句结构称为多重循环结构。内循环中还可以包含循环,形成多层循环(嵌套的层数从理论上讲不受限制)。三种循环可以互相嵌套。,

40、1.6.4 跳转语句,C#语言中共有5种跳转语句:break语句、continue语句、goto语句、return语句和throw语句。它们能实现程序执行流程的跳转。下面主要介绍前三种,有关return语句和throw语句的使用将在相关章节中详细介绍。1.break语句 该语句称为中断语句,被限定使用在任一种循环语句和switch语句中,当程序执行到该语句时,将立即结束所在循环语句或switch语句的执行,接着执行其后面的语句。break语句的格式如下:break;当break语句出现在内层的循环语句或switch语句中时,它只是结束该层内的循环语句或switch语句的执行,不会结束其他外层循

41、环或switch语句的执行。,2.continue语句 该语句称为继续语句,被限定使用在任一种循环语句的循环体中,当程序运行执行到该语句时,中断本次循环,直接回到当前循环的起始处,开始下一轮循环。continue语句的格式如下:continue;,1.7 方法初步,方法是用于解决某一特定问题的语句块,C#语言中的方法相当于VB中的通用过程(Sub)或函数过程(Function)。C#中的方法用于实现类和结构的行为,只能放在类定义中声明。本节主要介绍有关方法的基本知识。,1.7.1 方法的定义,方法定义的一般格式如下:方法修饰符 返回值类型 方法名(参数列表)方法体方法修饰符包括public、p

42、rotected、private、static、virtual等,static表示所定义方法是静态的,程序运行后,该方法就已存在可以使用,其他修饰符将在后面的单节详细介绍。返回类型是指调用方法后返回的值的类型,可以是任意合法的C#数据类型。方法的返回值是需要返回给调用者的结果,由return语句给出。如果方法不返回一个值,则它的返回类型为void,方法中可以没有return语句。,方法名应是一个合法的C#标识符。参数列表指定调用该方法时需要使用的参数个数、各参数类型,又称为形式参数,参数之间以逗号分隔。形式如下:类型1 形式参数名1,类型2 形式参数名2,类型n 形式参数名n参数可以是任何类型

43、的变量。如果方法在调用时不需要参数,则不用指定参数,但圆括号不能省略。花括号内的方法体是一个语句序列,由0条或多条语句组成,当是0条语句时,该方法被称作空方法。,1.7.2 方法的调用,C#语言中,除Main方法可以由系统自动调用外,要使用其他方法,就必须明确调用。方法调用的一般形式如下:方法名(实际参数表)其中,实际参数表中的实际参数又称实参,它是一个表达式,用来初始化被调用方法的形参,因此,实参与形参应该个数相等且对应数据类型相容。如果所定义方法有返回值,则方法调用一般是作为表达式的一部分,它的值就是被调用方法的返回值。如果方法的返回值类型为void,说明该方法没有返回值,这时,只能在方法

44、的调用表达式后加分号用作表达式语句。方法调用时,首先从左到右计算出每个实参表达式的值,然后使用该值去初始化对应的形参。,1.7.3 方法调用的执行过程,当控制台应用程序被启动时,系统自动调用Main方法开始执行。程序在执行过程中,如果遇到了对其他方法(称为子方法)的调用,则暂停当前方法的执行,保存下一条指令的地址(即返回地址),并保存现场,然后转到子方法的入口地址,执行子方法。当遇到return语句或者子方法结束时,则恢复先前保存的现场,并从先前保存的返回地址开始继续执行。图1.9说明了方法调用和返回的过程,图中标号标明了执行顺序。,1.7.4 方法的嵌套调用,方法允许嵌套调用。如果方法1调用

45、了方法2,方法2再调用方法3,便形成了方法的嵌套调用。,1.7.5 递归调用,若一个问题可以化为若干个子问题,化解成的子问题要么有解、要么可以化为更小的子问题,而子问题的求解方法同原问题,这被称为递归求解。有些问题用递归很容易解决。例如求n!。一个方法的方法体中的语句直接或间接的调用它自身,被称作递归调用。,1.7.6 方法的重载,在C#语言中,如果在同一个类中定义的函数名相同,而参数类型或参数个数不同,认为是不相同的函数,仅返回值不同,不能看作不同函数,这叫做函数的重载。在C语言中,若计算一个数据的绝对值,则需要对不同数据类型求绝对值方法使用不同的方法名,如用abs()求整型数绝对值,lab

46、s()求长整型数绝对值,fabs()求浮点数绝对值。而在C#语言中,可以使用函数重载特性,对这三个函数定义同样的函数名,但使用不同的参数类型。下面是实现方法:using System;class Class1static public int abs(int x)/整型数求绝对值return(x0?-x:x);static public long abs(long x)/长整型数求绝对值return(x0?-x:x);,static public double abs(double x)/浮点数求绝对值return(x0?-x:x);static void Main(string args)int x=-10;long y=-123;double z=-23.98d;x=abs(x);y=abs(y);z=abs(z);Console.WriteLine(x=0,y=1,z=2,x,y,z);类的对象调用这些同名方法,在编译时,根据调用方法的实参类型决定调用哪个同名方法,计算不同类型数据的绝对值。这给编程提供了极大方便。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号