58
C# 程程程程程程 程程 1 程程程 程 程 4.1 数数数数数 4.2 数数数数数数数数 4.3 数数数数数数数 4.4 数数数数数数数数数数 4.5 数数数数数 数数数数数数数 4.6 数数数数 4.7 数数数数 数数数数 程程程程

第四章 数组

  • Upload
    ugo

  • View
    42

  • Download
    2

Embed Size (px)

DESCRIPTION

第四章 数组. 4.1 一维数组 4.2 二维数组 4.3 字符串 4.4 指针和数组 4.5 程序举例. 4.1 一维数组. 4.1.1 引 例 : 【 例 4.1】 求 N 个学生的平均成绩,并统计高于平均分的人数 。. 用以前所学知识实现: int k=0;float s,ave,sum=0; for(int i=0;i>s; sum=sum+s; } ave=sum/100; for(i=0;i>s; - PowerPoint PPT Presentation

Citation preview

Page 1: 第四章  数组

C# 程序设计教程 本书目录 1

第四章 数 组 4.1 数组的概念4.2 数组声明和初始化4.3 数组的常用操作4.4 数组的常用属性和方法4.5 可视化数组—列表框和组合框 4.6 综合应用4.7 自主学习—控件数组

本章目录

Page 2: 第四章  数组

C# 程序设计教程 本书目录 2

4.1 数组的概念 4.1.1 问题的提出例4.1 ①求 n 个学生的平均成绩:

本章目录

XX

mark

aver=0 ;for (i = 1; i <= n; i++) { mark = int.Parse(Console.ReadLine()); aver = aver + mark; } aver = aver / n;

95 分 82 分85 分 76 分 … 58 分 92 分

n 个同学考试成绩

Page 3: 第四章  数组

C# 程序设计教程 本书目录 3

4.1 数组的概念 4.1.1 问题的提出

本章目录

上述代码带来问题( 1 ) mark只能放一个学生的成绩,要实现统计高于平均分的人数。重复输入每人的成绩且不保证输入的一致性。( 2 )若用简单变量保存 n 个学生的成绩,则需定义 n 个变量和使用 n 句输入语句。由此引入了数组。

上述代码带来问题( 1 ) mark只能放一个学生的成绩,要实现统计高于平均分的人数。重复输入每人的成绩且不保证输入的一致性。( 2 )若用简单变量保存 n 个学生的成绩,则需定义 n 个变量和使用 n 句输入语句。由此引入了数组。

②统计高于平均分的人数 , 如何实现?

XX

mark

958285765892…

数组数值变量

Page 4: 第四章  数组

C# 程序设计教程 本书目录 4

数组4.1存放 100 人成绩:

本章目录

mark[99]

mark[98]

…mark[2]

mark[1]

mark[0]

int[ ] mark = new int[100]; // 声明数组 , 数组实例化float aver=0; int i , overn=0 ;

for( i = 0;i<=99;i++) //统计高于平均分的人数 If (mark[i] > aver) overn ++;

for( i = 0;i<=99;i++) // 输入成绩,求和 { mark[i] = int.Parse(Console.ReadLine());

aver = aver + mark[i]; }aver = aver / 100; // 求 100 人的平均分

数组名 :mark

0 1 2 n-2 n-1

mark[2]

Page 5: 第四章  数组

C# 程序设计教程 本书目录 5

数组 :

一种数据结构 , 适用于处理同类型的成批数据 .

一个数组用一个名称表示 , 同一个数组中的所有元素可通过相同的名称及依次编号的下标来引用 ;

是由相同类型的变量组成的集合,系统为其分配了连续的存储区域。使用:用一个数组名代表逻辑上相关的一批数据, 用下标表示该数组中的各个元素,和循环语句结合使用,使得程序书写精炼。

本章目录

4.1.2 数组的概念958285765892…

数组名 :mark

mark[i]

for( i = 0;i<=99;i++)

核心:1.数组是有顺序的。我们可以基于已知的顺序,利用索引来指向数组中的元素2.类型统一,存储在数组中的元素都是同一类型

mark[99]

mark[98]

…mark[2]

mark[1]

mark[0]

0 1 2 … n-2 n-1

mark[2]

Page 6: 第四章  数组

C# 程序设计教程 本书目录 6

例 int[ ] mark=new int[100];

