第 2 章 基本数据类型

39
2 2 第 第第第第第第 第 第第第第第第 王王王 王王王王王王王王王王王王

Upload: fritzi

Post on 13-Jan-2016

102 views

Category:

Documents


0 download

DESCRIPTION

第 2 章 基本数据类型. 王德俊 上海交通大学继续教育学院. 第 2 章 基本数据类型. 2.1 一个简单的程序 2.2 基本数据类型 2.3 变量与常量 2.4 基本运算 2.5 数组的定义和使用 ( 数组类与数组列表类 结构 枚举 ). 数组类与数组列表类. 用简单选择法对 n 个数排序. 选择排序过程: ( 1 )首先通过 n-1 次比较,从 n 个数中找出最小的,将它与第一个数交换 --- 第一趟选择排序,结果最小的数被安置在第一个元素位置上 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 2 章 基本数据类型

第第 22 章 基本数据类型章 基本数据类型

王德俊

上海交通大学继续教育学院

Page 2: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

第第 22 章 基本数据类型章 基本数据类型

2.1 一个简单的程序

2.2 基本数据类型

2.3 变量与常量

2.4 基本运算

2.5 数组的定义和使用 ( 数组类与数组列表类 结构 枚举 )

Page 3: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

选择排序过程:( 1 )首先通过 n-1 次比较,从 n 个数中找出最小的,将它与

第一个数交换 --- 第一趟选择排序,结果最小的数被安置在第一个元素位置上

( 2 )再通过 n-2 次比较,从剩余的 n-1 个数中找出关键字次小的记录,将它与第二个数交换 --- 第二趟选择排序

( 3 )重复上述过程,共经过 n-1 趟排序后,排序结束

用简单选择法对 n 个数排序

数组类与数组列表类数组类与数组列表类

Page 4: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

static void Main(string[] args) { const int n = 10; int[] a=new int[n]; int i,j,k,x;

Console.WriteLine("Input 10 numbers:"); for(i=0;i<=n-1;i++) a[i]=int.Parse(Console.ReadLine()); Console.WriteLine(); // 输入数组元素

数组类与数组列表类(续)数组类与数组列表类(续)

Page 5: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

for(i=0;i<=n-2;i++) { k=i; // 记录最小的数所在的位置 for(j=i+1;j<=n-1;j++) if(a[j]<a[k]) k=j; if(i!=k) { x=a[i];a[i]=a[k];a[k]=x;} } // 简单选择排序

Console.WriteLine("The sorted numbers:"); for(i=0;i<=n-1;i++) Console.Write("{0} ", a[i]); Console.WriteLine(); Console.ReadLine(); } // 输出数组元素

数组类与数组列表类(续)数组类与数组列表类(续)

Page 6: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

C# 通过 .NET 框架中的 System.Array 数组类来支持数组,因此,可以使用该类的属性与方法操作数组

数组列表类( ArrayList )是一个集合类,由该类声明的对象也可以当做数组来使用

数组类与数组列表类(续)数组类与数组列表类(续)

Page 7: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

System.ArraySystem.Array 类类

System.Array 类提供创建、操作、搜索和排序数组的方法,因而在 CLR 中用作所有数组的基类。列举常用属性和方法如下:

1) Length 属性

2) IsReadOnly 属性

3) Clone 方法

4) CopyTo 方法

5) Sort 方法

6) Reverse 方法

Page 8: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

System.ArraySystem.Array 类(续)类(续)

Length 属性 : 是数组对象的一个只读属性,表示数组包含多少个元素

在操作数组时,可利用 Length 属性避免下标越界,例如:

int [ ]A=new int[10];

for(int i=0;i<A.Length;i=i+1) A[i]=i;

IsReadOnly 属性,此属性对于所有数组总是 false 。

Page 9: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

CloneClone 方法方法

实现克隆数组功能,使用格式:目标数组名 =( 数组类型名 ) 源数组名 .Clone( );

例如:int [ ]A=new int[5]{10,8,6,4,2};// 声明并初始化数组 A ,该数组将作

为源数组int [ ]B; // 声明数组 B ,该数组将作为目标数组B=(int [ ])A.Clone(); // 使用 Clone 方法

使用克隆方法时,将得到一个与源数组一模一样的数组,且目标数组不需要再实例化Clone 方法创建 Array 的浅表副本。即仅复制 Array 的元素(无论它们是引用类型还是值类型),但不复制这些引用所引用的对象。

Page 10: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

CopyToCopyTo 方法方法实现数组拷贝功能,使用格式:

源数组名 .CopyTo( 目标数组名 , 起始位置 );例如:

int [ ]A=new int[5]{6,7,8,9,10}; // 声明并初始化数组 A ,该数组将作为源数组

int [ ]B=new int[10]{1,2,3,4,5,1,2,3,4,5};// 声明并初始化数组 B ,该数组将作为目标数组

A.CopyTo(B,5);将数组 A 中的各元素值 6、 7、 8、 9、 10 合并到数组 B 中,合并后

