C语言程序设计.ppt

上传人:文库蛋蛋多 文档编号:2901826 上传时间:2023-03-01 格式:PPT 页数:337 大小:2.76MB
返回 下载 相关 举报
C语言程序设计.ppt_第1页
第1页 / 共337页
C语言程序设计.ppt_第2页
第2页 / 共337页
C语言程序设计.ppt_第3页
第3页 / 共337页
C语言程序设计.ppt_第4页
第4页 / 共337页
C语言程序设计.ppt_第5页
第5页 / 共337页
点击查看更多>>
资源描述

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

1、,第1章 C#语言简介及运行环境,本章对C#语言的起源、性能、特点以及C#开发环境进行简单介绍,并通过一个简单的示例介绍控制台应用程序的编写方法。,1.1 C#语言简介,C#(读为C sharp)是一种专门为.NET应用而开发的程序设计语言,它由微软公司在2000年7月发布,具有简单、安全、面向对象等特点。C#吸收了C+、Visual Basic、Delphi、Java等语言的优点,体现了当今最新的程序设计技术。,C#语言简介(续),1.1.1 C#语言的起源 C#是微软整合了自己最佳的资源,开发出了C#语言,这是一种最新的、面向对象的程序设计语言。C#使程序员可以快速地编写各种基于.NET平

2、台的应用程序。最重要的是,C#像C+一样能开发出高效的程序。C#与C/C+具有极大的相似性,熟悉这些语言的开发者可以很快地掌握C#。,C#语言简介(续),1.1.2 C#语言的应用(1)Windows应用程序。开发人员可以利用Windows 窗体模块创建Windows 应用程序,如传统的Win32应用程序。Windows 窗体模块是一个控制库,其中的控件(如按钮、工具栏、菜单等)可以用于建立标准的Windows用户界面(UI)。(2)Web应用程序。Web应用程序是指可以通过任何Web浏览器查看及使用的Web页面。.NET框架包括一个动态生成Web内容的强大系统ASP.NET,开发人员可以通过

3、ASP.NET创建Web应用程序。Web窗体为Web应用程序定义了用户接口,包含静态文本和服务控件,而应用程序逻辑则驻留在后台代码文件中。,C#语言简介(续),1.1.3 C#语言的特点(1)语法简单:C#中不再使用指针,只需使用“.”符号即可实现对类的成员的引用和访问。(2)现代性:C#为程序设计提供了许多内建的支持,程序设计人员可以更容易地使用其创建具有良好性能的功能强大的应用程序。C#语言在数据类型、垃圾回收、内存压缩、异常处理等诸多方面都显示出了它的现代性。(3)面向对象:C#支持数据封装、继承、多态等所有面向对象的概念。,C#语言简介(续),(4)类型安全:在C#中不允许进行不安全的

4、类型转换,如将int类型转换成boolean类型;数组下标从零开始,并进行越界检查;对溢出进行检查及异常处理。(5)兼容性:可以在C#中直接应用使用其他中间代码语言编写的组件。C#还允许用户有限制地使用指针。(6)可伸缩性:扩展使用C#编写的程序时,只需将新文件覆盖旧文件,而不需要注册动态链接库。(7)版本控制:C#可以支持版本控制。,1.2 C#运行环境,C#程序基于.NET Framework运行。.NET Framework 是微软开发的用于生成、部署和运行应用程序和XML Web服务的多语言环境,主要由公共语言运行库和统一编程类组成。,C#运行环境(续),1.2.1.NET概述.NET

5、是Microsoft提供的一种全新的开发平台,这个平台将推动以新体系为基础的协同Web应用程序开发。.NET是Microsoft贴在现有产品和未来产品上的一个新式行销标签。.NET最令人感兴趣的特色在于它的开发平台、语言和协议。可以说,无论是在技术上还是在战略上,Microsoft都对.NET寄予了厚望。.NET程序可以运行在任何Windows 98以上版本的Windows系列操作系统上。VS.NET是一个功能强大的.NET程序集成开发环境(IDE)。,C#运行环境(续),1.2.2.NET架构,C#运行环境(续),.NET架构的最高层(即顶层)用于显示用户界面。Windows窗体是实现标准W