声明 : 一个一维整型数组 mark ,共有 100 个元素;下标 : 范围为 0 To 99 ;各元素 : mark[0] , mark[1] ,…, mark[99] ;mark[i] 表示由下标 i 的值决定是哪一个元素。mark 数组内存分配如下:

xxxx…xxxxxx

每个数组元素有一个唯一的顺序号,下标不能超出数组声明时的下标范围,否则会产生“索引超出了数组界限”。数组元素的使用规则与同类型的变量相同。

本章目录

mark[99]

mark[98]

…mark[2]

mark[1]

mark[0]

Page 7: 第四章  数组

C# 程序设计教程 本书目录

数组的特点

7

每个数组名唯一

用数组名和下标可以唯一确定数组元素

数组声明

引用数组元素数组中元素属于同一数据类型,

且在内存中连续存放

Page 8: 第四章  数组

C# 程序设计教程 本书目录

仅表示是什么类型的数组,没有分配数组空间。

4.2 数组声明、初始化和遍历

8

4.2.1数组声明①声明数组变量

② 实例化数组

类型名 [ ] 数组名 ;

数组名 =new 类型名 [ 整数表达式 ];

其中的逗号 ( 秩说明符 ) 数 = 数组维数 -1

如 int[ ] mark; 一维数组

int[ , ] matrix; 二维数组如 mark=new int[6];matrix=new int[4,6];

在内存连续分配了规定大小的存储空间。

数组的大小数组一旦被创建,大小

就固定了。

Page 9: 第四章  数组

C# 程序设计教程 本书目录

类型 [ ] 数组名 =new 类型[ 元素个数 ];

9

两个步骤合并

int[ ] mark=new int[6];

int[ ] mark;mark=new int[6]; 等价

0 1 2 3 4 5

维数为 1 ,数组长度为6 mark[3]

Page 10: 第四章  数组

C# 程序设计教程 本书目录 10

int[ , ] matrix=new int[4,6];

0

1

2

3

0 1 2 3 4 5

matrix[1,3]

每一维的索引都是从 0 开始

维数 = 逗号数 +1

从左向右读维数,指定最后一个数为“元素”,其他数字作为“分组”。

Page 11: 第四章  数组

C# 程序设计教程 本书目录

4.2.2 数组初始化

数组一旦实例化,数组各元素被自动初始化为元素类型的默认值,如整形为 0 ,浮点型为 0.0 ,布尔型为 false ,字符串为空值。

显式初始化一维数组

11

string[ ] s ={" 段 ", " 洪 ", " 黄 ", " 欧阳 "};double[ ] d=new double[ ]{1.22,3,4,6.71};int[ ] a = new int[4]{ 8, 5, 28, 6 };

可以在声明数组的同时给数组各元素赋值

初始值以逗号分隔

初始值封闭在一组大括号内(一维)

数组创建表达式和初始化值间无连接运算符

前两种方法,数组元素的个数由初始值列表数决定

Page 12: 第四章  数组

C# 程序设计教程 本书目录

显式初始化二维数组

12

int[ , ] mat = new int[3,2]{{10, 18}, {20, 36},{55, 68}};

55 68

20 36

10 180

1

2

0 1

每一个初始值向量封闭在一个大括号内

每一个维度必须嵌套封闭在一个大括号内

每一个维度的初始化列表和组成部分必须用逗号分隔

Page 13: 第四章  数组

C# 程序设计教程 本书目录

4.2.3 数组遍历一维数组

13

foreach (string a in s)

label1.Text += a + "\n";

string[ ] s ={" 语文 ", " 数学 ", " 英语 " };

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

label1.Text += s[i] + "\n";

s.Length

依次访问数组中所有元素

迭代变量,连续表示数组中的每一个元素,与数组元素同类型

Page 14: 第四章  数组

C# 程序设计教程 本书目录

二维数组遍历

14

int[ , ] mat = new int[3,2]{{10, 18}, {20, 36},{55, 68}};

for (int i = 0; i < 3; i++){ for (int j = 0; j < 2; j++) label1.Text += mat[i,j] + " "; label1.Text += "\n";}

s.GetLength(0)

s.GetLength(1)

Page 15: 第四章  数组

C# 程序设计教程 本书目录 19

4.2.3字符串和字符数组特点:在 C#中字符串直接是字符数组

例如: string s=“ 字符串和字符数组” ;则:也可以将 s 当作字符数组来处理: s[1]为‘符’

优点:便于访问字符串中的每一字符

也可用:数组名 .ToCharArray()方法转换将字符串分隔成字符,存放到字符数组char[] cs = s.ToCharArray();