数组 B 中的各元素值为 1、 2、 3、 4、 5、 6、 7、 8、 9、 10利用“起始位置”参数,可以将一个元素较少的数组中的元素值合并到一个元素较多的数组中

Page 11: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

SortSort 方法方法实现数组排序功能,使用格式为:

Array.Sort( 数组名 );

例如:

int [ ]A=new int[5]{10,8,6,4,2};

Array.Sort(A);

排序后,数组 A 中各元素值的排列顺序为: 2、 4、 6、 8、10

Page 12: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

ReverseReverse 方法方法将数组名对应的数组元素顺序反转,格式如下:

Array.Reverse( 数组名 );

例如:

Array. Reverse(A);

如果数组 A 中各元素值原来为: 2、 46、 6、 8、 10 ,则反转后为: 10、 8、 6、 46、 2

Page 13: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

示例示例 ArraySortArraySort

[例 1] 创建 Windows 应用程序在程序中声明包含 10 个元素的双精度型数组为数组元素赋值为 0~100 之间的随机实数单击“升序”按钮,数组按升序排序单击“降序”按钮,数组按降序排序输出排序前后数组的元素值

Page 14: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

在 Form1 类定义中声明一个 double 类型的数组和一个 string 类型的变量:double [ ]A=new double[10];

string s;

Page 15: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

窗体的 Load 事件代码:private void Form1_Load(object sender,

System.EventArgs e){

Random rn=new Random( ); // 声明一个随机数生成对象for(int i=0;i<A.Length;i=i+1){

A[i]=Math.Round(rn.NextDouble( )*100,1); // 赋予数组各元素随机值

s+=A[i]+" "; // 将数组元素值的原顺序保存为一个字符串}s+="\n\n";label1.Text=" 数组原顺序为: \n"+s;

}

Page 16: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

“ 升序”按钮的 Click 事件代码:private void button1_Click(object sender,

System.EventArgs e) // 升序 { Array.Sort(A);

label1.Text=" 数组原顺序为: \n"+s;label1.Text+=" 数组升序排序: \n";for(int i=0;i<A.Length;i++) label1.Text+=A[i]+" ";

} // 升序处理结束

Page 17: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

“降序”按钮的 Click 事件代码:private void button2_Click(object sender,

System.EventArgs e) // 降序{

Array.Sort(A);Array.Reverse(A);label1.Text=" 数组原顺序为: \n"+s;label1.Text+=" 数组降序排序: \n";for(int i=0;i<A.Length;i++) label1.Text+=A[i]+" ";

} // 降序处理结束

Page 18: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

在程序代码中使用了随机数生成对象 rn的 NextDouble 方法,该方法能够生成一个 0.0~1.0 之间的实数为了使生成的随机数只保留一位小数,使用了 Math (数学)类中的Round 方法以确定小数点后保留几位小数Round 方法的使用格式为:Math.Round( 双精度类型数据 , 需要保留的小 数位数 )

Page 19: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

System.CollectionsSystem.Collections..ArrayListArrayList 类类

ArrayList 是动态数组,它的好处:可动态增加和减少元素,可灵活设置数组的大小。

ArrayList 类属于 System.Collections 命名空间

Page 20: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

ArrayListArrayList 类类常用的方法和属性1 ) Count 属性

2 ) IsReadOnly 属性

3 ) Clone与 CopyTo 方法

4 ) Add 方法

5 ) BinarySearch 方法

6 ) Sort 方法和 Reverse 方法

System.Collections.ArrayListSystem.Collections.ArrayList 类类

Page 21: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

在声明 ArrayList 类对象时,可以用一个已经实例化的数组来初始化,其格式为:

ArrayList 对象名 =new ArrayList( 数组名 );

其中,“数组名”为已经实例化的数组

例如:

int [ ]A=new int[5]; // 声明并实例化数组

ArrayList AL=new ArrayList(A); // 声明并实例化数组列表

这样, AL 相当于包含 5 个元素的整型数组

System.Collections.ArrayListSystem.Collections.ArrayList 类类

Page 22: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

1 1 )) ArrayListArrayList 类的类的 CountCount 属性属性

在数组列表 ArrayList 类中,表示包含元素个数的属性为 Count ,其性质与用法与数组的 Length 属性相同

Page 23: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

22 ) ) IsReadOnlyIsReadOnly 属性属性

数组列表均具有 IsReadOnly 属性,利用该属性可以获知数组列表中的元素是否为只读的

IsReadOnly 属性值默认为 false (假)

Page 24: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

33 ) ) CloneClone与与 CopyToCopyTo 方法方法

克隆( Clone )与拷贝( CopyTo )方法的功能均为数组复制操作:

使用格式如下:

目标数组列表名 =(ArrayList) 源数组列表名 .Clone( );

源数组列表名 . CopyTo (目标数组名)

// Array必须具有从零开始的索引。

Page 25: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

4 4 )) AddAdd 方法方法

将对象添加到 ArrayList 的结尾处。使用格式:

数组列表名 .Add(object 对象 );

如:

ArrayList myAL = new ArrayList();

for (int i = 0; i <= 4; i++)

