黑马程序员----- c语言 数组学习
2015-07-24 17:34
453 查看
——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 <stdio.h> #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 <COL ;j++){ printf ("%c",map[i][j]);// 打印数组元素 } printf ("\n"); } if (x ==0||y==0||x==5||y==5 )// 表示在数组的边缘则 胜利 break ; //胜利则推出循环 printf ("请输入w(上)s(下)a(左)d(右)"); while (1) { printf ("> ") ; 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; }
相关文章推荐
- Online Judge System For SzNOI 题库 语法百题 c++ d028
- c语言,数据类型转换
- C++在代码中创建新文件夹
- Online Judge System For SzNOI 题库 语法百题 c++ d027
- c语言,动态数组
- Online Judge System For SzNOI 题库 语法百题 c++ d025
- C/C++ sort函数的用法
- Online Judge System For SzNOI 题库 语法百题 c++ d024
- Online Judge System For SzNOI 题库 语法百题 c++ d023
- 北航12年机试--统计关键字的C语言实现
- Online Judge System For SzNOI 题库 语法百题 C++ d022
- Babelfish
- C语言流程控制之循环笔记
- C语言部分题目解析
- C语言流程控制之循环笔记
- Online Judge System For SzNOI 题库 语法百题 C++ d021
- [LeetCode] Lowest Common Ancestor of a Binary Search Tree
- C语言中关键字static、extern和auto的作用总结
- 设计模式C++实现(1)——工厂模式
- 统计难题