测绘程序设计ppt课件.ppt

上传人:小飞机 文档编号:2125272 上传时间:2023-01-14 格式:PPT 页数:83 大小:2.55MB
返回 下载 相关 举报
测绘程序设计ppt课件.ppt_第1页
第1页 / 共83页
测绘程序设计ppt课件.ppt_第2页
第2页 / 共83页
测绘程序设计ppt课件.ppt_第3页
第3页 / 共83页
测绘程序设计ppt课件.ppt_第4页
第4页 / 共83页
测绘程序设计ppt课件.ppt_第5页
第5页 / 共83页
点击查看更多>>
资源描述

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

1、第 二 章 编程基础,测 绘 程 序 设 计,概要内容,本章主要介绍了C#语言的基础知识,内容主要包括C#基本语法、数据类型、运算符和表达式。本章是后续章节的基础,学习完本章后,应可以编写简单C#应用程序。,目录,2.1 C#基本语法2.2 变量简介2.3 C#数据类型2.4 运算符与表达式小结,2.1 C#程序结构,C#代码的外观和操作方式与C+和JAVA类似C#编译器不考虑代码中的空格、回车符或者Tab字符。C#代码由一系列语句组成,每个语句用分号来结束。C#是一种块结构的语言,所有的语句都是代码块的一部分。这些块用花括号来界定,代码块可以包含任意多行语句,或者不包含语句。注意花括号不需要

2、带分号。在C代码中,经常出现注释语句。编译器会忽略这些内容。/XXXXX/*这段代码由XXX编写*/还需要说一点,C#代码是区分大小写的。必须使用正确的大小写形式输入代码。Console.WriteLine(“hello world!”);console.WriteLine(“hello world!”);,2.1 C#基本语法,控制台程序基本结构,目录,2.1 C#基本语法2.2 变量简介2.3 C#数据类型2.4 运算符与表达式小结,2.2 变量简介,数据是程序的必要组成部分,也是程序处理的对象变量关系到数据的存储。实际上,可以把计算机内存中的变量看作架子上的盒子。,7,2.2 变量简介,

3、尽管计算机中所有数据事实上都是相同的东西,但变量有不同的内涵,称为类型(数据类型)。用盒子来类比,盒子有不同的形状和尺寸,某些东西只能放在特定的盒子中。这个类型系统的另一个原因是,不同类型的数据需要不同的方法来处理。变量限定为不同的类型,可以避免混淆。例如,组成数字图片的0和1序列与组成声音文件的0和1序列,其处理方式是不同的。,8,2.2 变量简介,变量与内存变量创建时,计算机都会给它分配一块足够大的内存空间,来保存该类型的变量。相同类型的不同变量总是占据相同大小的内存。不同类型的变量需要分配的内存空间不一样。使用变量使用变量就是声明他们。可以使用的变量类型是无限多的。其原因是可以自己定义类

4、型,存储各种复杂数据。尽管如此,总有一些数据类型是每个人都要使用的简单的预定义类型,9,10,2.3 C#数据类型,CTS类型值类型与引用类型预定义类型变量常量类型转换复合类型装箱和拆箱,11,2.3.1 CTS类型,CTS简介:CTS(Common Type System)公共类型系统,它定义了可以在中间语言使用的预定义数据类型,用于.NET语言都可以生成最终基于这些类型的编译代码。公共类型系统不仅指定基本数据类型,还定义了一个内容丰富的类型层次结构。,12,CTS类型层次,CTS类型层次结构图,13,2.3 C#数据类型,CTS类型值类型与引用类型预定义类型变量常量类型转换复合类型装箱和拆

5、箱,14,2.3.2 值类型与引用类型,数据类型分为值类型和引用类型两种。从概念上看,值类型直接存储其值,而引用类型存储对值的引用。从在内存中的存储位置上看,值类型变量把数据存储在栈中,引用类型变量把数据存储在堆中。,15,2.3.2 值类型与引用类型,值类型与引用类型在内存中的存储,int i20,int i=20;,“hello”,string s=“hello”;,int j=i;,string t=s;,string ss,int j20,string tt,16,2.3 C#数据类型,CTS类型值类型与引用类型预定义类型变量常量类型转换复合类型装箱和拆箱,17,2.3.3 预定义类型