6、in32应用程序窗口的一种更高级的新方式,它具有直观的界面,基本上可以实现开发人员所希望的任何功能。.NET架构的中间层包括下一代标准系统服务,如管理数据和XML的类。这些服务在架构的控制之下,可以在各处通用。,C#运行环境(续),.NET架构的底层是公共语言运行库,通常简写为CLR(Common Language Runtime),它是.NET框架的核心,是驱动关键功能的引擎。CLR的主要功能是内存管理、安全性检查、生命周期监控和代码管理等。设计公共语言运行库的主要目的是提供极佳的工具支持,实现更快速的开发以及更简单、安全的部署,并使系统具有可伸缩性。,C#运行环境(续),1.2.3 Vis

7、ual Studio 2005项目 Visual Studio 2005具有GUI设计器、数据库操作工具、对象和项目浏览工具以及帮助系统,它集成了Visual Basic 2005、Visual C#2005、Visual C+2005、Visual Web Developer 2005等各种语言的开发平台。其中,Visual C#2005支持的主要项目类型如表1-1所示。,C#运行环境(续),表1-1 Visual C#2005支持的项目类型,C#运行环境(续),1.2.4 Visual C#2005集成开发环境(以下配合演示)1Visual Studio 2005起始页 2新建Visual

8、 C#项目 3解决方案资源管理器,C#运行环境(续),1.2.5 第一个C#程序 C#主要用于开发3类程序,即控制台程序、Windows程序和ASP.NET程序。C#程序的扩展名为.cs,使用编译器csc.exe可将其编译成可执行文件。,C#运行环境(续),1命名空间 就像在文件系统中用一个目录容纳多个文件一样,可以将命名空间看作某些类的容器。通过命名空间可以把相关的类组织起来,并避免命名冲突。命名空间既可以用于程序的“内部”组织系统(一种不向其他程序公开自己拥有的程序元素的方法),也可以用于“外部”组织系统(一种向其他程序公开自己拥有的程序元素的方法)。,C#运行环境(续),namespac

9、e关键字用于声明一个命名空间,其语法格式如下:namespace name 类型声明,C#运行环境(续),可以在命名空间中声明一个或多个数据类型,如类、接口、结构、枚举、委托。即使未显式声明命名空间,VS.NET集成开发环境也会自动创建默认命名空间,也称为全局命名空间。全局命名空间中的任何标识符都可以在其他命名空间中使用。隐式声明的命名空间具有公共访问权限。,C#运行环境(续),系统定义的命名空间 命名空间分为用户定义的命名空间和系统定义的命名空间两类。命名空间的使用 使用using指令能够引用命名空间或创建命名空间的别名,其语法格式如下:using 别名=类或命名空间名;,C#运行环境(续)

10、,2控制台程序 控制台是一个操作系统窗口,用户可以使用控制台实现与操作系统或基于文本的控制台应用程序的交互。例如,Windows操作系统中的控制台是一个命令提示窗口,可以接受MS-DOS命令。C#中的Console类对从控制台读取字符并向控制台写入字符的应用程序提供基本支持。控制台应用程序启动时,操作系统会自动将标准输入流、输出流和错误流以in、out 和error属性值的形式提供至控制台。,小 结,C#是专门为.NET平台打造的通用开发工具,具有高效、安全、灵活等特点,从而使其成为现代最流行的程序开发语言之一。从最普通的控制台应用到大规模的商业开发,C#与.NET平台的结合提供了完整的解决方

11、案。本章先介绍了C#起源、性能、特点,以及.NET框架和公共语言运行库CLR,然后介绍了C#的运行环境,最后通过一个程序编写示例介绍了C#程序的基本结构。,谢谢!,第2章 C#程序设计基础,本章先介绍了标识符和关键字、常量和变量、数据类型、类型转换及装箱和拆箱,然后介绍了表达式和运算符,最后介绍了基本程序控制结构,包括顺序结构、选择结构和循环结构3种形式。,2.1 标识符和关键字,在C#程序设计语言中,标识符是用于对变量、常量、方法、数组、类、属性等命名的符号。命名标识符必须符合以下规则:必须以字母、下划线“_”或“”开头,可以包含数字和各种符号。不能使用C#中的关键字。,标识符和关键字(续)

