第2章C编程基础ppt课件_第1页
第2章C编程基础ppt课件_第2页
第2章C编程基础ppt课件_第3页
第2章C编程基础ppt课件_第4页
第2章C编程基础ppt课件_第5页
已阅读5页,还剩83页未读, 继续免费阅读

下载本文档

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

文档简介

1、第第1页页第2章 C编程根底 2.1 数据类型 2.2 运算符和表达式 2.3 构造化程序设计 2.4 数组 2.5 集合第第2页页2.1 数据类型 C#支持两种主要类型,即值类型和援用类型。值类型可以分为:简单类型、构造类型、枚举类型;援用类型有四种:类、代表、数组和接口。C#数据类型值类型援用类型指针类型简单类型、构造类型、枚举类型类类型、数组类型、接口类型、委托类型Unsafe类型,不提倡运用C#的数据类型图第第3页页2.1.1 值类型数据类型C# 标识.NET Framework 标识描述表示范围整数类型sbyteSystem.Sbyte8-bit有符号整数类型-128127byteS

2、ystem.Byte8-bit无符号整数类型0255shortSystem.Int1616位有符号整数-3276832767ushortSystem.Uint1616位无符号整数065535intSystem.Int3232-bit 有符号整数类型-21474836482147483647uintSystem.Uint3232-bit无符号整数类型04294967295longSystem.Int6464-bit有符号整数类型-9223372036854775805 9223372036854775807ulongSystem.Uint6464-bit无符号整数类型01844674407370

3、9551615实数类型floatSystem.Single32位,7 位精度1.5 10-45 3.4 1038doubleSystem.Double共64位,精度1516位5.0 10-324 1.7 10308decimalSystem.Decimal共128位,精度2829位1.0 10-28 7.9 1028字符型charSystem.Char 16 位 Unicode 字符U+0000 到 U+ffff布尔类型boolSystem.BooleanC中“”般作为转义字符使用,若不想作为转义字符使用,则在字符串前使用符号“”。如:“c:aaa”。枚举类型enum结构类型struct第第4

4、页页2.1.2 援用类型援用类型 在这里,援用的含义是该类型的变量不直接存储所包含的值,而是指向它所要存储的值。即援用类型存储实践数据的援用值的地址。值类型内存分配在堆栈中,而援用类型,实践内存那么分配在堆中,但在堆栈中创建一个援用变量,其值为堆中实践援用的地址。 C#中的援用类型有四种:类、代表、数组和接口。 第第5页页实例:using System;class Class1 public int value=0;class Testpublic static void Main()int val1=10;int val2=val1; /值类型,内存分配在堆栈中val2=123;Class1

5、 ref1=new Class1();/援用类型,内存分配在堆中Class1 ref2=new Class1();ref2=ref1;ref2.value=123;Console.WriteLine(values:0,1,val1,val2);Console.WriteLine(references:0,1,ref1.value,ref2.value);第第6页页值类型与实例类型的存储区别值类型与实例类型的存储区别堆栈堆int val1=0;int val2=val1; val2=123;Class1 ref1=new Class1();Class1 ref2=new Class1();ref

6、2=ref1;ref2.value=123; 第第7页页值类型与实例类型的存储区别值类型与实例类型的存储区别堆栈Val1堆int val1=10;int val2=val1; val2=123;Class1 ref1=new Class1();Class1 ref2=new Class1();ref2=ref1;ref2.value=123; 10第第8页页值类型与实例类型的存储区别值类型与实例类型的存储区别堆栈Val1堆int val1=10;int val2=val1; val2=123;Class1 ref1=new Class1();Class1 ref2=new Class1();r