6、,预定义数据类型是由C#语言和.NET框架提供的,每个预定义类型都映射为CTS中定义的类型。C#中有15个预定义类型,其中有13个值类型和两个引用类型(string和object)。,18,2.3.3 预定义类型(值类型),预定义的值类型,19,(1)short int类型Short和int 类型分别对应CTS中的int16和int32,当你需要一个整数变量时,可以这样声明:一些变量名称前的u表示不能在这些类型中存储负数,相应的整数存储范围变大。,int myInt=32768;,2.3.3 预定义类型(值类型),20,(2)float double类型Float和double 类型对应CTS

7、中的single和double,当你需要一个浮点数时,而不是整数时可以这样声明:一些其他的类型bool是C#中最常见的一种变量类型,但编写应用程序的逻辑流程时,一个可以是ture或false的变量具有非常重要的分支作用。,2.3.3 预定义类型(值类型),double myDouble=3.14159262;,21,2.3.3 预定义类型(值类型),(3)char类型存储单个字符。一些字符不能直接放在引号中,必须使用转义字符,这些转义字符如下表所示。,char的双重身份:char的具有双重身份。它表示字符但却被看作是整数家族的一部分,它表示的值是一个无符号的整数,范围在065535。它可以参与

8、计算,并可以隐式转换成int、long、ushort、uint和ulong。,22,2.3.3 预定义类型(值类型),(2)char类型,转义字符表,23,2.3.4 预定义类型(引用类型),预定义的引用类型 C#支持两个预定义引用类型,如下表所示:,24,2.3.4 预定义类型(引用类型),(1)object类型object类型是从所有内在和用户定义的类型中派生而来的最终父类型,所有类型都隐含地最终派生于System.Object类。,(1)object类型object类型可用于两个目的:1)使用object引用绑定任何特定子类型的对象,例如:2)object类型执行基本用途的方法,Equa

9、ls()、GetHashCode()、GetType()和ToString()等等。,25,2.3.4 预定义类型(引用类型),int i=20;object o=i;,26,2.3.4 预定义类型(引用类型),(2)string类型字符串变量是包含字母或数字字符的序列,它可以用来存放计算机或查询操作的输入信息。注意:对组成字符串的字符数没有限制。,27,2.3.4 预定义类型(引用类型),(2)string类型声明字符串变量:,string myStr1=“hello”;string myStr2=“world”;string myStr3=myStr1+myStr2;,(2)string类

10、型字符串中也可以包括转义字符:结果如下:,28,2.3.4 预定义类型(引用类型),string的永恒性C#中,创建一个string对象后,它所代表的字符集不能修改。当把一个字符串变量赋给另一个字符串时,会得到内存中同一个字符串的两个引用。但是,修改其中一个字符串,注意这会创建一个全新的string对象,而另一个字符串没有改变。,string sample=“hellonworld”;,helloworld,2.3.4 预定义类型(引用类型),(2)string类型请考虑下边的过程:,string s1=“a string”;,string s2=s1;,s1=“another string”

11、;,string s1s1,string s2s2,“anothe string”,“a string”,对s1的修改是通过String类的各种方法来实现的,预定义的方法不会直接修改内存中的这个String,而是构造一个新的String。所以在表面上看上去象是修改没有影响到原字符串。,(2)string类型verbatim字符串 通过加前缀,使编译器严格按照原样对其编译。字符串各种格式和转义字符将按原样输出。如:,30,2.3.4 预定义类型(引用类型),string s=“hellonworld”;,hellonworld,结果输出:,(2)string类型verbatim字符串 注意:引号