12、,下面是一些有效的变量名:aB123_45 _567 for 下面是一些无效的变量名:#12ABC xyz$wv,标识符和关键字(续),系统定义的具有特定含义的标识符称为关键字,也称为保留字,如continue、for、new、switch、default等。C#语言中的关键字均用小写字母表示。如果一定要将C#中的关键字用作标识符,应使用“”字符作为前缀,如continue、for、new、switch。,2.2 常量和变量,常量和变量是程序设计的基础。变量代表内存中的一个区域,变量的值就是存储于这个区域的数值。常量是在程序中用于代替不变的数字或字符串的有意义的名称,它是一种特殊的变量。,常量

13、和变量(续),2.2.1 常量 程序中经常包含一些反复出现的常数值,它可能依赖于某些难于记忆或没有明显意义的数值(如PI的值、e的值等)。在这些情况下,使用常量不但可以极大地提高代码的可读性,还会使代码更易维护。在C#中,声明常量的格式为:const 数据类型 变量名=值;例如:const int DaysInYear=365;const int WorkDays=250;,常量和变量(续),2.2.2 变量 变量是程序运行过程中用于存放数据的存储单元,其命名应遵循标识符的命名规则。1.声明变量 变量就像一个盒子(相当于内存),不同的变量中存放着各种不同的数据。在程序中使用变量时必须先指定其数

14、据类型。例如,要在程序中计算整数a、b的和,必须先声明它们的数据类型,代码如下:int a;int b;,常量和变量(续),C#中规定,使用变量前必须对其进行声明,同时规定了其类型和名称。若在程序中使用未声明的变量,编译时会报错。声明变量的格式为:类型 变量名;例如,下面的语句声明了一个整型变量a:int a;C#中并不要求在声明变量的同时对其赋值,但在声明变量时就对其赋值是程序员应具有的良好习惯。例如,下面这句代码在声明了double型变量的同时将其赋值为2.14:double d=2.14;,常量和变量(续),可以在同一行中声明多个变量,例如,下面这句代码在声明了两个布尔型变量的同时将其分

15、别赋值为true和false:bool b1=true,b2=false;2.变量的类型 在C#语言中变量主要有7种类型,即静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量。,常量和变量(续),1)静态变量 在程序设计中,静态变量用static修饰符来声明。一旦静态变量所属的类被装载,它将一直存在,直到包含该类的程序运行结束。静态变量的初始值就是此变量的类型的默认值。一般在定义静态变量时对其赋值。例如:public static int s=5;在使用静态变量时,不需要对其所在的类进行实例化。,常量和变量(续),2)实例变量 未使用static修饰符声明的变量称为实例变量(非

16、静态变量),例如:int s=2;一旦一个类的实例被创建,其实例变量将一直存在,直到所有对此实例的引用都终止,并执行了此实例的析构函数(若有)时为止。类实例变量的初始值是此变量的类型的默认值。,常量和变量(续),3)数组元素 数组元素随数组实例的存在而存在。每个数组元素的初始值都是其数组元素类型的默认值。一般应在初始化数组元素时对其赋值。有关数组的内容将会在后面的章节中详细介绍。4)值参数 未用 ref 或 out 修饰符声明的参数为值参数。值参数在调用其所属的函数成员(方法、实例构造函数、访问器或运算符)时开始存在,并通过调用中给定的自变量的值初始化,直至返回此函数成员为止。,常量和变量(续

17、),5)引用参数 用 ref 修饰符声明的参数为引用参数。引用参数不创建新的存储位置。在调用函数成员时,传递作为引用参数的变量之前必须已对其赋值。6)输出参数 用 out 修饰符声明的参数是输出参数。输出参数不创建新的存储位置。在调用函数成员时,作为输出参数的变量在传递之前可以不对其赋值。而函数成员的每个输出参数在此函数成员正常返回前都必须已明确赋值。,常量和变量(续),7)局部变量 局部变量声明可以出现在块、for 语句、switch 语句或 using 语句中,其生存期为从进入与它关联的块、for 语句、switch 语句或 using 语句开始,直到相应语句的执行结束为止。局部变量不会自

