1、C# 程序设计 Programming in C# 结构体数组 1 、结构体数组的定义和初始化 2 、结构体数组的使用 C#程序设计 6.1.3 结 构体与数 组 3 1 结 构体 类型的 数组 当有多 个同一 结构体 类型的 结构体 实例时 ,可以 将它们 组织成一个 结构体 数组。 结构体 数组的 元素类 型为结 构体类 型,一维结构 体数组 的定义 语法如 下: 或 结 构 体类 型 名 结 构体 数 组名=new 结构体类型名数组长度; 结 构 体类 型 名 结 构体 数 组名; 结构 体数组 名=new 结构体 类型名数组长度; 6.1.3 结 构体与数 组 4 例如 ,定义 包括1
2、00 个点 的结构 体数组 的代码 如下: 或 POINT p=new POINT100; POINT p; p=new POINT100; 6.1.3 结 构体与数 组 5 只有所 使用的 结构体 类型含 有带参 数的构 造函数 时,才 能对结构体 数组进 行初始 化。 6.1.3 结 构体与数 组 6 例如: struct POINT public double x;/ 横 坐标 public double y;/ 纵 坐标 public POINT(double a,double b)/带 参 数的 构 造 函 数 x=a;y=b; ; static void Main() POINT
3、p = new POINT(2.0,3.1), new POINT(2.5,3.8), new POINT(5.0,8.1);/ 对 结 构体 类 型 数 组p 进 行 初 始化 6.1.3 结 构体与数 组 7 引用结 构体数 组成员 时,需 要将数 组的下 标运算 符和成 员引用运算 符结合 起来使 用。语 法形式 如下: 例如: 结 构 体数 组 名 下 标 表达 式.成员名 p0.x=1.0;/p0 是 一 个 结构 体 类 型 实 例 p0.y=2.0; 6.1.3 结 构体与数 组 8 2 数 组作 为结构 体的成 员 实 际 上,结 构体的 成员可 以是C# 支持的任 意数据 类
4、型。 因此,数 组也可 以作为 结构体 成员, 并且该 数组的 元素类 型可以是C# 支 持的任 意数据 类型。 6.1.3 结 构体与数 组 9 数组作 为结构 体成员 的示例 如下: struct RECTANGLE public POINT p; RECTANGLE r; r.p = new POINT4; 6.1.3 结 构体与数 组 10 引用结 构体的 数组成 员时, 需要将 下标运 算符和 成员引 用运算符结 合起来 使用, 语法形 式如下 : 例如: 结构体. 数 组 成员 名 下 标 表 达式 r.p0.x=0; r.p1.y = 2; 11 6.1.3 结 构体与数 组 【
5、 例6.1 】 计算10 个 学 生 的总成 绩并按 照总成 绩降序 排列学 生信息 (例5.17)。 12 6.1.3 结 构体与数 组 例6.1 1 using System; 2 class SCORESORT 3 4 struct STUSCORE/ 结构体类型定义 5 6 public string sNo; 7 public int chineseScore; 8 public int mathScore; 9 public int englishScore; 10 public int totalScore; 11 / 结 构 体类 型 的 带 参 数 构 造 函 数 12 pu
6、blic STUSCORE(string sno, int chinese, int math, int english) 13 14 sNo = sno; 13 6.1.3 结 构体与数 组 例6.1 15 chineseScore = chinese; 16 mathScore = math; 17 englishScore = english; 18 totalScore = chineseScore + mathScore + englishScore; 19 20 21 static void Main() 22 23 STUSCORE SINFO = new STUSCORE10
7、new STUSCORE(001,80,89,90),new STUSCORE(002,76,90,88),new STUSCORE(003,88,78,95),new STUSCORE(004,60,79,84),new STUSCORE(005,86,87,69),new STUSCORE(006,56,89,70),new STUSCORE(007,94,96,98),new STUSCORE(008,84,86,89),new STUSCORE(009,100,83,91),new STUSCORE(010,69,98,87);/定 义并初 始 化 包 括10 个 元素的 结 构 体
8、数 组 24 STUSCORE temp; 14 6.1.3 结 构体与数 组 例6.1 25 for (int i = 0; i 10; i+)/借选 择 排 序 实 现 按 总 成 绩 降 序 26 27 int maxPos = i; 28 for (int j = i + 1; j SINFOmaxPos.totalScore) 30 maxPos = j; 31 if (maxPos != i) 32 33 temp=SINFOmaxPos; SINFOmaxPos=SINFOi; SINFOi=temp; 34 35 36 Console.Write(0,101,102,103,1
9、04,10,SNO,Chinese,Math,English,Total); 37 Console.WriteLine(); 15 6.1.3 结 构体与数 组 例6.1 38 for (int i = 0; i 10; i+) 39 40 Console.Write(0,101,102,103,104,10,SINFOi.sNo,SINFOi.chineseScore,SINFOi.mathScore,SINFOi.englishScore,SINFOi.totalScore); 41 Console.WriteLine(); 42 43 44 16 6.1.3 结 构体与数 组 例6.1
10、运行结果 1 using System; 2 class SCORESORT 3 4 struct STUSCORE/ 结构体类型定义 5 6 public string sNo; 7 public int chineseScore; 8 public int mathScore; 9 public int englishScore; 10 public int totalScore; 11 / 结 构 体类 型 的 带 参 数 构 造 函 数 12 public STUSCORE(string sno, int chinese, int math, int english) 13 14 sN
11、o = sno; SNO Chinese Math English Total 007 94 96 98 288 009 100 83 91 274 003 88 78 95 261 001 80 89 90 259 008 84 86 89 259 002 76 90 88 254 010 69 98 87 254 005 86 87 69 242 004 60 79 84 223 006 56 89 70 215 17 6.1.3 结 构体与数 组 例6.1 1 using System; 2 class SCORESORT 3 4 struct STUSCORE/ 结构体类型定义 5 6
12、 public string sNo; 7 public int chineseScore; 8 public int mathScore; 9 public int englishScore; 10 public int totalScore; 11 / 结 构 体类 型 的 带 参 数 构 造 函 数 12 public STUSCORE(string sno, int chinese, int math, int english) 13 14 sNo = sno; 18 6.1.3 结 构体与数 组 例6.1 1 using System; 2 class SCORESORT 3 4 s
13、truct STUSCORE/ 结构体类型定义 5 6 public string sNo; 7 public int chineseScore; 8 public int mathScore; 9 public int englishScore; 10 public int totalScore; 11 / 结 构 体类 型 的 带 参 数 构 造 函 数 12 public STUSCORE(string sno, int chinese, int math, int english) 13 14 sNo = sno; 19 6.1.3 结 构体与数 组 例6.1 15 chineseSc
14、ore = chinese; 16 mathScore = math; 17 englishScore = english; 18 totalScore = chineseScore + mathScore + englishScore; 19 20 21 static void Main() 22 23 STUSCORE SINFO = new STUSCORE10 new STUSCORE(001,80,89,90),new STUSCORE(002,76,90,88),new STUSCORE(003,88,78,95),new STUSCORE(004,60,79,84),new ST
15、USCORE(005,86,87,69),new STUSCORE(006,56,89,70),new STUSCORE(007,94,96,98),new STUSCORE(008,84,86,89),new STUSCORE(009,100,83,91),new STUSCORE(010,69,98,87);/定 义并初 始 化 包 括10 个 元素的 结 构 体 数 组 24 STUSCORE temp; 20 6.1.3 结 构体与数 组 例6.1 15 chineseScore = chinese; 16 mathScore = math; 17 englishScore = eng
16、lish; 18 totalScore = chineseScore + mathScore + englishScore; 19 20 21 static void Main() 22 23 STUSCORE SINFO = new STUSCORE10 new STUSCORE(001,80,89,90),new STUSCORE(002,76,90,88),new STUSCORE(003,88,78,95),new STUSCORE(004,60,79,84),new STUSCORE(005,86,87,69),new STUSCORE(006,56,89,70),new STUSC
17、ORE(007,94,96,98),new STUSCORE(008,84,86,89),new STUSCORE(009,100,83,91),new STUSCORE(010,69,98,87);/定 义并初 始 化 包 括10 个 元素的 结 构 体 数 组 24 STUSCORE temp; 21 6.1.3 结 构体与数 组 例6.1 15 chineseScore = chinese; 16 mathScore = math; 17 englishScore = english; 18 totalScore = chineseScore + mathScore + englishS
18、core; 19 20 21 static void Main() 22 23 STUSCORE SINFO = new STUSCORE10 new STUSCORE(001,80,89,90),new STUSCORE(002,76,90,88),new STUSCORE(003,88,78,95),new STUSCORE(004,60,79,84),new STUSCORE(005,86,87,69),new STUSCORE(006,56,89,70),new STUSCORE(007,94,96,98),new STUSCORE(008,84,86,89),new STUSCORE
19、(009,100,83,91),new STUSCORE(010,69,98,87);/定 义并初 始 化 包 括10 个 元素的 结 构 体 数 组 24 STUSCORE temp; 22 6.1.3 结 构体与数 组 例6.1 25 for (int i = 0; i 10; i+)/借选 择 排 序 实 现 按 总 成 绩 降 序 26 27 int maxPos = i; 28 for (int j = i + 1; j SINFOmaxPos.totalScore) 30 maxPos = j; 31 if (maxPos != i) 32 33 temp=SINFOmaxPos;
20、 SINFOmaxPos=SINFOi; SINFOi=temp; 34 35 36 Console.Write(0,101,102,103,104,10,SNO,Chinese,Math,English,Total); 37 Console.WriteLine(); 23 6.1.3 结 构体与数 组 例6.1 25 for (int i = 0; i 10; i+)/借选 择 排 序 实 现 按 总 成 绩 降 序 26 27 int maxPos = i; 28 for (int j = i + 1; j SINFOmaxPos.totalScore) 30 maxPos = j; 31 if (maxPos != i) 32 33 temp=SINFOmaxPos; SINFOmaxPos=SINFOi; SINFOi=temp; 34 35 36 Console.Write(0,101,102,103,104,10,SNO,Chinese,Math,English,Total); 37 Console.WriteLine(); 结束