资源描述:
《chap2_用C语言编写程序13ZhejiangUniversity.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、专题研讨课二:数组在解决复杂问题中的作用1PartI要点提示2一维数组定义:每个元素的类型数组的大小,整型常量表达式类型名数组名[数组长度]数组变量的名称,合法的标识符inta[5],b[10];floatx[7];doubley[20];为什么数组长度不能是变量?intN=10;inta[N];3一维数组初始化:类型名数组名[数组长度]={初值表};inta[10]={0,1,2,3,4,5,6,7,8,9};inta[]={0,1,2,3,4,5,6,7,9,9};部分初始化:inta[10]={0,1,2,3,4};没有初始化
2、的元素值是什么?4一维数组引用:数组名[下标];例如:inta[10],i;那么:a[i]引用数组a的第i个元素a[i]=1;整型表达式数组变量的名称a[0]是起始元素a[9]是末尾元素不能对整个数组赋值:a=1;5一维数组存储方式:连续存放于内存(RAM)数组名代表其首元素的地址12345678⁞⁞09a内存inta[10];元素a[i]的地址记为:a+ia[i]的实际地址是什么?6一维数组存储方式:连续存放于内存(RAM)数组名代表其首元素的地址12345678⁞⁞09a内存对于长度为N的数组,末尾元素为a[N-1]对于<0或者
3、>N-1的k,a[k]是哪个元素?修改a[k]有何后果?7可执行程序指令:运算指令、控制指令数据:常量、变量由编译器根据源程序编译链接生成处理数据时,必须要知道其大小简单变量类型数据变量类型和长度自定义结构先定义8数组越界数组a长度N⁞⁞内存对于<0的k:改变a[k]可能导致数组前面的数据/代码异常对于>=N的k:改变a[k]可能导致数组后面的数据/代码异常9试图修改系统相关的数据和代码将会被阻止执行二维数组定义:每个元素的类型数组的大小,整型常量表达式类型名数组名[行长][列长]数组变量的名称,合法的标识符inta[2][4
4、];floatx[5][10];doubley[1][1];10二维数组初始化:inta[3][2]={{1,2},{3,4},{5,6}};部分初始化:inta[3][2]={{1},{3,4}};初始化了两行第一行只初始化部分元素intb[3][2]={,{1,,3}};那些被初始化了?11二维数组存储方式:逐行连续存放于RAM中二维数组的元素在内存中按行方式存放a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]第0行a[0]第1行a[1]第2行a[2]inta[3][2];3行2列,6个元素表
5、示1个3行2列的矩阵a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]12数组应用大量数据文字信息、数据统计、图像视频…相同类型所有元素具有相同的类型/结构循环遍历处理方式相同一般利用循环语句进行处理——存储数据13数组应用数值计算向量运算矩阵运算多元方程算法设计制作查找表简化程序结构14数组使用设计函数处理数组数组作为函数参数voidReverseIntArray(intarray[],intn){inti,k,tmp;for(i=0,k=n-1;i6、;array[i]=array[k];array[k]=tmp;}}1512345....10001002100410061008101010121014149414961498a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[247]a[248]a[249]array[0]array[1]array[2]array[3]array[4]array[5]array[6]array[7]array[247]array[248]array[249]假设a数组的首地址为1000,当执行ReverseIntArray(a,
7、5)形参数组array(的地址值)等于实参数组a(的地址值),于是它们指向同一块内存。因此,对array的操作等价于对a的操作。a1000array100016PartII应用举例171:数组排序35281输入n个数,将它们从小到大排序后输出。选择法排序:选择最小的元素,交换到前列35281(1)15283(2)12583(3)12385(4)1235818一般地,(1)a[0]~a[n-1]中找最小数,与a[0]交换(n个数中最小的)(2)a[1]~a[n-1]中找最小数,与a[1]交换(n-1个数中最小的)(k)……(第k轮)(
8、n-k个数中最小的)(n-1)a[n-2],a[n-1]中最小数,与a[n-2]交换(2个数中最小的)19voidSortArray(intarray[],intn){intk,iMin;for(k=0;k