C# 数组
数组
day06 2018.01.09 周二
--------------------------------------------------------
上午
数组
数组的定义:
数组类型[] 数组名 ;
如:int[] ages ;
数组的初始化:明确数组长度和数组元素赋值的过程
静态:明确已知数组长度,数组中每个元素具体值
int[] ages = { 20 ,25 ,30 }
ages.Length ; //数组长度
动态:明确已知数组的长度,但是不明确数组中某一个
某几个元素的具体值。
int[] ages;
ages = new int[30];
或:int[] ages = new int[30];
1) 动态初始化后,数组中每个元素都是有值的
默认值。int默认值为0,float|double默认为
0.0,bool默认值为:false
2) 动态初始化数组时,还可以为通过一组大括号,
数组中元素指定值,如:
int[] ages = new int[4]{ 20,21,25,22 };
这样写要保证,数组长度4一定要和大括号中元素
值的个数保持一致,也就是长度写了4,大括号里
必须也是4个值,否则,就会报错。
当然,上面的代码也可以写成:
int[] ages = { 20,21,25,22 };
3) 无论是静态的还是动态创建的数组,数组长度
一旦定义,是不能再改变长度的
数组名词:
数组名 : score
数组类型: int
数组长度: 3
数组元素: score[0] score[1] score[2]
数组元素的值: 60 61 80
数组下标: 是一个具体的数字,数字是从0开始,
第一个元素下标值为0,最后一个元素
的下标:数组名.Length - 1
数组的遍历:(访问)
int[] score = { 60 , 61 , 80 };
1. Console.WriteLine ( score[0] );
Console.WriteLine ( score[1] );
Console.WriteLine ( score[2] );
2. for循环,score[0],score[1]
for ( int i = 0; i<score.Length; i++ )
{
Console.WriteLine( score[i] );
}
3. for循环,反序
for( int i = score.Length -1 ; i >= 0 ; i-- )
{
Console.WriteLine( score[ 3 ] );
}
二、Array.cs 数组操作的工具类
1) Array.Copy(参数1,参数2,参数3) : 数组的拷贝
- 方法需要三个参数:
参数1为源数组,参数2为目标数组,参数3为拷贝的长度
2) Array.Sort( 参数 ) : 数组的排序
- 方法需要一个参数:
参数处写上数组名,表示对哪个数组排序
3) Array.Reverse( 参数 ):数组的反转(顺序反过来了)
- 方法需要一个参数:
参数处写上数组名,表示对哪个数组反转
4) Array.Clear(参数1,参数2,参数3): 数组的清空操作
5) ...............
代码详见:DAY05_03_Array01 ArrayDemo3.cs
下午
练习:键盘获取5个int类型的整数,
作为后面参数数。
要求:
1) 动态初始化一个数组
2) 通过键盘为每个元素赋值。
3) 然后遍历数组
4) 并定义变量,存储所有元素和。
5) 求数组元素的平均值
-------------------------------
第一种排序算法:冒泡排序(重要)
前言
1. 两个数要交换存放数据,如何做?
int a = 10 ;
int b = 20 ;
1. 将 a 的值赋值给第三个变量
int temp = a ; //temp = 10
2. 将 b 的值赋值给 a
a = b ; // a = 20
3. 为 b 赋值:将temp的值赋值给b
b = temp ;
冒泡排序
生活中的排队场景
冒泡排序核心是两两相邻进行比较,一旦条件符合,
就交换位置。不符合,继续下一个两两相邻比邻,
经过第一轮之后,整除团队中最高的那个人就找到了。
10 -1 -2 -10 按小到大
第一轮:最大的那个数被冒到最后
1) 10 与 -1 进行比较,交换 ,就成:
-1 10 -2 -10
2) 10 与 -2 进行比较,交换,变成:
-1 -2 10 -10
3) 10 与 -10 进行比较,交换,变成:
-1 -2 -10 10
第二轮:剩下的这三个人进行排列,倒数第二个高的人
-1 -2 -10
1) -1 与 -2 比较, 交换 ,变成:
-2 -1 -10
2) -1 与 -10 比较, 交换 ,变成
-2 -10 -1 10
第三轮:剩下的两个数比较,找到倒数第三个高的人
1) -2 - 10 交换,变成:
-10 -2 -1 10
4个数比较,比较3轮
每一轮比较次数不确定
2. 冒泡排序的核心代码:
外层循环控制比较多少轮
for( int i = 0 ; i < 数组名.Length-1 ; i++ )
{
//内层for循环控制的是每一轮比较的次数
for ( int j = 0 ; j < 数组名.Length-1 ; j++ )
{
if ( n[j] > n[ j+1 ] )
{
int temp = n [j] ;//将n[j]的值赋值给temp
n[j] = n[j+1] //为 n[j] 重新赋值
n[i+1] = temp; //为 n[i+1] 赋值
}
}
}
代码详见:DAY06_01_Array02 工程 LianXi1.cs
SortArrayByBubble() 方法
练习1:动态初始化一个数组,8个随机数 [0,100)
要求:使用冒泡排序将这组数据按从小到大的顺序
排列。
1.数组(动态)
2.随机数(8个,0-100)
3.冒泡
4.从小到大
--------------------------------------------------
第二种排序算法: 顺序排序(选择排序)
1. 核心 算法:从小到大
首先取出数组的第一个元素分别与后面的每个元素进行
比较,如果出现符合条件的数据,马上要进行交换,保证
第一个位置上放的数一定是最小的数据。
注:经过这一轮,第一个位置上的数据一定是数组中最
小的那个元素。
接着,取出数组中的第二个元素分别与后面的每个进行
比较,遇到符合条件的,交换。经过第二轮,倒数第
二个小的元素
......
2.顺序排序的核心代码:
for ( int i = 0 ; i < n.Length -1; i++ )
{
for ( int j = i+1 ; j < n.Lenght ; j++ )
{
if ( n[i] > n[j])
{
int temp = n[i];
n[i] = n[j];
n[j] = temp ;
}
}
}
代码详见:DAY06_01_Array02 工程 LianXi1.cs
SortArrayByOrder() 方法
总结:
1.数组
3W1H
what : 数组是什么?
why : 为什么要使用数组?
when : 什么时候用?
how : 如何使用?
定义
初始化 (静态,动态)
名词(元素,长度,下标 .....)
遍历:
i.Console.WriteLine( n[0] );
ii.for标准 ,正序
iii.for标准,反序
iiii.foreach 自动遍历
1) 数组常用的操作: Array
Sort()、冒泡排序、顺序排序
Copy()
Clear()
Reverse()
2) 利用随机数为元素赋值
3) 获取数组中的所有元素和
平均值
最大值或最小值
4)数组的长度一旦定义,长度不能再改变
5)数组属于一种引用类型的数据
一维数组
二维数组
1个学生对应了两门考试 C# Unity
3个学生的考试成绩
first: 60 75
second: 70 85
third : 58 60
2.二维数组静态初始化:
int[,] scores =
{ { 60,75 } ,{70,85},{58,60} };
二维数组的动态初始化:
int[,] scores = new int[ 3,2 ];
或:
int[,] scores ;
scores = new int[ 3,2 ];
二维数组在表示时,由行和列组成
如何表示二维数组中的某一个元素 ;
数组名[ 行的索引值 , 列的索引值 ]
如: scores[2,1] :
访问的score数组中第3行第2列的那个元素
day06 05作业 2018.01.09 周二
授课内容: 数组相关知识点
----------------------------------------------------
一.自由编码题:
学习了数组的基本概念,通过代码已经掌握了一维数组
和二维数组的基本使用。请主要思考,我们生活中
有哪些地方(场合)使用了一维数组,哪场合使用了
二维数组。
然后,能否使用相应的代码将这个场景描述出来。
描述时,可以使用任意类型,任意方式,任意遍历。
二 编程题
1. 求数组元素的最大值 (尽力必做 )
创建程序,实现查询数组最大值得功能,键盘输入
每个元素的值,要求查询出数组中的最大值,
最小值,并打印在界面上控制台如下:
数组中的元素为:
10, 27, 88, 36, 25, 2, 90, 51, 22
最大值为:90
最小值为:2
提示思路:
1.定义一个最大数的变量,int max ;
2.假设现在数组中的第一个元素就是数组中的最大值
然后将数组的第一个元素两会给max变量
max = numbers[0];
3. 然后,构建for循环,循环初值从1开始。
循环体中,取出 数组中每个变量,分别与
max进行比较,如果一旦出现比max要大的数字,
将这个数据赋值给max变量。没有出现,则进行
下一个元素数据的比较
4.最后 max变量中存储的就是数组的最大值。
同样的,找出数组中的最小值也是一样的操作。
假定数组的第一个元素也是最小值,并将值赋值给min
然后for循环依次比较,如果出现比min要小的数字,那么
就为min变量重新赋值。
2.考查:数组的应用 (选做)
定义一个方法,方法用于:
在数组中指定位置插入指定的元素值
int[] num = {1,-100,2,-200,3};
int[] newNum = {*,*,*,*,*,* }
请输入要插入元素的位置:2
请输入要插入元素的值: 4
1.定义一个新数组,新数组长度为原数组长度+1
2.将num数组中所有元素复制到新数组中
int[] newNum = {1,-100,2,-200,3,* }
3.提示用户输入在哪个位置插入元素:2
提示用户插入元素的值:1000
4.最后遍历新数组:
{ 1,-100,2,-200, 3, 0 }
3.
网站验证码 (选做题)
现有一组字符,要求从这组字符中随机取出4位作为网站 验证码。
注:这一组字符串是由 26个大写字母,26个小写字母10个 数字构成的char类型的数组,数组名为codes。
要求:从codes数组中随机取出4位.作为网站验证码,要求 这4位验证码放在数组中
考查: char 类型数组的定义及初始化、随机数的操作.
提示:声明并初始化数组
产生一个随机数,随机数范围,int index = new Random ().Next (codes.Length)
for循环遍历数组,取出index位置上的那个字符
考虑:如何做到验证码不重复