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位置上的那个字符

 

 考虑:如何做到验证码不重复

posted @ 2019-09-10 19:47  Winward_King  阅读(414)  评论(0编辑  收藏  举报