18、动被初始化,因此也没有默认值。如果在局部变量声明符之前的文本位置引用此局部变量,则会出现编译时错误。,2.3 数据类型,任何一个完整的程序都可以看成是一些数据和作用于这些数据上的操作,每一种编程语言都为开发人员提供一些数据类型,不同的语言所提供的数据类型不尽相同。C#语言是一种强类型语言,在程序中用到的变量、表达式等都必须明确数据类型,编译器需要检查数据类型操作的合法性。在C#语言中,数据类型可以分为值类型和引用类型两种。值类型的变量存放的是数据本身,引用类型的变量存储的是数据的引用。,数据类型(续),2.3.1 值类型 在C#中,值类型可以分为以下几种:1简单类型 C#语言中的简单类型主要有

19、整数类型、布尔类型、字符类型和实数类型。,数据类型(续),1)整数类型 C#语言中的整数类型分为8类,即短字节型(sbyte)、字节型(byte)、短整型(short)、无符号短整型(ushort)、整型(int)、无符号整型(uint)、长整型(long)、无符号长整型(ulong),其中,ushort、uint和ulong中的“u”是“unsigned”的简写,表示不能在这些类型的变量中存储负数。不同的整数类型用于存储不同范围的数值,占用的内存空间大小也不同。,数据类型(续),2)布尔类型 布尔类型只有两种取值,即true(真)和false(假)。在编写具有判断条件语句的应用程序时,布尔类

20、型的变量有着非常重要的作用。3)字符类型 C#的字符类型的值集对应Unicode字符集。将变量定义为字符类型的的语法格式如下:char myChar=C;/把C这个字符 赋值给变量myChar 也可以把转义字符赋值给字符类型的变量。,数据类型(续),4)实数类型 在C#中,实数类型分为单精度(float)、双精度(double)和十进制(decimal)类型,它们的差别在于取值范围和精度不同。实数类型的运算速度大大低于对整数类型,因此,采用双精度计算的结果将更为精确,而在对精度要求不高时可以采用单精度型。十进制类型主要是为了方便在金融方面的计算。当定义一个decimal类型的变量并对其赋值时,

21、一般使用m后缀表示此变量为十进制类型,例如:Decimal de=1.38m;,数据类型(续),2结构类型 结构类型可以声明构造函数、常数、字段、方法、属性、索引、操作符等。结构的功能看起来像一个类,其区别在于结构是值类型,而类是引用类型。声明结构类型的语法格式如下:Struct myColor public int Red;public int Green;public int Blue;,数据类型(续),3枚举类型 枚举类型也称为枚举,是一种具有命名常数的类型。例如,定义一个变量,其值表示一周中的一天,即此变量只能存储7个有意义的值,此时可以将这个变量定义为枚举类型。enum关键字用于声明

22、枚举类型,其语法格式如下:enum 枚举类型名:基础类型 由逗号分隔的枚举元素;,数据类型(续),2.3.2 引用类型 C#中的引用类型与C+中的类似,可以将它们视为类型安全的指针。引用类型的值是对此类型的对象的引用,其值可以是Null,表示它当前不引用或不指向任何对象。C#中的引用类型有4种,即类、数组、代理和接口,相关知识将在以后的章节中详细介绍。,2.4 类型转换,在程序设计中,常会遇到数据类型转换的问题。例如,使用int类型的数据与double类型的数据进行四则运算,就需要进行数据类型的转换。C#中的数据类型转换方法主要有隐式转换、显示转换(强制转换)、使用ToString()方法和使

23、用Convert类。,类型转换(续),2.4.1 隐式转换 隐式转换又称自动类型转换,若两种数据类型是兼容的或者目标类型的取值范围大于源类型时,就可以使用隐式转换。2.4.2 显示转换 显示类型转换是通过指令使编译器将一种数据类型转换为另一种数据类型。显示转换的缺点是产生的结果可能不够精确。显示类型转换的语法格式如下:(目标类型)变量或表达式;,类型转换(续),2.4.3 ToString方法 ToString方法主要用于将一种数据类型转化为字符串类型。字符串是用双引号括起来的字符序列,如Visual C#就是一个字符串。下面是一个把int类型的变量转换为string类型的例子:int I=2