myAL.Add(i * 2);

Page 26: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

55)) BinarySearchBinarySearch 方法方法

使用默认的比较器在整个已排序的 ArrayList 中搜索元素,并返回该元素从零开始的索引,没找到则返回小于零的值。使用格式:

数组列表名 . BinarySearch(object 对象 );

如: int myIndex = myAL.BinarySearch(6); if (myIndex < 0) Console.WriteLine("没找到 "); else Console.WriteLine("找到 {0}", myIndex);

Page 27: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

ArrayListArrayList 方法使用例子方法使用例子

ArrayList myAL = new ArrayList(); for (int i = 0; i <= 4; i++) myAL.Add(i * 2); ArrayList myBL = (ArrayList)myAL.Clone(); int []A=new int[5]; myAL.CopyTo (A); int myIndex = myBL.BinarySearch(6); if (myIndex < 0) Console.WriteLine("没找到 "); else Console.WriteLine("找到 {0}", myIndex);

Page 28: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

Sort 方法使用格式为:数组列表名称 .Sort( );

Reverse 方法使用格式为:数组列表名称 .Reverse( );

例如:int [ ]A=new int[5]{5,4,3,2,1};ArrayList AL=new ArrayList(A);AL.Sort( );AL.Reverse();排序后,数组列表 AL 中各元素值的排列顺序为: 1、 2、 3、 4、 5反转后,各元素值的排列顺序为: 5、 4、 3、 2、 1

66 ) ) SortSort 方法和方法和 ReverseReverse 方法方法

Page 29: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

4 4 自定义数据类型自定义数据类型

自定义的数据类型包括结构与枚举结构与枚举都属于值类型,而数组是引用类型

( 1 ) 结构类型( 2 ) 枚举类型

Page 30: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

(1) (1) 结构类型结构类型

结构类型可以用来处理一组类型不同、内容相关的数据1) 定义结构2) 声明结构变量3) 访问结构变量

Page 31: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

1) 1) 定义结构定义结构

结构的定义需要使用 struct 关键字,格式如下:struct 结构类型名{

public 类型名 1 结构成员名 1;

public 类型名 2 结构成员名 2;

...

}

“结构类型名”表示用户定义的新数据类型名称一对大括号之间定义结构成员“ 类型名”可以是基本数据类型,也可以是另一个已定义的结构类型

Page 32: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

例如:struct date{

public uint year,month,day;}struct employee{

public string name;public bool sex;public date birthday;public string phone;public decimal pay;

}

Page 33: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

2) 2) 声明结构变量声明结构变量

定义结构后,可以用结构来声明变量例如: date d1; // 声明一个结构变量 d1

可以在声明结构变量的同时,为结构变量赋值,实质上是为结构变量中的成员赋值,如:

date d1 = new date(); d1.year = 2012; d1.month = 10; d1.day = 8; date d2 = d1; // 用结构变量 d1为 d2 赋值

又如:employee jerry;jerry=tom; // 用结构变量 tom 为结构变量 jerry 赋值

Page 34: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

3) 3) 访问结构变量访问结构变量

使用结构中的成员必须指出访问的结构变量方法是在结构变量和成员之间通过运算符“ .”连接在一起:

结构变量名 .成员名例如:tom.name="汤姆 ";tom.sex=true;tom.birthday.year=1980;tom.birthday.month=5;tom.birthday.day=26;tom.phone="13868782069";tom.pay=1500;

Page 35: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

(2) (2) 枚举类型枚举类型

枚举类型是由用户定义的一组整型符号常量使用枚举可以将一组相关的有限常量组织在一起,保证变量只能具有预定的值由于常量都有名称,易于辨认,从而提高了程序的可读性

1) 定义枚举类型2) 声明与访问枚举变量

Page 36: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

1) 1) 定义枚举类型定义枚举类型

定义枚举类型使用关键字 enum ,定义枚举类型的一般格式为:enum 枚举类型名{

符号常量 1,符号常量 2,…

}枚举类型的成员均为符号常量,常量名之间用逗号分隔

例如:enum SolarSystem{Sun,Earth,Moon

}

Page 37: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

枚举常量成员的默认值为 0 、 1 、 2… ,可以在定义枚举类型时为成员赋予特定的整数值

例如:

enum SolarSystem

{

Sun=700000, // 太阳半径

Earth=6380, // 地球赤道半径

Moon=1740 // 月亮半径

}

Page 38: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

2) 2) 声明与访问枚举变量声明与访问枚举变量

声明枚举变量与声明基本类型变量的格式相同 SolarSystem S; // 声明一个枚举变量 S

可以在声明枚举变量的同时为变量赋值枚举变量的值必须是枚举成员,枚举成员需要用枚举类型引导例如:

SolarSystem S= SolarSystem.Sun; // 为枚举变量 S 赋值 Sun

对枚举变量的访问同基本类型变量,例如: SolarSystem S= SolarSystem.Sun;

int Num=S; // 将 S 的值赋给整型变量 Num

Page 39: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

本讲小结本讲小结

数组类与数组列表类

结构

枚举