当前位置:文档之家› 掌握一维和二维数组的定义和数组元素的引用方法(精)

掌握一维和二维数组的定义和数组元素的引用方法(精)


num[0]=2; num[1]=4; num[2]=6; num[3]=8;
wod[0]=‘a’; wod[1]=‘b’; wod[2]= ‘c’; wod[3]=‘d’;
08:47 4
⑥对存储类型为静态的,若<初值列表>的个数少于 元素个数,则只能给前面的元素赋值,后面的元素 的值自动为零(对数值数组)或自动为空字符(对 字符数值)。 “空字符”是指ASCⅡ码为零的字符。 如:static int var[5]={12, 17, 19}; static char str[5]={ ‘A’, ‘B’, ‘C’}; 其实际含义为: var[0]=12; var[1]=17; var[2]=19; var[3]=var[4]=0; str[0]=‘A’; str[1]=‘B’; str[2]=‘C’; str[3]=str[4]=‘NULL ’;
⑦元素个数代表着数组的长度。
08:47 5
§7.1.2 一维数组使用
数组一经定义后,就可在程序中使用,使用格式如下: 数组名[下标] 例如 : var[3]=28; var[4]=var[2]; str[3]= ‘d’; str[2]=str[4]; printf(“%d”, a[0]); 说明: ①下标可以是整数或整型表 达式 。如:var[i+j]=2; ②C编译不检查下标是否 “出界”。
08:47 11
08:47
for(i=0; i<N-1; i++) /* 冒泡排序*/ for(j=0; j<N-i-1; j++) /*第i趟扫描*/ if( a[j] > a[j+1] ) /*相邻两 数比较*/ { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } /* 交换*/ puts("排序后:"); for(i=0; i<N; i++) /*输出排序后的N个数*/ printf("%d ", a[i]); printf("\n"); } 程序运行结果如下: 排序前: 4 3 8 10 5 2 9 6 13 7 排序后: 2 3 4 5 6 7 8 9 10 13
08:47 10
程序如下: /*程序7_2.c,冒泡排序*/ #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 10 void main( ) { int a[N]; int i,j,t; srand( (unsigned)time( NULL ) ); /* 初始化随机 序列*/ for(i=0; i<N; i++) /*产生N个随机数*/ a[i]=rand(); puts("排序前:"); for(i=0; i<N; i++) /*输出N个随机数*/ printf("%d ", a[i]); printf("\n");
static int arr[3][2]={{1, 2},{3}}; /*采用第①种赋初值方式*/ static int arr[3][2]={ 1, 2, 3}; /*采用第②种赋初值方式*/ 上面二种对数组arr部分元素赋初值的结果是相同的, 都是对数组arr的前面3个元素赋初值,后面叁个元素未 赋初值,系统自动化赋以0值。
§7.2.2
二维数组定义
二维数组的定义格式为: <类型标识符> 数组名[行数][列数]: 例如:char word[3][2]; /* 数组word,具有3行2列, 每一个数组元素的值都是字符型数据。 */ int num[2][4]; /* 数组num,具有2列4行, 每一个数组元素的值都是整型数据。 */ 必须记住,数组元素的下标从0开始,因此,数组 word中的元素为: word[0][0] word[0][1] word[1][0] word[1][1] word[2][0] word[2][1]
数组特点: 1.数组元素的个数必须在定义时确定,程序中不可改变。 2.同一数组中的数组元素的类型是相同的。 3.数组元素的作用相当于简单变量。 4.同一数组中的数组元素在内存中占据的地址空间是连 续的。
08:47 2
§7.1.1 一维数组初始化
数组的初始化:对数组元素赋初值。 初始化数组格式: [static] <类型标识符> <数组名[元素个数]>={<初值列表>} 或 <类型标识符> <数组名[元素个数]>={<初值列表>} 例如: [static] int num[4] ={2, 4, 6, 8}; /* 初始化① */
08:47 18
§7.2.3 二维数组的初始化 对二维数组及多维数组的元素赋值初值时,采用“按 行优先”。赋值时可采用对元素全部赋值和部分赋值两 种方式,以二维数组arr[3][2]为例: 一、对全部元素赋初值:
赋初值格式:
<类型标识符> arr[3][2]= {{a1, a2}, {a3, a4}, {a5, a6}}; ——① 或:<类型标识符> arr[3][2] ={a1, a2, a3, a4, a5, a6}; ——②
08:47 7
a[0]=(a[1]+a[2])*(a[3]+a[4]); printf("a[0]=%d\n",a[0]); }
程序运行结果:
输出数组元素的正确值: 1 2 3 4 输出超出下标的元素的值: 0 320 2594 0 改变数组元素的值: a[0]=45
08:47
5
0
8
【例 7-2 】编写程序,实现随机产生 10 个整数,用 冒泡排序法从小到大到排序。
12
§7.2 二维数组的定义和引用
在计算机中多维数组其实只是一个逻辑上的概念,在内 存中,多维数组只按元素的排列顺序存放,形成一个序 列,就好似一维数组一样。 §7.2.1 二维数组的概念
二维数组的应用很广,例如平面上的一组点的集合就可 用二维数组表示,平面上的点可用二维数组来表示:
08:47
13
08:47 14
二维数组在内存中的存放顺序是“按行优先”,即 先存放第一行,然后是第二行、第三行……直到最 后一行。例如,前面的word数组在内存中的存放顺 序如图所示:
08:47
15
从二维数组中各元素在内存中的排列顺序可以 计算出数组元素在数组中的顺序号。假设有一个 m×n的二维数组a,其中i行,j列元素a[i][j]在数组 中排列的位置为: i×n+j(其中 i=0, 1, 2, ……, n-1, j=0, 1, ……, n-1)
[static] char wod[]={‘a’, ‘b’, ‘c’, ‘d’}; /* 初始化② */
08:47
3
说明: ①<初值列表>是用逗号分隔的数值。 ②若对数组中的所有元素都赋以初值,可不必指出元素 个数。见上面的初始化② ③<初值列表>中数值的类型必须与<类型标识符>一致。 ④C语言中,在n个元素组成的一维数组中,数组元素 的下标值依次为0,1,2,…(n-1)。 ⑤上面的初始化数组的实际含义是:
上面三种对数组arr元素赋初值的结果都是相同 的,程序在编译时会按数组在内存中的排列顺序将 各初值赋给数组元素。 在元素个数确定的情况下,缺省维数元素个数只 能是最前面的。 思考arr[3][2]中数组元素在内存中的顺序和数组元 素的值?
08:47 20
二、对部分元素赋初值: 赋初值格式:<类型标识符> arr[3][2]={{a1, a2},{a3}}; ① <类型标识符> arr[3][2]={ a1, a2, a3}; ② 式①称为分行赋值方式,式②称为按顺序赋值。 例如:
或:<类型标识符> arr[ ][2]= {{a1, a2, a3, a4, a5, a6};
——③
式①称为分行赋值方式;式②、式③称为按顺序赋值。
08:47
19
例如:
int arr[3][2]={{1,2}, {3, 4}, {5, 6}}; /*采用第①种赋值方式*/ int arr[3][2]={ 1,2, 3, 4, 5, 6}; /*采用第②种赋值方式*/ int arr[ ][2]={ 1,2, 3, 4, 5, 6}; /*采用第③种赋值方式*/
08:47 17
for (i=0;i<3;i++) { for (j=0;j<4;j++)
printf("ary[%d][%d]=%d\t",i,j,ary[i][j]); printf("\n"); } }
程序运行结果:
Please input number of array: 1 2 3 4 5 6 7 8 9 10 11 12 The number of ary is: ary[0][0]=1 ary[0][1]=2 ary[0][2]=3 ary[0][3]=4 ary[1][0]=5 ary[1][1]=6 ary[1][2]=7 ary[1][3]=8 ary[2][0]=9 ary[2][1]=10 ary[2][2]=11 ary[2][3]=12
08:47 9
冒泡法排序法的思想是相邻两个数据进行比较,较 小的数交换到前面。例如:有10个数据:4, 3, 8, 10, 5, 2, 9, 6, 13, 7。冒泡排序的原理描述如下: 第0趟扫描(每一行括号里的两个数正在比较): ⑷, ⑶, 8, 10, 5, 2, 9, 6, 13, 7 3, ⑷, ⑻, 10, 5, 2, 9, 6, 13, 7 3, 4, ⑻, ⑽,5, 2, 9, 6, 13, 7 3, 4, 8, ⑽,⑸, 2, 9, 6, 13, 7 3, 4, 8, 5,⑽,⑵, 9, 6, 13, 7 3, 4, 8, 5, 2,⑽,⑼, 6, 13, 7 3, 4, 8, 5, 2,9,⑽,⑹, 13, 7 3, 4, 8, 5, 2,9,6,⑽,⒀, 7 3, 4, 8, 5, 2,9,6,10,⒀, ⑺ 3, 4, 8, 5, 2,9,6,10,7, 13 经过10次比较后,最大的一个数13放到了最右边。
相关主题