24、00;string s=I.ToString();2.4.4 Convert类 在C#中可以通过使用Convert类提供的方法进行显式转换。,2.5 装箱与拆箱,装箱是将值类型转换为引用类型,拆箱是将引用类型转换为值类型。利用装箱和拆箱功能,就可以使值类型的值与引用类型的值相互转换。装箱操作可以隐式进行,但拆箱操作必须是显式的。拆箱过程分成两步:首先检查这个类的实例是否为给定的值类型的装箱值,然后将这个数值复制给值类型的变量。,2.6 表达式与运算符,程序中对数据的操作实际上就是数据的运算。表达式和运算符构成了程序中完成各种运算任务的语句,这些语句是程序设计的基础。,表达式与运算符(续),2.

25、6.1 表达式 表达式由操作数和运算符构成,其中操作数可以是常量、变量和属性等,运算符用于指示对操作数进行什么样的运算。最简单的表达式是变量和常量。在C#中可以通过使用运算符、方法调用以及类型转换等建立复杂的表达式。例如,以下是不同形式的表达式:X 3.1415926 System.out.println(“字符串长度:+m)x*y x=1.5,表达式与运算符(续),2.6.2 运算符 运算符是用来完成一个动作的特定语言的语法记号。最常用的运算符是加、减、乘和除。每一种语言都有运算符,并且严格定义了它们使用时的语法或规则,C#也不例外。C#运算符主要有赋值运算符、递增/递减运算符、算术运算符、

26、关系运算符、逻辑运算符和位运算符等。,表达式与运算符(续),1.赋值运算符 赋值运算符主要用来对变量进行赋值操作,包括简单赋值运算符(=)和复合赋值运算符(+=、-=、*=、/=、%=、=、|=、=、=和=)。复合赋值运算符对左操作数与右操作数进行相应的运算,然后把结果赋给左操作数。例如:x+=6;/等价于x=x+6x*=16;/等价于x=x*16,表达式与运算符(续),2.递增/递减运算符(1)递增运算符(+):用于对操作数进行加1运算。例如,i+等价于i=i+1。(2)递减运算符(-):用于对操作数进行减1运算。例如,i-等价于i=i-1。3.算术运算符 算术运算符用来执行常规的算术运算,

27、包括+(加)、-(减)、*(乘)、/(除)和%(模,即求余数)。,表达式与运算符(续),4.关系运算符 关系运算符主要用于进行表达式的比较操作,包括=(等于)、!=(不等于)、(大于)、=(大于等于)和=(小于等于)。这些运算符都是二元运算符,运算结果为布尔值true或false。5.逻辑运算符 逻辑运算符用来对两个布尔类型的操作数进行逻辑运算,运算的结果也是布尔类型。C#语言中的逻辑运算符有&(逻辑与)、|(逻辑或)和!(逻辑非)等。,表达式与运算符(续),6.位运算符 位运算符用来按二进制位对数据进行运算,包括&(与)、|(或)、(异或)、(取反)、(右移)。其中取反是一元运算符,其他操作

28、符都是二元运算符。位运算的操作数为整型数或者是可以转换为整型的任何其他数据类型的数据。,表达式与运算符(续),1)&(与)运算二进制位进行与运算的规则为:0&0=0 0&1=0 1&0=0 1&1=1,表达式与运算符(续),2)|(或)运算二进制位进行或运算的规则为:0|0=0 0|1=1 1|0=1 1|1=1,表达式与运算符(续),3)(异或)运算二进制位进行异或运算的规则为:00=0 01=1 10=1 11=0,表达式与运算符(续),4)(取反)运算 取反运算对操作数的每一位取反,如对00001010取反的结果为11110101。5)移位运算 移位运算包括左移运算和右移运算。左移运算将

29、操作数按位左移,高位被丢弃,低位顺序补0。例如,10的二进制表示为00001010,左移一位为00010100,即20;左移两位为00101000,即40。,表达式与运算符(续),进行右移运算时,如果操作数是int或long型,则低位被丢弃,其他各位按顺序依次右移;如果操作数是uint或ulong型,则低位将被丢弃,其他各位顺序依次右移高位设为0。如果操作数是非负数,则最高位设为零;如果操作数为负数,则最高位设为1。,表达式与运算符(续),2.6.3 运算符优先级 当一个表达式含有多个运算符时,C#编译器会按照运算符的优先级确定运算顺序,优先级高的运算符在优先级低的运算符前求值,优先级相同的自