12、是唯一例外,编译器必须将其转义,例如,生成字符串“Hello”的代码如下:输出结果为:,31,2.3.4 预定义类型(引用类型),string s=“Hello”;,注意:Hello的两边都有3个引号,“Hello”,注:转义字符处理一对,32,2.3 C#数据类型,CTS类型值类型与引用类型预定义类型变量常量类型转换复合类型装箱和拆箱,(1)声明变量语法:例如:该语句用public访问级声明int变量i。,33,2.3.5 变量,modifiers datatype identifier;,public int i;,34,2.3.5 变量,(2)标识符(identifier)标识符是给变量

13、、用户定义的类型和这些类型的成员指定的名字。C#变量命名的基本规则:变量名首字符必须是字母、下划线(“_”)或“”;其后字符必须是字母、下划线或数字;切忌使用C#关键字。如果需要使用,须在标识符前边加上“”(如abstract)。,35,2.3.5 变量,(2)标识符(identifier)练习:下边哪些变量的命名是正确的 myBigVar 99BottleOfBeer namespace VAR1 _test Its-All-Over,36,2.3.5 变量,(2)标识符(identifier)以下列出了命名变量的一些约定:给变量分配有意义的名称;命名类和方法时使用PascalCase样式,

14、命名变量使用camelCase样式。不要通过大小写的不同来区分变量。,(3)初始化变量变量声明后,我们必须初始化该变量。,37,2.3.5 变量,class Test static void Main()int myTest=8;System.Console.WriteLine(myTest);,int myTest;,(3)初始化变量另外,注意初始值要与声明的类型相一致可以通过附加后缀来指定数值类型,38,2.3.5 变量,string myString=34.50;/错误,string myString=“34.50”;/正确,39,2.3.5 变量,(3)初始化变量可使用的后缀如下表:,

15、40,2.3.5 变量,(4)变量的作用域 class Program static void Main(string args)string myString=string defined in Main;write();Console.ReadKey();static void write()Console.WriteLine(myString=0,myString);,static void Main(string args)string myString=string defined in Main;write();Console.WriteLine(n Now in the Main

16、);Console.WriteLine(myString=0,myString);Console.ReadKey();static void write()string myString=string defined in Write;Console.WriteLine(myString=0,myString);,41,示 例,42,2.3.5 变量,(4)变量的作用域变量的作用域是可以访问该变量的代码区域。作用域的确定规则:只要字段所属的类在某个作用域内,其字段也在该作用域内;局部变量存在于表示声明该变量的块语句结束的封闭花括号之前的作用域内;在循环或类似的语句中声明的局部变量存在于该循环体

17、内。,(5)字段和局部变量考虑下边的代码:,43,2.3.5 变量,using System;Class ScopeTest static int j=20;public static void Main()int j=30;Console.WriteLine(j);return;,定义了两个j,能通过编译吗?,44,2.3.5 变量,(5)字段和局部变量C使得在变量之间有一个基本的区分,它把声明为类型级的变量看作是字段,而把在方法中声明的变量看作局部变量。所以前边的代码可以通过编译,运行结果是30!此时,在Main方法中声明的变量j隐藏了同名的类级别的变量。,Program.j?,(6)修饰

18、符修饰符用于限定类型以及类型成员的声明。C#语言共有13种修饰符,按功能可以分成3部分:类修饰符成员修饰符访问修饰符,45,2.3.5 变量,46,2.3.5 变量,(6)修饰符访问修饰符,47,2.3.5 变量,(6)修饰符以下是访问修饰符的一些规则:命名空间总是默认为public;类总是默认为public;类成员默认为private;(与C+不同)对于一个类成员只能使用一个访问修饰符,protected internal尽管是2个单词,但它是单个访问修饰符;成员的作用域永远不超出包含它的类。,48,2.3 C#数据类型,CTS类型值类型与引用类型预定义类型变量常量类型转换复合类型装箱和拆箱

