黑马程序员----- c语言 数组学习


——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

数组的定义


使用数组为了方便一次性定义多个变量,同时为了方便使用这些变量


一个数组就是多个变量的有序集合

1)定义一个数组,就定义了很多的变量

2)这每一个变量都是数组的一个元素或成员

3)数组是一个有序的集合,也就是说可以使用一个数字引用变量

4)数组中每一个元素的使用和一个一般的变量使用一样



 

 一维数组是元素都不是数组的数组

1)数组元素是一个简单的类型或其他非数组的类型

2)一维数组好比一串羊肉串,一个元素挨着一个元素

3)一个数组只允许存储一种数据类型的数据


语法:

数据类型 数组名[ 数组长度 ];

1)数据类型表示数组中每一个元素的类型

2)数组的名字就是一个标识符

3)数组长度可以是一个表达式,表示数组里面有几个变量,常常称为数组的长度


例如:
int nums[3];
表示定义了一个名字为 nums 的数组. 使用 nums 这个名字引用数组,数组里面有 3 个变量,都是 int 类型的


例如:
char chs[10];
表示定义了一个长度为 10 的,存储 char 类型的数组

注意:
早期 C 语言不允许使用变量定义数组
C99 标准中允许使用变量定义数组长度



数组的初始化定义

先定义再初始化,使用下标为每一个元素赋值

语法是 数组名[下标]

int nums[5];
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 4;
nums[4] = 5;


定义的同时进行初始化

1)完全初始化
int nums[5] = { 1, 2, 3, 4, 5 };

2)不完全初始化,没有提供数据的默认初始化为 0 
int nums[10] = { 1, 2, 3, 4, 5 };

3)省略数组长度,由编译器自动判断
int nums[] = { 1, 2, 3, 4, 5 };


数组引用元素


引用数组元素表示使用数组中的每一个变量

使用下标引用数组中指定的变量

语法:
数组名[ 下标 ]


例如:
int nums[] = { 1, 2, 3 };

printf("%d\n", nums[0]);

printf("%d\n", nums[1]);

printf("%d\n", nums[2]);


引用数组元素和使用指定类型变量一样,可以读取数据赋值等

1)读取数据

2)获取数据(打印,计算)

3)自增等




数组的遍历


使用 for 循环对数组进行遍历

for (int i = 0; i < length; i++) {

printf("%d\n", nums[i] );

}




冒泡排序



1、冒泡排序:
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。


2、冒泡排序算法的运作如下:
1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3)针对所有的元素重复以上的步骤,除了最后一个。
4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

3)演示与分析
如果存储的数据为:12,3,40,25,7
如果需要排序,根据冒泡排序的思想分为下面几步:
1)第一轮,两两比较
12和3比,交换得到:3,12,40,25,7
12和40比,不变:3,12,40,25,7
40和25比,交换:3,12,25,40,7
40和7比,交换:3,12,25,7,40
2)第二轮,两两比较
3与12比较,不变:3,12,25,7,40
12与25比较,不变:3,12,25,7,40
25与7比较,交换:3,12,7,25,40
3)第三轮,两两比较
3与12比较,不变:3,12,7,25,40
12与7比较,交换:3,7,12,25,40
4)第四轮,两两比较
3与7比较,不变:3,7,12,25,40
排序完成

 for (int i =0;i <10 ;i ++)
    {
        for (int  j =1; j+i<10 ;j ++){
            
            if (nums[i] > nums[j+i]){
                
                int temp =nums [i];
                
                 nums [i]=nums[j+i];
                
                  nums[j+i]=temp ;
                

                }
            }
    }




二维数组



二维数组名作为函数参数,就是将二维数组的首地址作为参数传递给函数,定义语法为:

void func( int nums[2][3], int row, int column ) {


调用:

int main (void) {
...
int nums[2][3];
...
func(nums, 2, 3);
...
}
注意:参数第一个数字可以省略

特点:函数内与函数外可以看成是同一个二维数组



迷宫游戏

#include 

#define ROW 6
#define COL 6

int main(int argc, const char * argv[]) {
    
    char map[ROW][COL]={
        {'#','#','#','#','#','#'},
        {'#','O','#','#',' ',' '},
        {'#',' ','#','#',' ','#'},
        {'#',' ',' ','#',' ','#'},
        {'#','#',' ',' ',' ','#'},
        {'#','#','#','#','#','#'}
    };
    
    char  input ;
    int x=1;
    int y=1;
    while (1)
    {
    
        for (int i =0 ;i < ROW ;i++){
            for (int j =0;j   ") ;
            input = getchar() ;//  输入字符
            while ( getchar()!='\n');//  吸收回车键字符
            
            
            if (input =='w'|| input =='a'||input =='s'||input =='d'){
                break ;   //如果输入正确则退出while 循环语句
            }
            
        }
        switch (input){
        case 'w':
                if (map[x-1][y]==' '){
                    int temp =map[x-1][y];
                                   map[x-1][y]=map[x][y];
                                    map[x][y]=temp ;
                                    x--;

                }
                break ;
                   case 's':
                            if (map [x+1][y]==' '){
              
                            int temp =map[x+1][y];
                            map[x+1][y]=map[x][y];
                            map[x][y]=temp ;
                            x++;
                    }
                            break;
                    case 'a':
                     if (map [x][y-1]==' '){
              
                            int temp =map[x][y-1];
                            map[x][y-1]=map[x][y];
                            map[x][y]=temp ;
                            y--;
                }
                            break;
                        case 'd':
                            if (map [x][y+1]==' '){
                                
                                int temp =map[x][y+1];
                               map[x][y+1]=map[x][y];
                              map[x][y] = temp ;
                                  y++;
                            }
        
                            break;
            
  
        }
        
    
         system ("clear");
        
        
        }
   printf("恭喜你重获自由...\n");
    
    
    return 0;
    }










你可能感兴趣的:(黑马程序员----- c语言 数组学习)