30、左向右求值。C#中各种运算符的优先级如书表2-6所示。,2.7 程序流程控制,在C#中任何程序流程均可以通过使用顺序结构、选择结构和循环结构实现,这3种控制结构构成了结构化程序设计的框架。2.7.1 顺序结构 顺序结构的程序按编写顺序依次执行的,这一过程称为顺序执行。顺序结构的代码通常以程序块作为独立的单位,C#语言程序块是用一对大括号“”括起来的任意多条简单语句,程序语句可以嵌套使用。,程序流程控制(续),2.7.2 选择结构 选择结构是根据布尔表达式的值采取不同的动作,这些布尔表达式担当了执行不同路径的开关。C#语言提供了两种选择结构,即if 语句和switch语句。1.if语句 if语句

31、是最常用的选择语句,它是基于布尔表达式的值来进行选择执行的语句,主要有以下几种基本形式:,程序流程控制(续),1)简单if语句 简单if语句的语法格式为:if(布尔表达式)语句块 如果布尔表达式的值为真(true),则执行if后面的内嵌语句块,为假(false)则执行if语句的后继语句块。2)ifelse语句 ifelse语句的语法格式为:if(布尔表达式)语句块1 else 语句块2 如果布尔表达式的值为真,则执行内嵌语句1,否则执行内嵌语句2。,程序流程控制(续),3)嵌套的if语句 如果程序的逻辑判断关系比较复杂,通常还可以使用嵌套的条件判断语句。嵌套的if语句的语法格式如下:if(布尔

32、表达式1)if(布尔表达式2)语句块1 else 语句块2else if(布尔表达式3)语句块3 else 语句块4,程序流程控制(续),C#语言在执行嵌套的if语句时,每一个else与离它最近且没有其他else与之对应的if相匹配。2.switch语句 switch语句根据一个控制表达式的值选择一个内嵌语句的分支来执行,语法格式为:,程序流程控制(续),switch(控制表达式)case 常量表达式1:语句1 break;case 常量表达式2:语句2 break;case 常量表达式n:语句n break;default:语句n+1;如果控制表达式的值与某一个case对应的常量表达式的值相

33、等,就执行此case后面的语句,若与所有的case中的常量表达式的值都不匹配,就执行default后面的语句。C#语言规定switch语句中的每一个case标签后面必须使用break语句或goto语句跳转,不允许从一个case标签贯穿到另一个case标签。,程序流程控制(续),2.7.3 循环结构 循环语句用于实现一个程序模块的重复执行。C#语言提供了4种循环控制语句,包括while语句、dowhile语句、for语句和foreach语句。其中while语句和dowhile语句可以事先不知道循环的次数,属于不确定循环。在c#中,可以使用break 和continue语句跳出循环语句,使程序设计

34、更为灵活。,程序流程控制(续),1While语句 While语句是最常用的循环结构之一,可以用它模拟其他循环结构。while语句的语法格式如下:while(布尔表达式)语句块 其执行顺序为:(1)计算布尔表达式的值。(2)当布尔表达式的值为真时,执行while语句中的内嵌语句,然后程序转至第1步。(3)当布尔表达式的值为假时,结束循环。,程序流程控制(续),2.dowhile语句 while语句的条件检查先于循环中的其他语句执行,而dowhile语句的条件检查则位于循环体语句序列的尾部,因此,其循环体至少会执行一次,即使循环条件在第一次检查时就为假也是如此。dowhile 循环的语法格式为:d

35、o 循环体语句块 while(布尔表达式)其执行顺序如下:(1)执行循环体语句一次。(2)计算布尔表达式的值,为真则程序转至第1步,为假则结束循环,程序流程控制(续),3.for语句 C#语言中,在事先知道循环次数的情况下,使用for语句比较方便。for语句使用计数步进循环,计数变量跟踪循环的重复次数,循环从计数器的初值开始,直到预定的结束值终止。根据每次循环时计数器的变化(增或减),又可以将for语句分为增量for语句和减量for语句。,程序流程控制(续),for语句的语法格式为:for(表达式1;表达式2;表达式3)语句 其中,表达式1对循环控制变量进行初始化,循环控制变量可以有一个或多个