19、,语法:注意:声明常量时必须对其赋值。例:,49,2.3.6 常量,const type-name constant=value;,const float pi=3.14f;const int earthRadius=6378;,50,2.3 C#数据类型,CTS类型值类型与引用类型预定义类型变量常量类型转换复合类型装箱和拆箱,51,2.3.7 类型转换,隐式转换(implicit conversion)显式转换(explicit conversion),(2)显式转换方式:语法如下:例:,52,2.3.7 类型转换,type variable1=(cast-type)variable2;,i

20、nt x=500;short z=(short)x;,53,2.3.7 类型转换,(2)显式转换方式:考虑下边的代码:,decimal d=1234.56M;int x=(int)d;,转换的结果是,x值为1234,long val=3000000000;int i=(int)val;,编译器不会报错,但i中结果却是-1294967296,54,2.3.7 类型转换,(2)显式转换方式:注意:显式转换是一种危险操作,它可能导致数据丢失,或数据溢出,从而得不到所需的结果,所以在执行显式转换之前一定要清楚自己在做什么。,55,2.3.7 类型转换,(2)显式转换方式:Convert.ToInt32

21、、int.Parse、int.TryParse、(int)四者都可以将类型转换为 int,其区别是:Convert.ToInt32与int.Parse较为类似,实际上 Convert.ToInt32内部调用了 int.Parse:Convert.ToInt32 参数为 null 时,返回 0;int.Parse 参数为 null 时,抛出异常。Convert.ToInt32 参数为 时,抛出异常;Int.Parse 参数为 时,抛出异常。Convert.ToInt32 可以转换的类型较多;int.Parse 只能转换数字类型的字符串。,56,2.3 C#数据类型,CTS类型值类型与引用类型预定

22、义类型变量常量类型转换复合类型装箱和拆箱,57,2.3.8 复合类型,除了前面介绍的预定义类型外,C#和.NET Framework还允许用户根据这些简单类型定义复合类型。与基本类型一样,复合类型可以分为值类型和引用类型,(1)结构(struct)语法:,58,2.3.8 复合类型(值类型),modifier struct identifier:interface member of struct;,59,2.3.8 复合类型(值类型),(1)结构(struct)member of struct包括:构造函数(Constructor)、常数(Destructor)、字段(Fields)、方法(

23、Methods)、属性(Attribute)、索引(Indexes)、操作符(Operators)和嵌套(Nested)类型。,60,2.3.8 复合类型(值类型),(1)结构(struct)示例:定义一个水准网间接平差的结构类型,用于保存某条路线的信息,包括:起始点号、终止点号、高差、权。,61,class Program struct LevelLine public string qPoint;public string zPoint;public double lDispersion;public double lWeight;public double getlWeight()ret