7、ef2=ref1;ref2.value=123; 10Val210第第9页页值类型与实例类型的存储区别值类型与实例类型的存储区别堆栈Val1堆int val1=10;int val2=val1; val2=123;Class1 ref1=new Class1();Class1 ref2=new Class1();ref2=ref1;ref2.value=123; 10Val2123第第10页页值类型与实例类型的存储区别值类型与实例类型的存储区别堆栈Val1堆int val1=10;int val2=val1; val2=123;Class1 ref1=new Class1();Class1 r

8、ef2=new Class1();ref2=ref1;ref2.value=123; 10Val2123ref12000class Class1 public int value=0;value02000类class1的一个实例(对象)类class1的实例的地址第第11页页值类型与实例类型的存储区别值类型与实例类型的存储区别堆栈Val1堆int val1=10;int val2=val1; val2=123;Class1 ref1=new Class1();Class1 ref2=new Class1();ref2=ref1;ref2.value=123; 10Val2123ref12000c

9、lass Class1 public int value=0;value02000ref2value020192019第第12页页值类型与实例类型的存储区别值类型与实例类型的存储区别堆栈Val1堆int val1=10;int val2=val1; val2=123;Class1 ref1=new Class1();Class1 ref2=new Class1();ref2=ref1;ref2.value=123; 10Val2123ref12000class Class1 public int value=0;value02000ref2value020192019第第13页页值类型与实例类

10、型的存储区别值类型与实例类型的存储区别堆栈Val1堆int val1=10;int val2=val1; val2=123;Class1 ref1=new Class1();Class1 ref2=new Class1();ref2=ref1;ref2.value=123; 10Val2123ref12000class Class1 public int value=0;value02000ref2value020002019第第14页页值类型与实例类型的存储区别值类型与实例类型的存储区别堆栈Val1堆int val1=10;int val2=val1; val2=123;Class1 ref

11、1=new Class1();Class1 ref2=new Class1();ref2=ref1;ref2.value=123; 10Val2123ref12000class Class1 public int value=0;value1232000ref2value020002019第第15页页 类 类是面向对象编程的根本单位,是一种包含数据成员、函数成员和嵌套类型的数据构造。类的数据成员有常量、域和事件。函数成员包括方法、属性、索引指示器、运算符等。 类支持承继机制,经过承继,派生类可以扩展基类的数据成员和函数成员,进而到达代码重用和设计重用的目的。 第第16页页两个常用

12、类:2、String类:称为字符串类型,字符串必需用类:称为字符串类型,字符串必需用“括起。同括起。同样,这个类也是在样,这个类也是在.NET平台中为我们提供的预定义的名平台中为我们提供的预定义的名字空间字空间System中定义的,是类中定义的,是类System.String的别名。的别名。 字符串在实践中运用非常的广泛,在类的定义中封装了字符串在实践中运用非常的广泛,在类的定义中封装了许多内部的操作,我们只需简单地加以利用就可以了。可许多内部的操作,我们只需简单地加以利用就可以了。可以用加号以用加号“+合并两个字符串,采用下标从字符串中获取合并两个字符串,采用下标从字符串中获取字符等。字符等

13、。 String String1=Welcome; string String2=Welcome+everyone; char c=String10;/可以运用数组的方式去访问其中可以运用数组的方式去访问其中的每一个字符的每一个字符 bool b=String1=String2; 。第第17页页 代表委托 在C#中取消了C和C+中的指针的这个概念。而代表(委托)实践上相当于是C#中的函数指针原型,与指针不同的是,代表在C#中是类型平安的。 数组 在进展批量处置数据的时候,我们要用到数组。数组是一组类型一样的有序数据。数组按照数组名、数据元素的类型和维数来进展描画。C

14、#中提供Ststem.Array类是一切数组类型的基类。 接口 接口定义了一个协议conrtact。一个类或构造要实现接口就必需坚持这种协议。接口可以包括方法、属性、索引和事件作为成员。下面的程序代码阐明了一个接口,它包含一个索引、一个事件E、一个方法F和一个属性P。第第18页页2.2.2 类型转换 隐式转换 显示转换 运用Convert类进展转换 运用Parse方法进展转换 运用ToString()方法进展转换 第第19页页 隐式转换类型可以隐式转换成的数据类型boolobjectbytedecimal,double,float,int,uint,long,ulo