36、,若有多个则用逗号隔开;表达式2为循环控制条件;表达式3按规律改变循环控制变量的值。这3个表达式都是可选的,缺省某个表达式时,其后的分号“;”不能省略,如3个表达式都缺省的情况如下:,程序流程控制(续),for(;)语句 for语句的执行顺序如下:(1)按书写顺序将表达式1执行一次,为循环控制变量赋初值。(2)测试表达式2的值是否为真。(3)若没有表达式2或表达式2的值为真,则执行一次内嵌语句,按表达式3的规律改变循环控制变量的值,程序转至第2步。(4)若表达式2不满足,则结束循环。,程序流程控制(续),4.foreach语句 foreach语句是C#中新引入的,它表示收集一个集合中的元素,并

37、针对各元素执行内嵌语句。foreach语句的语法格式为:foreach(类型标识符 标识符 in 表达式)语句 其中,类型标识符和标识符用来声明变量,表达式对应集合。每执行一次内嵌语句,循环变量就依次取集合中的一个元素。,程序流程控制(续),5.break和continue语句 在while、dowhile或for语句中,当某种条件满足时,可以使用break或continue语句跳出循环。break语句用于使程序立即跳出循环;continue语句用于跳出此次循环,重新开始下次循环。,小 结,本章介绍了C#中常用的标识符和关键字、常量和变量的含义及使用、各种数据类型的特点及如何进行数据类型转换。

38、通过对本章的学习,读者应掌握标识符的命名方法,能在程序设计中正确使用不同数据类型的常量和变量,以及熟练应用各种数据类型转换方法。C#语言中有丰富的运算符,从功能上可分为算术、赋值、逻辑和关系运算符等。运算符具有优先级,一般而言,一元运算符优先级较高,赋值运算符优先级较低;算术运算符优先级较高,关系和逻辑运算符优先级较低。,小 结,结构化程序由3种基本结构组成,即顺序结构、选择结构、循环结构。顺序结构是一组按书写顺序执行的语言。选择结构用于在几个分支之间进行选择,C#语言中用if和switch语句实现选择结构。循环结构的设计是程序设计的重要组成部分,C#语言中有两对非常相近的循环语句,即whil

39、e语句和dowhile语句,for语句和foreach语句。通过在循环语句中使用break和continue语句,可以设计出灵活多变的程序。,谢谢!,第3章 排序与查找,3.1.1 直接插入排序 插入排序种类繁多,主要有直接插入排序、折半插入排序、2-路插入排序、表插入排序,以及希尔排序。这里主要介绍直接插入排序,其他排序方法可以参考相关的数据结构书籍。直接插入排序是一种最简单的排序方法,其基本操作就是将一个数插入到已排好序的有序序列中,从而得到一个新的长度增加1的有序序列。,3.1 排 序,排 序(续),【例3-1】直接插入排序示例 using System;using System.Col

40、lections.Generic;using System.Text;namespace charter04 class Sortering static void InsertionSort(int a,int n)int i,j,temp;,排 序(续),for(i=1;i0),排 序(续),static void Main(string args)int i int b=new int10 37,45,23,12,67,33,56,22,39,44;Console.Write(before sort the ten numbers are:);Console.WriteLine();fo

41、r(i=0;i10;i+)Console.Write(0,bi);Console.WriteLine();Console.Write(is sorting.);,排 序(续),Console.WriteLine();InsertionSort(b,10);Console.Write(after sort the ten numbers are:);Console.WriteLine();for(i=0;i10;i+)Console.Write(0,bi);Console.WriteLine();,排 序(续),3.1.2冒泡排序 冒泡排序是一种最简单的交换排序方法,其基本思想是首先将第一个数与

