C程序设计 主讲教师:汪闽 南京师范大学 地图学与地理信息系统04级 专业选修课
C程序设计 南京师范大学 地图学与地理信息系统04级 专业选修课 主讲教师: 汪闽
第六章数组 6.1数组概念 6.2一维数组 6.3二维数组及多维数组 6.4字符数组和字符串
第六章 数组 6.2 一维数组 6.3 二维数组及多维数组 6.4 字符数组和字符串 6.1 数组概念
61数组概念 ·构造数据类型之· ·数组:有序数据的集合,用数组名标识 ·元素:属同一数据类型,用数组名和下标确定
6.1 数组概念 • 构造数据类型之一 • 数组:有序数据的集合,用数组名标识 • 元素:属同一数据类型,用数组名和下标确定
62一维数组 数组运算符 单目运算符 优先级(1) 左结合 ★一维数组的定义 不能用() 令定义方式:数据类型数组名[常量表达式]; 例inta[6]; 合法标识符 表示元素个数 下标从0开始 all 2] 编译时分配连续内存 数组名表示内存首地址, 内存字节数=数组维数* 是地址常量 SIzes元素数据类型) a[5]
一维数组的定义 ❖定义方式: 数据类型 数组名[常量表达式]; 合法标识符 表示元素个数 下标从0开始 [ ] :数组运算符 单目运算符 优先级(1) 左结合 不能用( ) 例 int a[6]; 0 a[0] 1 4 5 a[1] a[2] a[3] a[4] a[5] 2 3 a 编译时分配连续内存 内存字节数=数组维数* sizeof(元素数据类型) 数组名表示内存首地址, 是地址常量 6.2 一维数组
621一维数组的引用 例inti=15 例 int data[5] datl[5}-10;∥C语言对数组不作越界检查,使用时要注意 ◆数组必须先定义。后使用 令只能逐个引用数组元素,不能一次引用整个数组 令数组元素表示形式:数组名[下标] 其中:下标可以是常量或整型表达式 例inta[l0] brint f(%da);(×) 必须for(=0j<10j++ printf(" %odt,, aLD
❖数组必须先定义,后使用 ❖只能逐个引用数组元素,不能一次引用整个数组 ❖数组元素表示形式: 数组名[下标] 其中:下标可以是常量或整型表达式 例 int i=15; int data[i]; (不能用变量定义数组维数) 例 int a[10]; printf(“%d”,a); () 必须 for(j=0;j<10;j++) printf(“%d\t”,a[j]); () 例 int data[5]; data[5]=10; //C语言对数组不作越界检查,使用时要 注意 6.2.1一维数组的引用
622一维数组的初始化 今初始化方式 inta[5}={1,2,34,5} 等价于:a[0]=1;a[l=2;a[2]=3;a[3]4;a[4]=5; 今说明: 数组不初始化,其元素值为随机数 ●对stat数组元素不赋初值。系统会自动赋以0值 只给部分数组元素赋初值 当全部数组元素赋初值时,可不指定数组长度 TAT inta={1,2,3,4,5,6} 编译系统根据初值个数确定数组维数厂O;
❖初始化方式 在定义数组时,为数组元素赋初值 (在编译阶段使之得到初值) int a[5]={1,2,3,4,5}; 等价于:a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5; ❖说明: ⚫数组不初始化,其元素值为随机数 ⚫对static数组元素不赋初值,系统会自动赋以0值 ⚫当全部数组元素赋初值时,可不指定数组长度 如 int a[5]={6,2,3}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 如 int a[3]={6,2,3,5,1}; () static int a[5]; 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; ⚫只给部分数组元素赋初值 int a[]={1,2,3,4,5,6}; 编译系统根据初值个数确定数组维数 6.2.2一维数组的初始化
例用冒泡法对10个数排序 排序过程: (1)比较第一个数与第二个数,若为逆序a0>a1,则交换;然 后比较第二个数与第三个数;依次类推,直至第n-1个数和第 n个数比较为止—第一趟冒泡排序,结果最大的数被安置在 最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在 第n-1个元素位置 (3)重复上述过程,共经过n-趟冒泡排序后,排序结束
排序过程: (1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然 后比较第二个数与第三个数;依次类推,直至第n-1个数和第 n个数比较为止——第一趟冒泡排序,结果最大的数被安置在 最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在 第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束 例 用冒泡法对10个数排序
例38 38383813 1313 13 49494913 272727 27 6565 132730 3030 76 38 13273038 1376 30 4949 2730 65 65 例用冒泡法对10个数排序 3076 76 (图解) 9797 程序见P125 初第第第第第第第 始 五六七 关趟趟耥趟趟趟趟 键 字 n=8
例 38 49 65 76 13 27 30 97第一趟 38 49 65 13 27 30 76第二趟 38 49 13 27 30 65第三趟 38 13 27 30 49第四趟 13 27 30 38第五趟 13 27 30第六趟 49 38 65 97 76 13 27 30初始关键字 n=8 38 49 76 9713 97 97 27 30 97 13 76 7676 30 13 2765 3065 65 13 13 49 3049 2749 2738 308 38 13 27第七趟 例 用冒泡法对10个数排序 (图解) 程序见 P125
例用简单选择法对10个数排序 排序过程: (1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数 交换—第一趟选择排序,结果最小的数被安置在第一个元素位置上 (2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录 将它与第二个数交换—第二趟选择排序 (3)重复上述过程,共经过n-1趟排序后,排序结束
排序过程: (1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数 交换—第一趟选择排序,结果最小的数被安置在第一个元素位置上 (2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录, 将它与第二个数交换—第二趟选择排序 (3)重复上述过程,共经过n-1趟排序后,排序结束 例 用简单选择法对10个数排序
例用简单选择法对10个数排序 kk k 例i=1初始:13386597764927 k k 2一趟:131276597764938 趟:1327[6597764938] 三趟:132738[97764965] 四趟:13273849[769765 五趟:1327384965[9776] 六趟:132738496576[97]
例 初始: [ 49 38 65 97 76 13 27 ] k j i=1 13 49 i=2 一趟: 13 [38 65 97 76 49 27 ] 27 38 二趟: 13 27 [65 97 76 49 38 ] 三趟: 13 27 38 [97 76 49 65 ] 四趟: 13 27 38 49 [76 97 65 ] 五趟: 13 27 38 49 65 [97 76 ] 六趟: 13 27 38 49 65 76 [97 ] k k k k j j j j j j j j j j 例 用简单选择法对10个数排序