24、urn 1/lWeight;static void Main(string args)LevelLine abc;abc.qPoint=A;abc.zPoint=B;abc.lDispersion=0.25;abc.lWeight=4;Console.WriteLine(0到1路线的权为2,abc.qPoint,abc.zPoint,abc.getlWeight();Console.ReadKey();,程序代码如下:,62,2.3.8 复合类型(值类型),(1)结构(struct)从功能上看结构就像一个小型的类,但二者还是有很大区别:第一,结构是一个值类型,它存储在栈中,而类是一个引用类型,

25、它存储在堆中。第二,结构不允许继承。第三,在结构中不允许声明一个没有参数的构造函数,而类是允许的。,第四,在结构中不允许不允许有实例字段初始值设定项。,63,2.3.8 复合类型(值类型),public struct Rect public int x1=1;,64,2.3 C#数据类型,CTS类型值类型与引用类型预定义类型变量常量类型转换复合类型装箱和拆箱,(1)装箱(Boxing)考虑下边的代码:问题:j不过是栈上一个4字节的值,它是如何调用方法的?,65,2.3.9 装箱和拆箱,Int j=10;string s=j.ToString();,(1)装箱(Boxing)C#提供了一个有点魔

26、术性的方式装箱!装箱可以把值类型转换为引用类型,上例中的该转换是隐式进行的,还可以手工转换:,66,2.3.9 装箱和拆箱,int i=20;object o=i;,67,2.3.9 装箱和拆箱,(1)装箱(Boxing)第二条初始化语句中,o包含的引用并不指向i,因为i在栈中,引用指向栈将严重影响程序的健壮性(还会产生潜在的安全漏洞)。作为替代,在堆中会产生i的一个精确拷贝,并将变量o的引用指向该拷贝 这种自动拷贝就是装箱!,(1)装箱(Boxing)装箱过程如下图所示,68,2.3.9 装箱和拆箱,栈,堆,int i20,object o,int i=20;,object o=i;,装箱,

27、20,(2)拆箱(Unboxing)拆箱用于把引用类型转换为值类型,其中引用类型的值转换为值类型。其语法类似于显式类型转换:,69,2.3.9 装箱和拆箱,object o=42;int i=(int)o;,70,2.3.9 装箱和拆箱,(2)拆箱(Unboxing)拆箱过程如下图所示,栈,堆,object o,int i=(int)o;,object o=42;,42,int i=(int)o42,拆箱,71,2.3.9 装箱和拆箱,(2)拆箱(Unboxing)需要注意的是,在把引用类型转为值类型的时候,必须确保得到的值变量有足够的空间存储值类型中所有的字节。例:,long a=33333

28、423;object b=(object)a;int c=(int)b;,CLR会抛出一个异常:“未处理的异常:system.InvalidCastException:指定的转换无效”,目录,2.1 C#基本语法2.2 变量简介2.3 C#数据类型2.4 运算符与表达式小结,73,2.4 运算符与表达式,前面介绍了如何声明和初始化变量,下面讨论如何处理它们。C#包含许多进行这类处理的运算符。把变量和字面值与运算符组合起来,就可以创建表达式,他们是计算的基本构件。,74,2.4.1 运算符,C#语言继承了C/C+原有所有运算符,并在此基础上增添了几个新的运算符,详见下页表。另外,根据运算符所使用

29、的操作数(运算符所操作的变量或常量)个数,可分为3类:一元运算符二元运算符三元运算符,75,C#运算符,76,2.4 运算符与表达式,运算符运算符的优先级,77,2.4.2 运算符的优先级,运算符的优先级:是指在不同运算符混合使用时,运算进行时的顺序。C#运算符的优先级如下页表所示。表的顶部的运算符有最高的优先级。,78,C#运算符优先级,2.4.2 运算符的优先级,System.Console类,前面已经使用过Console类,虽然CUI不如GUI或基于Web的前端吸引人,但将程序示例限制在CUI,可以将重点集中在其他方面。Console类封装了基于控制台的应用程序的输入、输出和错误流操作。

30、,输入、输出Writeline()Write()(无回车)ReadLine()Read()(一个字符),格式化控制台输出0 1 嵌入在字符串字面量中花括号语法在内部指定占位符,练习:用数学运算符处理变量,求三角形面积,海伦公式:其中,代码分析:海伦公式的表达式:s=Sqr(p-a)*(p-b)*(p-c)*p)p=(a+b+c)/2,示例代码,高斯投影分带计算,高斯投影的分带:高斯投影是我国采用的地图投影方法,它从0子午线起,每隔经差6自西向东分带,成为6带。带号 依次编为160。位于各带中央的子午线,称为中央子午线,其经度 可按照下式计算:若已知某点的经度L,求该点所在的6带的带号可以用下式计算:N=Int(L+3)/6+0.5)界面分析:输入带号输出中央经度,输如经度输出带号代码分析:L=N*6-3;N=int(L+3)/6+0.5),小结,本章介绍了创建有效C#应用程序的大量基础知识,讲述了C#的基本语法。重点讲述变量的用法。描述了变量的含义,阐述了如何创建变量,如何给它们赋值,如何处理它们以及它们包含的值。支持所有工作都是顺序完成的,之后介绍使用循环技术和条件分支控制程序的流程。,83,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号