42、第二个数进行比较,如果第一个数大于第二个数,即为逆序,则将这两个数的位置进行互换,然后再比较第二个数与第三个数,以此类推,直到第n-1个数与第n个数进行比较为止。上述过程称作第一趟冒泡排序,其结果是使得最大的那个数被排到最后一个位置。这就像在水中或在空气中一样,最轻的东西总是飘到最上面,最重的总是落在最下面。,排 序(续),【例3-2】冒泡排序程序示例using System;using System.Collections.Generic;using System.Text;namespace charter04class Sortering static void BubbleSort(i

43、nt a,int n),int i,j,temp;for(j=0;j ai+1)temp=ai;ai=ai+1;ai+1=temp;,排 序(续),static void Main(string args)int i,j;int b=new int10 10,3,4,6,13,25,21,23,32,11;Console.Write(before sort the ten numbers are:);for(i=0;i 10;i+)Console.Write(0,bi);Console.WriteLine();Console.Write(is sorting.);,排 序(续),Console

44、.WriteLine();BubbleSort(b,9);Console.Write(after sort the ten numbers are:);Console.WriteLine();for(i=0;i 10;i+)Console.Write(0,bi);Console.WriteLine();,排序(续),排 序(续),3.1.3 快速排序 快速排序是对冒泡排序的一种改进,其基本思想是通过一趟排序将待排数分割成独立的两部分,其中一部分均比另一部分小,然后分别对这两部分数继续进行排序,以达到整个序列有序。,【例3-4】快速排序示例。using System;using System.C

45、ollections.Generic;using System.Text;namespace charter04 class Sortering static int Partition(int a,int low,int high)int temp,t;temp=alow;,排 序(续),while(low=temp)-high;t=alow;alow=ahigh;ahigh=t;while(lowhigh),排 序(续),alow=temp;return low;static void QSort(int a,int low,int high)int temp;if(lowhigh)tem

46、p=Partition(a,low,high);QSort(a,low,temp-1);QSort(a,temp+1,high);,排 序(续),static void QuickSort(int a,int n)QSort(a,0,n);static void Main(string args)int i;int b=new int1138,34,56,45,76,13,27,35,46,58,23;Console.Write(before sort the eleven numbers are:);Console.WriteLine();for(i=0;i11;i+)Console.Wri

47、te(0,bi);Console.WriteLine();Console.Write(is sorting.);,排 序(续),Console.WriteLine();QuickSort(b,10);Console.Write(after sort the eleven numbers are:);Console.WriteLine();for(i=0;i11;i+)Console.Write(0,bi);Console.WriteLine();,排 序(续),3.2 查 找,所谓查找是指在一个特定的数据集中确定一个与给定的值相等的数的过程。若数据集中存在这样的一个数,则称查找是成功的;若数据

48、集中不存在等于给定值的数,则称查找不成功。查找的方法很多,有静态查找,也有动态查找;有按顺序查找,也有不按顺序查找。这里主要介绍静态查找方法中的顺序查找与折半查找。,查 找(续),3.2.1 顺序查找 顺序查找就是按照顺序一个一个进行查找。具体的查找过程为:从数据集的第一个数开始,逐个将数据集中的数与给定的值进行比较,若数据集中的某个数与给定的值相等,则查找成功,即找到所查的数;若直至数据集中的最后一个数也未找到某个与给定的值相等的数,则查找不成功,即未能找到所查的数。,查 找(续),【例3-5】顺序查找示例。using System;using System.Collections.Gene

49、ric;using System.Text;namespace charter04 class Searching static int SequentialSearch(int a,int n,int b)int i;,i=0;while(i n)return n+1;static void Main(string args)int b;,查 找(续),string c;int i,j;int a=new int1023,34,12,78,56,67,98,21,26,45;Console.Write(please output the ten numbers:);Console.Write

50、Line();for(i=0;i10;i+)Console.Write(0,ai);Console.WriteLine();,查 找(续),Console.Write(please input the a number:);c=Console.ReadLine();b=Convert.ToInt32(c);j=SequentialSearch(a,10,b);if(j=0),查 找(续),查 找(续),3.2.2 折半查找 折半查找的过程是:先在有序序列中确定待查记录所在的范围(区间),然后逐步减半地缩小范围,直到找到(或找不到)此记录为止。,【例3-6】折半查找程序示例。using Syst

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号