C语言数组_04
概念:数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
在C语言中使用数组必须先进行定义。
一维数组:
一维数组的定义方式为: 类型说明符 数组名 [常量表达式]
例如:int a [10] 它表示定义了一个整型数组,数组名为a,此数组有10个元素,都是整型变量。
需要注意的是:
1)类型说明符是任一种基本数据类型或构造数据类型。对于同一数组,其所有元素的数据类型都是相同的。
2)数组名是用户定义的数组标示符。书写规则应符合标示符的书写规定。
3)方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
4)允许在同一类型说明中,说明多个数组和多个变量。如: 1 int a, b, c, d [10], k[20];
5)a[10],表示数组中有10个元素,下标是从0~9。a[0]~a[9],不存在a[10]。
6)C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
1 // 错误 2 int n; 3 scanf("%d", &n);/*在程序中临时输入数组的大小*/ 4 int a [n];
1 // 常见的错误 2 float a[0]; /* 数组大小为0没有意义 */ 3 int b(2)(3); /* 不能使用圆括号 */ 4 int k, a[k]; /* 不能用变量说明数组大小 */ 5 6 // 正确演示 7 int a[10]; 8 float b[10], c[20]; 9 char ch[20];
一维数组在内存中的存放,如图:
一维数组元素的引用一般形式: 数组名[下标]
一维数组的初始化赋值:
1)类型说明符 数组名[常量表达式] = {值,……值};
2)可以只给一部分元素赋值(表示只给前面元素赋初值,后面元素值为0)。例如:
1 int i; 2 int a[10] = {0, 1, 5, 6}; 3 4 for (i = 0; i < 9; i ++) { 5 printf("%d ", a[i]); 6 } 7 /* 8 打印结果:0 1 5 6 0 0 0 0 0 9 */
3)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度),如下:
1 int a[6] = {0, 1, 5, 6, 10, 12}; 2 int a[] = {0, 1, 5, 6, 10, 12}; // 系统会据此自动定义a数组的长度为5
使用冒泡排序对数组进行排序:
1 void bubble_sort(int arr[], int len) { 2 int i, j, temp; 3 for (i = 0; i < len - 1; i ++) { 4 for (j = 0; j < len - 1 - j; j ++) { 5 if (arr[j > arr[j + 1]]) { 6 temp = arr[j]; 7 arr[j] = arr[j + 1]; 8 arr[j + 1] = temp; 9 } 10 } 11 } 12 } 13 14 int main(int argc, const char * argv[]) { 15 int arr[] = {20, 54 , 10, 32, 56, 82, 89, 5, 66, 47, 101}; 16 int len = (int)sizeof(arr)/sizeof(int); 17 bubble_sort(arr, len); // 从小到大进行排序 18 int i; 19 for (i = 0; i < len; i ++) { 20 printf("%d\n", arr[i]); 21 } 22 return 0; 23 }
二维数组:
1、二维数组定义的一般形式为: 类型说明符 数组名[常量表达式] [常量表达式]
例如: 1 float a [6] [8]; // 定义a为6x8(6行8列)的二维数组
二维数组在概念上是二维的,但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。
如何在一维存储器中存放二维数组,有两种方式:
1)按行排列:即放完一行之后顺次放入第二行。
2)按列排列:即放完一列之后顺次放入第二列。
在C语言中,二维数组是按行排列的。
2、二维数组初始化:
1)直接分行给二维数组赋初值:
1 int a [3] [4] = {{1, 2, 3, 4}, {5, 7, 1, 2}, {6, 1, 4, 3}};
2)将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值:
1 int a [3] [4] = {1, 2, 3, 4, 5, 7, 1, 2, 6, 1, 4, 3};
3)可以对部分元素赋初值: 1 int a [3] [4] = {{6}, {5}, {9}};
可以对各行中某一元素赋初值: 1 int a [3] [4] = {{6}, {8, 5}, {9, 1, 6}};
4)如果对全部元素都赋初值,则定义数组时,对第一维的长度可以不指定,但第二维的长度不能省:
1 int a [] [4] = {1, 2, 3, 4, 5, 7, 1, 2, 6, 1, 4, 3};
3、利用数组进行数据查找--(二分法)这折半查找法介绍
适用情况:在一堆有序数据中查找某数据
1 #define M 10
1 static int a[M] = {-10, 6, 10, 15, 20, 29, 30, 66, 89, 90}; 2 int temp, low, mid, high, found; 3 low = 0; 4 high = M - 1; 5 found = 0; 6 int d; 7 8 printf("Please input a number:\n"); 9 // 查找 temp 这个数 10 d = scanf("%d", &temp); 11 12 printf("d = %d\n", d); 13 14 15 if (temp < a[0] || temp > a[M - 1]) { 16 printf("There is no %d.\n", temp); 17 } 18 19 while (low <= high) { 20 mid = (low + high) / 2; 21 if (temp == a[mid]) { 22 found = 1; 23 break; 24 } else if (temp > a[mid]) { 25 low = mid + 1; 26 } else { 27 high = mid - 1; 28 } 29 } 30 if (found) { 31 printf("temp = %d\n", temp); 32 }
尊重作者劳动成果,转载请注明: 转载自【kingdev】