15、ng,object,short,ushortsbytedecimal,double,float,int,long,object,shortchardecimal,double,float,int,uint,long,ulong,object,ushortdecimalobjectdoubleobjectfloatdouble,objectintdecimal,double,float,long,objectuintdecimal,double,float,long,ulong,objectlongdecimal,double,float,objectulongdecimal,double,fl

16、oat,objectshortdecimal,double,float,int,long,objectushortdecimal,double,float,int,uint,long,ulong,object第第20页页 显式转换格式:(类型标识符)表达式例:(int)10.24; Double x=10.6; Short y=(short)x 第第21页页运用Convert类进展转换 ToBase64CharArray 将 8 位无符号整数数组子集的值转换为等效的由以 64 为基的数字组成的 Unicode 字符数组子集。参数将子集指定为输入和输出数组的偏移量和输

17、入数组中的元素数。ToBase64String 将 8 位无符号整数数组的值转换为它的等效 String 表示形式(由以 64 为基的数字组成)。ToBoolean 将指定的值转换为等效的布尔值。ToByte 将指定的值转换为 8 位无符号整数。ToChar 将指定的值转换为 Unicode 字符。ToDateTime 将指定的值转换为 DateTime。ToDecimal 将指定值转换为 Decimal 数字。ToDouble 将指定的值转换为双精度浮点数字。ToInt16 将指定的值转换为 16 位有符号整数。ToInt32 将指定的值转换为 32 位有符号整数。ToInt64 将指定的值

18、转换为 64 位有符号整数。ToSByte 将指定的值转换为 8 位有符号整数。ToSingle 将指定的值转换为单精度浮点数字。ToString 将指定值转换为其等效的 String 表示形式。ToUInt16 将指定的值转换为 16 位无符号整数。ToUInt32 将指定的值转换为 32 位无符号整数。ToUInt64 将指定的值转换为 64 位无符号整数。第第22页页运用Parse方法进展转换 格式:type.Parse(stringtype)功能:将数字的字符串表示方式转换为它的等效的数值型数据。例: string s=123; int x=int.Parse(s); d