Page 16: 第四章  数组

C# 程序设计教程 本书目录 20

字符统计实例

分析:利用字符串就是字符数组的特性。得到输入字符串后,利用循环逐一提取字符进行统计。

例4.3统计输入的字符串中字母字符、数字字符、其他字符的个数。

Page 17: 第四章  数组

C# 程序设计教程 本书目录

4.3 数组的基本操作 •包括:

–输入、输出–求取最值和平均值–查找、统计和排序–插入和删除

•实现:–利用算法和编程实现–利用数组对象的属性和方法实现

21本章目录

§4.3.1 数组的输入和输出§4.3.2 求数组最值和排序§4.3.3 有序数组的维护

§ 4.4 数组的常用属性和方法

Page 18: 第四章  数组

C# 程序设计教程 本书目录 22

4.3.1数组的输入和输出输入一般可以通过三种方式: ①初始化:固定不变 ②自动产生:有规律或随机数据 ③通过键盘输入:少量数据输出:

通过循环的方式进行输出注意控制输出时格式和换行问题

例4.4 形成 5×5有规律的数据,分别以三种形式输出。

文件

分析: `

1. 数字规律 a[i,j]=i*5+j+1;

2. 数字对齐 每个元素占 4 列 format(“{0,4}”,a[i,j])

3. 下三角 i=0~4,j=0~i

4. 上三角 i=0~4,j=i~4 空格 i*4

Page 19: 第四章  数组

C# 程序设计教程 本书目录

4.3.2 数组最值和排序

根据数组中保存的各学生考试成绩,求取最低分?

23

95 82 85 76 58 92

min mark[0]i

> 9582< 85> 76> 58< 92? 补充:将最小值数组元素与数组的

第一个元素进行交换

iMin

i思路:采用摆擂台的方法,求最小值时,数组中每个数与擂主比较,小于擂主就进行替换,遍历整个数组后,擂主就是最小值。求最大值与之同理。

mark[i]

Page 20: 第四章  数组

C# 程序设计教程 本书目录

int[] mark = { 95,82,85,76,58,92};int iMin, min, i, t;min = mark[0]; iMin = 0;// 置 min 和 iMin 初值for (i = 1; i < mark.Length; i++) if (mark[i] < min) // 数组元素小于 min 时 { min = mark[i]; // 更新 min 的值 iMin = i; // 更新 iMin 的值 }// 将最小值 mark[iMin] 与首元素 mark[0] 交换t = mark[0]; mark[0] = mark[iMin]; //min mark[iMin] = t;

主要实现代码

24

置 min 和 iMin 初值

将每个 mark[i] 与 min 比较, 小值赋给 min ,并记录其位置

遍历数组,找到最小值 min 和其索引 iMin

将最小值 min 与首元素 mark[0] 交换

Page 21: 第四章  数组

C# 程序设计教程 本书目录

数组排序

排序是将数组的元素按递增或递减进行排列

常用的排序算法:选择法冒泡法

25

or

Page 22: 第四章  数组

C# 程序设计教程 本书目录

选择法

26

95 82 85 76 58 92

9582 85 7658 92

9576 85 8258 92

9576 82 8558 92

9576 82 8558 92

算法内容:

每一轮中,从未排序部分找出最小 ( 大 ) 值

将最值和未排序部分的首位元素进行交换

更新未排序部分的范围

Page 23: 第四章  数组

C# 程序设计教程 本书目录

流程图

27

i=0

i<=n-2?

iMin=i;j=i+1

j<=n-1?

M[j]<M[iMin]?

iMin=j

j=j+1 iMin!=i?

t=M[i];M[i]=M[iMin];M[iMin]=t;

i=i+1

输出

Y

N

N

N

Y

Y

Y

将此轮找到的最小值和未排序部分的首位元素进行交换

设最小值初值

在未排序的数组元素中找最小值

从未排序部分找出最小值

更新未排序的首元素位置

Page 24: 第四章  数组

C# 程序设计教程 本书目录

int[] mark={95, 82, 85, 76, 58, 92};int i, j, iMin, t, n= mark.Length; // 数组的元素数为 n// 选择法排序for (i = 0; i <= n - 2; i++) // 需要进行 n-1 轮比较{ iMin = i; // 第 i 轮比较时,初始假定第 i 个元素为最小// 在数组第 i+1 ~ n-1 个元素中选最小元素的下标 for (j = i + 1; j <= n-1; j++) if (mark[j] < mark[iMin]) iMin = j;// 将第 iMin 个数与第 i 个数交换 t = mark[i]; mark[i] = mark[iMin] ; mark[iMin] = t; }

主要实现代码

28

选择法排序找到第 i 轮的最小数,将其与数组的第 i 个元素进行交换

第 i 轮比较时,初始假定第 i 个元素为最小

遍历数组的第 i+1 ~ n-1 个元素,找出最小元素的下标

将本轮的最小数,即数组第 iMin 个数与第 i个数进行交换

Page 25: 第四章  数组

C# 程序设计教程 本书目录 29

选择法排序

选择法排序过程示意

本章目录

            原始数据 95, 82, 85, 76, 58, 92a[0]

a[1]

a[2]

a[3]

a[4]

a[5]

第 1 轮比较  a[1

]a[2]

a[3]

a[4]

a[5]

第 2 轮比较    a[2

]a[3]

a[4]

a[5]

第 3 轮比较      a[3

]a[4]

a[5]

第 4 轮比较        a[4

]a[5]

第 5 轮比较

58, 82, 85, 76, 95, 92

58, 76, 85, 82, 95, 92

58, 76, 82, 85, 92, 95

58, 76, 82, 85, 95, 92

58, 76, 82, 85, 95, 92

i=0 j=1~5

i=2 j=3~5

iMin=4

iMin=3

Page 26: 第四章  数组

C# 程序设计教程 本书目录

冒泡法

30

95

82

85

76

9258

82

95

85

76

9258

82

85

95

76

9258

82

85

76

95

9258

82

85

76

58

9295

第一轮在每一轮排序时将相邻数据两两比较,次序错误( 比较结果和目标次序相反 ) 时对两数据进行交换,使得每轮排序最值往正向调。

Page 27: 第四章  数组

C# 程序设计教程 本书目录

冒泡法(第二轮)

31

82

85

76

58

9592

82

85

76

58

9592

82

76

85

58

9592

82

76

58

85

9592

Page 28: 第四章  数组

C# 程序设计教程 本书目录

冒泡法(第三轮)

32

82

76

58

85

9592

76

82

58

85

9592

82

58

76

85

9592

Page 29: 第四章  数组

C# 程序设计教程 本书目录

冒泡法(第四轮)

33

82

58

75

85

9592

58

82

75

85

9592

Page 30: 第四章  数组

C# 程序设计教程 本书目录

冒泡法(第五轮)

34

58

75

82

85

9592

Page 31: 第四章  数组

C# 程序设计教程 本书目录

int[] mark = { 95, 82, 85, 76, 58, 92 };int t , n = mark.Length;//冒泡法排序 for(int i = 0;i<=n - 2; i++)//共有 n-1 轮排序 { for(int j=0;j<=n-2-i; j++)// 第 i 轮进行 n-i-1 次比较 if (mark[j+1] < mark[j]) {// 次序不对,马上交换 t=mark[j];

mark[j]=mark[j+1];mark[j+1]=t; }

}

主要实现代码

35

n=6

i=0~4

Page 32: 第四章  数组

C# 程序设计教程 本书目录 36

冒泡法排序

                  原始数据 原始数据

95, 82, 85, 76, 58, 9295, 82, 85, 76, 58, 92

a[0]

a[0]

a[1]

a[1]

a[2]

a[2]

a[3]

a[3]

a[4]

a[4]

a[5]

a[5]

第 1 轮比较第 1 轮比较

82, 85, 76, 58, 92, 9582, 85, 76, 58, 92, 95

a[0]

a[0]

a[1]

a[1]

a[2]

a[2]

a[3]

a[3]

a[4]

a[4]

   第 2 轮比较第 2 轮比较

82, 76, 58, 85, 92, 9582, 76, 58, 85, 92, 95

a[0]

a[0]

a[1]

a[1]

a[2]

a[2]

a[3]

a[3]

      第 3 轮比较第 3 轮比较

82, 58, 76, 85, 92, 9582, 58, 76, 85, 92, 95

a[0]

a[0]

a[1]

a[1]

a[2]

a[2]

         第 4 轮比较第 4 轮比较

58, 76, 82, 85, 92, 9558, 76, 82, 85, 92, 95

a[0]

a[0]

a[1]

a[1]

            第 5 轮比较第 5 轮比较

58, 76, 82, 85, 92, 9558, 76, 82, 85, 92, 95

本章目录

Page 33: 第四章  数组

C# 程序设计教程 本书目录

冒泡法改进

37

//冒泡法排序 for(int i = 0;i<=n - 2; i++)//共有 n-1 轮排序 { bool flag=true;// 设第 i 轮的 flag 初值为 true for(int j=0;j<=n-2-i; j++)// 第 i 轮进行 n-1-i 次比较 if (mark[j+1] < mark[j]) {// 次序不对,马上交换

flag=false; t=mark[j];

mark[j]=mark[j+1];mark[j+1]=t; }

if (flag) break;// 第 i 轮未执行任何交换,退出排序 }

每一轮开始时,设置该轮的 flag 初值为 true

一旦发生交换, flag 值置为 false

本轮未执行任何交换,将退出排序

Page 34: 第四章  数组

C# 程序设计教程 本书目录

小结

掌握计算数组的最值掌握用编程的方法实现选择法和冒泡法排序

如何在有序数组中进行数据的插入和删除,保持结果依然有序?

39

Page 35: 第四章  数组

C# 程序设计教程 本书目录 40

4.3.3 有序数组的维护 -- 插入数据 插入数据基本思想是:首先查找待插入数据在数组中的位置 k ;然后从最后一个元素开始往前直到下标为 k的 元素依次往后移动一个位置;将数据插入第 k 个元素的位置。

1 4 7 10 13 16 19 22 25 ④ ③ ② ①

14 k x

本章目录

注意:C# 无动态数组,可另声明 1 个元素个数多 1 的数组,然后通过: 原数组名 .CopyTo( 新数组名 , 起始位置 )来复制

注意:C# 无动态数组,可另声明 1 个元素个数多 1 的数组,然后通过: 原数组名 .CopyTo( 新数组名 , 起始位置 )来复制

例4.8在有序数组 a 中插入数值 x 。 例4.8在有序数组 a 中插入数值 x 。

插入数据演示插入数据演示

Page 36: 第四章  数组

C# 程序设计教程 本书目录 41

删除数据 首先也是要找到欲删除的元素的位置 k ;然后从 k+1到 n个位置开始向前移动;最后通过数组各元素复制的方法,实现删除。

例4.9要将值为 13 的元素删除。 例4.9要将值为 13 的元素删除。

1 4 7 10 13 14 16 19 22 25

① ② ③ ④ ⑤

k

本章目录

数据删除演示数据删除演示

Page 37: 第四章  数组

C# 程序设计教程 本书目录

4.4利用数组对象的属性和方法

42

1. 常用属性 ( 1 ) Length 获得数组总元素个数,对一维数组比较有用。 ( 2 ) Rank 获得数组维数2. 常用方法 ( 1 ) GetLength(i) 获得数组指定维 i 的元素个数 ( 2 ) GetUpperBound(i) 获得数组指定维 i 的上界

某维上界 = 某维元素个数 -1

如下程序段遍历二维数组: int i,j; int[,] a=new int[,]{{1,2},{3,4},{5,6}}; for(i=0;i<=a.GetUpperBound(0);i++) // 等价于 for ( i=0;i<a.GetLength(0);i++) {

for (j=0;j<=a.GetUpperBound(1);j++) // 等价于 for (j=0;j<a.GetLength(1);j++)

label1.Text += a[i, j] + " "; label1.Text += "\n"; // 出了内循环换行 }

Page 38: 第四章  数组

C# 程序设计教程 本书目录

( 3 )数组 .CopyTo( 目标数组,起始下标 )将一维源数组所有元素复制到一维目标

数组中从起始下标开始的连续元素中 .

43

一维数组 目标数组与源数组必须类型兼容

从起始下标开始的空间必须大于等于源数组的大小。

int[] a = { 1,3,5,7,9};int[] b = new int[10];a.CopyTo(b, 3);

0 0 0 1 3 5 7 9 0 0

Page 39: 第四章  数组

C# 程序设计教程 本书目录 44

利用 Array 类的静态方法数组是 System.Array类实例化的对象,只要创

建了数组,就可以直接引用它的属性、方法。1.Sort 方法 递增排序 形式 Array.Sort( 数组名 ) ;2.Reverse 方法 逆序排列 形式 Array.Reverse( 数组名 ) ;插入、删除、类栈、队列

例4.10

产生随机数,赋予数组

输出数组:循环,换行

Random r = new Random();int[] a=new int[20];for (int i = 0; i < a.Length; i++)

a[i] = r.Next(10, 101);

for (int i = 0; i < a.Length; i++) { y.Text += String.Format("{0,3}", a[i]); if ((i + 1) % 4 == 0)

y.Text += "\n"; }

递增排序输出数组:循环,换

Array.Sort(a);

递减排序输出数组:循环,换

Array.Reverse(a);

a 必须有序

Page 40: 第四章  数组

C# 程序设计教程 本书目录

C#中如何动态创建数组?• C# 不支持动态数组,用 ArrayList 可实现动态数组的功能

• ArrayList不等同于数组,可看为扩充功能的数组

45

ArrayLi

st

ArrayList 数组只有一维 可以多维根据需要自动扩充 容量固定提供添加、插入或移除某一范围元素的方法

读取或设置某个元素的值

Using System.Collections;

Page 41: 第四章  数组

C# 程序设计教程 本书目录

属性Count 实际包含的元素数Item 获取或设置指定索引处的元素

46

方法Add(Value) 增加元素值 Value

Insert(Index, Value) 在 Index 位置插入元素值 Value

Remove(Value) 删除元素RemoveAt(Index) 按索引删除元素Clear() 清空元素Sort() 升序排列数组元素ArrayList List = new ArrayList();for( int i=0;i<10;i++ ) //给数组增加 10 个 Int 元素 List.Add(i); List.RemoveAt(5);// 将第 6 个元素移除for( int i=0;i<3;i++ ) //再增加 3 个元素 List.Add(i+20);

Page 42: 第四章  数组

C# 程序设计教程 本书目录 47

4.5 列表框和组合框 一、问题的提出 数组:系统为其在分配了连续的内存空间,存放同种

种性质的数据; 若要显示数组每个元素的值,只能通过循环语句。 若要进行排序、插入、删除操作,有相应算法。

一、问题的提出 数组:系统为其在分配了连续的内存空间,存放同种

种性质的数据; 若要显示数组每个元素的值,只能通过循环语句。 若要进行排序、插入、删除操作,有相应算法。

本章目录

列表框和组合框:实质是可视化一维字符串数组 利用属性可以直接访问某选项、排序操作 利用方法可以方便地删除、插入操作

列表框和组合框:实质是可视化一维字符串数组 利用属性可以直接访问某选项、排序操作 利用方法可以方便地删除、插入操作

Page 43: 第四章  数组

C# 程序设计教程 本书目录

列表框与组合框

• 列表框( ListBox )控件是一个显示多个项目的列表,便于用户选择一个或多个项目列表,但不能直接修改其中的内容。

• 组合框 (ComboBox) 它允许用户在文本框输入内容,也允许用户在列表内选择项目同时在文本框显示。

48

兼有文本框和列表框的功能特性

可以通过 Add 方法将内容添加到下面的列表内

只能显示不能编辑 通过属性

SelectionMode控制

Page 44: 第四章  数组

C# 程序设计教程 本书目录 49

二、列表框 ListBox与组合框 ComboBox区别

本章目录

列表框 组合框

列表框:只能显示选项,不能直接修改。组合框:组合了文本框和列表框,有 3 种式样。

不能输入

Page 45: 第四章  数组

C# 程序设计教程 本书目录 50

数组声明 string[] a=new string[10];

数组名 a元素个数 10下标 i数组元素 a[i]a[i]

数组声明 string[] a=new string[10];

数组名 a元素个数 10下标 i数组元素 a[i]a[i]

三、主要属性

本章目录

建立的 listBox1控件:Items 集合Items.Count 项目个数SelectedIndex 当前选定下标Text 项目内容SelectedItem 选中内容

建立的 listBox1控件:Items 集合Items.Count 项目个数SelectedIndex 当前选定下标Text 项目内容SelectedItem 选中内容

listBox1.Text

listBox1.Items[listBox1.SelectedIndex]

对应

listBox.SelectedItem

string 类型

object 类型

Page 46: 第四章  数组

C# 程序设计教程 本书目录 51

属性 Sorted ( bool类型)

程序运行期间列表框或组合框的选项是否按字符码值自动排序。 默认为 False

本章目录

Page 47: 第四章  数组

C# 程序设计教程 本书目录 52

四、常用方法 (1) Items.Add( 选项 )作用:把一个选项添加到最后例如: listBox1.Items.Add("周海涛 ")

本章目录

(2) Items.Insert(Index,选项 )作用:把一个选项插入到由 Index 指定的位置, 该位置及以后的内容自动依次下移例如: listBox1.Items. Insert(3, "周海涛 ")

Page 48: 第四章  数组

C# 程序设计教程 本书目录 53

(3)Items.RemoveAt(Index)

删除由 Index指定位置的选项。 例如: listBox1.Items.RemoveAt(4)

本章目录

(5) Items.Clear 用于清除列表框或组合框的所有选项

(4) Items.Remove( 项目字符串 )

删除由字符串值指定的选项 例如: listBox1.Items.Remove ("华成 ")

Page 49: 第四章  数组

C# 程序设计教程 本书目录 54

五、主要事件列表框: Click 、 DoubleClick组合框: Click

例4.11 编写一个能对列表框进行项目添加、修改和删除的应用程序。

本章目录

修改列表框,分三步:选项显示在文本框中 ;更改文本框中内容 ;再更新列表框中选项

修改列表框,分三步:选项显示在文本框中 ;更改文本框中内容 ;再更新列表框中选项

窗体 Load (载入)时:添加列表框的若干选

项 ;

窗体 Load (载入)时:添加列表框的若干选

项 ;

添加时:将文本框输入内容

Add至列表框最后 ;

添加时:将文本框输入内容

Add至列表框最后 ;

删除时:RemoveAt当前索引位

删除时:RemoveAt当前索引位

Page 50: 第四章  数组

C# 程序设计教程 本书目录 55

列表框和组合框应用

例4.13 对列表框有序数据进行插入、删除。Load 时:通过 Add 方法添加有序的数据项

插入时:查找插入的位置在指定位置插入

listBox1.Items.Clear();int[] a = { 1, 4, 7, 12, 13, 45, 67, 89 };for (int i = 0; i < a.Length; i++) listBox1.Items.Add(a[i]);

查找删除时:查找删除的位置在指定位置删除

删除选定项时:直接删除选定项目

listBox1.Items.Remove(listBox1.SelectedItem);

Page 51: 第四章  数组

C# 程序设计教程 本书目录 56

六、应用例 4.12编写一个使用系统支持的字体、字号的程序

例 4.12编写一个使用系统支持的字体、字号的程序

本章目录

问题:如何只显示汉字字体?

用 ASCII码判断  在 ASCII码表中,西文字符的范围是 0-127 ,而汉

字则是大于 127 , (int)c[i] > 127

系统支持的屏幕字体通过 FontFamily 类的 Families 集合获得,数组元素个数由数组的 Length 属性获得;

字体在组合框 ComboBox1显示,用户不能输入。

采用 DropDownStyle.DropDownList 为下拉式列表框。

选择所需的字体后,在标签控件显示该字体效果。

字号通过程序自动形成 6 ~ 40磅值的某些数值,在组合框ComboBox2显示。

用户可以输入其它磅值,故采用 DropDownStyle.DropDown 为下拉式组合框。

可在组合框的文本框输入字号,也可在组合框选择字号,改变标签控件显示该字号效果。

for(int i = 0;i<= FontFamily.Families.Length - 1;i++) if(FontFamily.Families[i].Name[0]>127)

comboBox1.Items.Add(FontFamily.Families[i].Name);

for (int i=6;i<=40;i=i+3) //显示字号 comboBox2.Items.Add(i);

private void comboBox2_SelectedIndexChanged(…){// 两者共享 if(comboBox1.Text!="" && comboBox2.Text!="") label4.Font = new Font(comboBox1.Text,

int.Parse(comboBox2.Text)); }

Page 52: 第四章  数组

C# 程序设计教程 本书目录 57

例 使用组合框对省和直辖市名称管理例 使用组合框对省和直辖市名称管理

本章目录

要求: 1. 组合框内容有序; Sorted 属性2.当在组合框的文本框输入内容,按回车键后查询组合框内有无该项内容,有则不加,否则加入;查找

3. 选中某项内容,自动在文本框显示,单击“修改”按钮,修改该项内容

SelectedIndex 属性

Page 53: 第四章  数组

C# 程序设计教程 本书目录 58

4.5 综合应用1. 分类统计将一批数据按条件统计每一类中包含的个数。例如,统计学生成绩各分数段人数。这类问题要掌握分类条件表达式的书写和使用计数变量保存相应的计数。

本章目录

Page 54: 第四章  数组

C# 程序设计教程 本书目录 59

统计 26 个字母出现的个数,必须声明一个具有 26个元素的数组 A ( 26 ),每个元素的下标表示对应的字母,元素的值表示对应字母出现的次数。 从输入的字符串转换成大写字符 ( 不区分大小写 ) ,逐一取出字符,求得其在数组中的下标,进行相应元素的计数。关键表达式: j = (int)s[i] - 65; a[j]++;

统计 26 个字母出现的个数,必须声明一个具有 26个元素的数组 A ( 26 ),每个元素的下标表示对应的字母,元素的值表示对应字母出现的次数。 从输入的字符串转换成大写字符 ( 不区分大小写 ) ,逐一取出字符,求得其在数组中的下标,进行相应元素的计数。关键表达式: j = (int)s[i] - 65; a[j]++;

本章目录

a[0] a[1] a[2] a[23] a[24] a[25]

‘A’ ‘B’ ‘C’ ‘X’ ‘Y’ ‘Z’

例 4.14 输入一串字符,统计各字母出现的次数

Page 55: 第四章  数组

C# 程序设计教程 本书目录 60

2. 大量数据的输入和编辑 在财务、工程计算中,经常需要对大量的数据进行输入和编辑。可利用文本框通过编程来实现。 例 4.15 输入一系列的数据,对输入的数据允许修改和自动识别非数字数据。输入结束将它们按分隔符分离后存放在数组中 , 并在标签框显示。

本章目录

输入数据时 :利用 e.KeyChar参数和 e.Handled = true语句过滤非法数据;

数据分离时:先利用 Replace 方法去除并替换回车换行符;再利用 Split 方法按” ,” 分离到数组中。

数据合并时:用” ;” 连接数组各元素并显示

输入数据时 :利用 e.KeyChar参数和 e.Handled = true语句过滤非法数据;

数据分离时:先利用 Replace 方法去除并替换回车换行符;再利用 Split 方法按” ,” 分离到数组中。

数据合并时:用” ;” 连接数组各元素并显示

Page 56: 第四章  数组

C# 程序设计教程 本书目录 61

5.加密和解密 信息加密是信息安全性的措施之一。信息加密有各种方法,最简单的加密方法是将每个字母平移一个位置 ( 称为密钥 ) 。例如,后移 5 个位置,这时, A→F , B →G… Y →D , Z→E , a →f ;解密是加密的逆操作。 例 4.16编一加密和解密的程序,对英文字母加密,密钥为 5 ,其他字符不变;加密后还可再进行解密。

5.加密和解密 信息加密是信息安全性的措施之一。信息加密有各种方法,最简单的加密方法是将每个字母平移一个位置 ( 称为密钥 ) 。例如,后移 5 个位置,这时, A→F , B →G… Y →D , Z→E , a →f ;解密是加密的逆操作。 例 4.16编一加密和解密的程序,对英文字母加密,密钥为 5 ,其他字符不变;加密后还可再进行解密。

本章目录

Page 57: 第四章  数组

C# 程序设计教程 本书目录 62

Visual Studio 2012

V s[0] 值’ V’

91 x= s[0]+5; V码值 86

65 x>’Z’?x=x-26; // 是否超过字母范围

A

①逐一取出待加密的字符,这可通过字符串与字符数组的关系,利用“ []”运算符直接取得字符;②对字符加密的流程见下:

①逐一取出待加密的字符,这可通过字符串与字符数组的关系,利用“ []”运算符直接取得字符;②对字符加密的流程见下:

code+=(char)x; //加密一个字符完成

加密思路

思考:解密思路?

Page 58: 第四章  数组

C# 程序设计教程 本书目录 63

4.7 自主学习

定义控件一般分为二步:① 声明一个控件类数组 ;

② 对每个元素实例化,设置位置、大小、显示等属性,加入到控件集合中 ;

定义控件一般分为二步:① 声明一个控件类数组 ;

② 对每个元素实例化,设置位置、大小、显示等属性,加入到控件集合中 ;

4.7.1 控件数组

③ 创建公共事件处理程序,利用 ClickHandler过程处理事件 。使得 ClickHandler来处理该所定义的数组的事件触发调用,然后添加代码以将事件与事件处理程序相关联。

③ 创建公共事件处理程序,利用 ClickHandler过程处理事件 。使得 ClickHandler来处理该所定义的数组的事件触发调用,然后添加代码以将事件与事件处理程序相关联。

控件数组:每个控件是数组元素控件数组:每个控件是数组元素