19、ouble y=double.Parse(Console.ReadLine(); 第第23页页 运用ToString()方法进展转换 当我们将其它类型的数据转换为string型时,可以运用object类的ToString()方法。此方法经常运用,必需记住。格式:数据.ToString();例:double xx=10.89; bool yy=true; Console.WriteLine(123+xx.ToString()+yy.ToString(); 第第24页页2.2.3装箱和拆箱 目的:值类型和援用类型的转换,以处理它们的通讯问题。 装箱Boxing是将值类型转换为援用类型

20、的过程。装箱一个value-type值的步骤包括:分配一个对象实例,然后把value-type值复制到对象实例。 拆箱Unboxing所执行的动作与装箱相反,它把一个援用类型转换成值类型。拆箱操作的步骤包括:首先检查并确认对象实例确实是给定value-type的一个经过包装的值,然后从对象实例复制出值。 例: int intI = 123; object o = intI; / Boxing int j=(int)o /Unboxing 第第25页页装箱和拆箱表示图:第第26页页练习:using System;class TestBoxing public static void Main()

21、 int i = 123; object o = i; i = 456; int j=(int)o; Console.WriteLine(The value-type value = 0, i); Console.WriteLine(The object-type value = 0, o); Console.WriteLine(The value-type value = 0, j); 表示图第第27页页2.3 运算符和表达式 优先级种类操作符1初级的(x) x.y f(x) ax x+ x- newtypeof sizeof checked unchecked2一元的+ - ! +x -x

22、 (T)x3乘法的* / %4加法的+ -5移位6关系的 = is7相等的= !=8逻辑与&9逻辑异或当且仅当表达式的一边为真时才为真10逻辑或|11条件与&12条件或|13条件的?:14赋值= *= /= %= += -= = &= = |=第第28页页运算符阐明:1、new:用于创建对象和调用构造函数,例如: Class1 MyClass = new Class1(); 也用于为值类型调用默许的构造函数,例如: int myInt = new int();2、typeof:用于获得某一类型的System.Type类型。3、sizeof:获得值类型数据在内存中占用的字

23、节数,仅适用于 unsafe 方式,在程序编译时也运用/unsafe选项。4、checked/unchecked:用于控制整型算术运算和转换的溢出检查/忽略。5、is:用于检查对象的运转时援用类型能否与给定类型兼容 第第29页页运算符阐明: 6、对相等及不相等的判别: (1) 对于预定义的值类型,假设操作数的值相等,那么=前往真,否那么,前往假。 (2) 对于除 string 以外的援用类型,假设两个操作数援用一样的对象,那么 = 前往真。对于 string 类型,将比较字符串的值。例:E2-1 (3) 也可运用Equals方法判别两个数据能否相等。对值类型,只需两数据有一样的值便相等,对援用

24、类型,假设两数据援用了一样的对象或具有一样的值便相等,否那么不相等。 (4) 假设要判别两个援用类型能否援用了同一个对象,那么可运用object.referenceEquals方法进展判别。 第第30页页运算符阐明: 6、对相等及不相等的判别: (1) 对于预定义的值类型,假设操作数的值相等,那么=前往真,否那么,前往假。 (2) 对于除 string 以外的援用类型,假设两个操作数援用一样的对象,那么 = 前往真。对于 string 类型,将比较字符串的值。第第31页页运算符阐明:using System;class Class1static void Main(string args)st

25、ring s1=123;string s2=123;object r1=new object();object r2=new object();r1=10;r2=r1;Console.WriteLine(s1=s2); Console.WriteLine(r1=r2); r2=10;Console.WriteLine(r1=r2); 第第32页页运算符阐明: 6、对相等及不相等的判别: (3) 也可运用Equals方法判别两个数据能否相等。对值类型,只需两数据有一样的值便相等,对援用类型,假设两数据援用了一样的对象或具有一样的值便相等,否那么不相等。 第第33页页运算符阐明:using Sys

26、tem;class Class1static void Main(string args)string s1=123;string s2=123;object r1=new object();object r2=new object();r1=10;r2=r1;Console.WriteLine(s1.Equals(s2); Console.WriteLine(r1.Equals(r2); object r3=new object(); r3=10; Console.WriteLine(r1.Equals(r3); /true第第34页页运算符阐明: 6、对相等及不相等的判别: (4) 假设要

27、判别两个援用类型能否援用了同一个对象,那么可运用object.referenceEquals方法进展判别。 第第35页页运算符阐明:using System;class Class1static void Main(string args)object r1=new object();object r2=new object();r1=10;r2=r1;Console.WriteLine(Object.ReferenceEquals(r1,r2);r2=10;Console.WriteLine(Object.ReferenceEquals(r1,r2); 第第36页页运算符运用举例:1、usi

28、ng System;class Class1static void Main() int iresult,irem; double dresult,drem; iresult=10/4; irem=10%4; dresult=10.0/4.0; drem=10.0%4.0; Console.WriteLine(0,1,iresult,irem); Console.WriteLine(0,1,dresult,drem);第第37页页运算符运用举例: 2、using System;class Class1static void Main() int x=2; int y=x+; Console.W

29、riteLine(y=0,y); y=+x; Console.WriteLine(y=0,y);第第38页页运算符运用举例:3、using System; class Class1 static void Main() int a=2; int b=3; Console.WriteLine(a&b); Console.WriteLine(a|b); Console.WriteLine(ab); Console.WriteLine(ab); Console.WriteLine(ab); Console.WriteLine(a=b); Console.WriteLine(a!=b); 第第

30、39页页2.4 构造化程序设计 顺序构造 选择构造 (1) if 构造 (2) switch构造 循环构造 (1) while构造和do while构造 (2) for构造 (3) foreach构造第第40页页foreach构造:格式:foreach(类型 变量 in 集合) 语句阐明:该语句仅用于对集合中的数据进展只读访问。例:using System;class myclass static void Main() int x=1,2,3,4,5,6,7,8; foreach(int i in x) Console.WriteLine(i); 第第41页页练习: 1、求1+2+100的和

31、。 2、经过键盘输入三角形的三边,假设能构成三角形,那么求其面积。 3、输入一组正整数,以0为终了标志,并求其最大值、最小值及其和。 第第42页页2.5 数组数组类型属于援用类型,它由笼统类System.Array派生而来。一维数组 二维数组交错数组参差数组 第第43页页2.5.1 一维数组 数组声明格式:类型 数组名=new 类型名长度也可如下定义 类型 数组名;数组名=new 类型名长度; 第第44页页2.5.1 一维数组 数组初始化数组初始化是指在定义时直接给数组赋初值。格式如下:类型 数组名=初值列表;或类型 数组名=new 类型名 初值列表/此时 内可不指

32、定长度,假设要指定长度,必需与初值列表的值的个数一致。 第第45页页2.5.2 二维数组格式:类型, 数组名=new 类型名长度1,长度2或:类型, 数组名;数组名=new 类型名长度1,长度2 第第46页页2.5.2交错数组参差数组 交错数组是元素为数组的数组。交错数组元素的维度和大小可以不同。交错数组有时称为“数组的数组。其声明格式如下: 类型 数组名=new 类型长度 在交错数组中,每一行又是一个一维数组,所以长度可以不等,在运用时可对每一行再单独定义。主要用于处置可变长的数据集合。例如:输出杨辉三角 第第47页页2.5.3 交错数组参差数组 例如:输出杨辉三角 using System

33、;class Class1static void Main(string args)int c;c=Convert.ToInt16(Console.ReadLine();int a=new intc;int i,j;for(i=0;ic;i+)ai=new inti+1; /ai相当于一个一维数组for(i=0;ic;i+)ai0=1;aii=1;for(i=2;ic;i+)for(j=1;ji;j+)aij=ai-1j-1+ai-1j;for(i=0;ic;i+)for(j=0;j=i;j+)Console.Write(0,-4,aij);Console.WriteLine();第第48页页

34、2.5.4 System.Array类 提供创建、操作、搜索和排序数组的方法,因此在公共言语运转库中用作一切数组的基类。公共属性:Length 获得一个 32 位整数,该整数表示 Array 的所有维数中元素的总数。LongLength获得一个 64 位整数,该整数表示 Array 的所有维数中元素的总数。Rank 获取 Array维数第第49页页2.5.4 System.Array类 公共方法:公共方法:BinarySearch 已重载。使用二进制搜索算法在一维的排序 Array 中搜索值。Clear 将 Array 中的一系列元素设置为零、false 或空引用Copy 已重载。将一个 Ar

35、ray 的一部分复制到另一个 Array 中,并根据需要执行强制类型转换和装箱。CreateInstance 已重载。初始化 Array 类的新实例。GetLowerBound 获取 Array 中指定维度的下限。GetUpperBound 获取 Array 的指定维度的上限。IndexOf 已重载。返回一维 Array 或部分 Array 中某个值第一个匹配项的索引。Initialize 通过调用值类型的默认构造函数,初始化值类型 Array 的每一个元素。LastIndexOf 已重载。返回一维 Array 或部分 Array 中某个值的最后一个匹配项的索引。Reverse 已重载。反转一维 Array 或部分 Array 中元素

温馨提示

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

评论

0/150

提交评论