高级语言程序设计:chap06_数组_第1页
高级语言程序设计:chap06_数组_第2页
高级语言程序设计:chap06_数组_第3页
高级语言程序设计:chap06_数组_第4页
高级语言程序设计:chap06_数组_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高级语言程序设计,南京邮电大学计算机学院 计算机软件教学中心,2014.07.14,高级语言程序设计,第06章 数组,内容提要,数组及其定义 一维数组 二维数组 向函数传递数组 数组常用算法 查询 插入 删除 排序,3,数组的作用,问题: 输入3个学生的c语言成绩,计算平均分,4,学生人数变成50?100,2020/12/24,5,数组,数组用于保存大量同类型的相关数据 数组是具有一定顺序关系的若干相同类型变量的集合体。 组成数组的变量称为该数组的元素,2020/12/24,6,定义格式: 数据类型 数组名常量表达式 例: int score5; 定义一个有5个元素的数组 规定下标从0开始,可

2、使用score0、score1、score2 、score3、score4访问每个元素 每个元素都是类型为int的变量,像使用普通int型变量一样使用 定义后,数组长度不能改变,可以用宏常量,整型,表示数组的元素个数,一维数组的定义,2020/12/24,7,数组元素在内存中顺次存放,它们的地址是连续的。 例 int a6; 系统会在内存分配连续的6个int空间给此数组,a,a5,a1,a0,一维数组的存储,一维数组的初始化:在定义数组时为其全部或部分元素指定初值。 正确的初始化示例: int a5=1,2,3,4,5; int a =1,2,3,4,5; int a5=1,2*4; int

3、a5=0; 错误的初始化示例: int a5=,2,3 ; int a5=1,2,3,4,5,6,7,一维数组的初始化,相当于a5=1,2,3,4,5;数组长度省略,相当于a5=1,8,0,0,0;部分赋值注意!当不做初始化时所有数组元素的值均为随机数而不是0,对数组元素初始化时只能从左到右依次,只能缺省最右边的元素值,初值个数不能超过数组元素的个数,一维数组的访问,例6.1:利用循环实现对数组元素的访问 scanf(%d,9,应用举例-求和,例6.2: 输入50个学生的成绩,并计算平均值。 编程分析: 数据类型 算法,10,应用举例-数列,11,例6.3:Fibonacci数列,算法分析:

4、问要几个月后兔子的数目超过1000对?While语句,2020/12/24,12,使用二维数组的场合,数学 英语 物理 1 97 87 92 2 92 91 95 3 90 81 82 double score33,行,列,2020/12/24,13,定义格式: 类型标识符 数组名整型常量表达式1 整型常量表达式2,例 int a23,a,a00 a01 a02,a10 a11 a12,数组所占的字节数 =第一维长度*第二维长度 *sizeof(数据类型,二维数组的定义,2020/12/24,14,二维数组的存储,int a23,a10,a11,a12,a00,a01,a02,原则:行优先 先

5、顺序存放第0行的元素,再存放第1行的元素,a,2020/12/24,15,二维数组的初始化,原则:按行从左到右依次赋值 逐行初始化: int a43=1,2,3,4,5,6,7,8,9,10,11,12; 不分行,用类似一维数组的方式初始化: int a43=1,2,3,4,5,6,7,8,9,10,11,12; 全部赋值时,行数可以缺省,列数不能省 : int a 3=1,2,3,4,5,6,7,8,9,10,11,12; 部分赋值 int a43=1,2,4,5,7,8,9,10,11,12; int a34=1,0,6,0,0,11; 最简单的初始化: int a43=0,2020/12

6、/24,16,二维数组的访问,例6.4 矩阵转置运算 二维数组元素的访问需用两层循环 例:int a34,n=1; for(int i=0;i4;i+) for(int j=0;j3;j+) aij=n+; 数据类型:由于矩阵行、列不同,定义两个二维数组分别存放转置前、后的矩阵 算法提示:只需要在控制循环时先控制列下标再控制行下标就能实现矩阵的转置,数组与函数:一维数组,例6.5:用函数完成最大值、最小值的求解 数据类型:一维数组存储待比较的数据 算法: 最值的求解 函数之间批量数据的共享 int main() int arrayN,n; int max; . max=maxnum(array

7、,n);,17,int maxnum(int a,int n) int i,max; max=a0 ; for (i=1;imax) max=ai; return max;,数组与函数:二维数组,例6.6 用函数的形式输出二维数组各个元素的值。 void print(int aCOL,int r); int main() int array_aROW COL =1,2,0,9,10,11; print(array_a,ROW); return 0;,18,数组常用算法:查找,例6.7 在a数组中查找x,如果存在输出它的下标,否则提示:“Not present!”。 算法: 顺序查找法,对数组排

8、列无要求. 查找的过程:从第一个元素开始依次与待查找的元素进行比较,如果相等就查找成功,输出元素及对应下标;如果与所有元素都比较结束仍没有相等元素,则输出元素不存在的提示信息 数据结构: 数组a、变量x用于存储要查找的数据 循环控制变量i,循环结束条件:i=n或者x=ai,19,数组常用算法:插入,例6.8 将x插入数组a中保持数组非递减有序 算法:有序数组中插入一个数据元素,并保持数组有序。 (1)确定待插入位置循环 (2)元素后移,腾出相应位置-后移方法 (3)在“空”位置上插入新元素 数据结构: 数组a、变量x用于输入要插入的数据 循环控制变量i,两次循环,查找位置以及移动,20,数组常

9、用算法:删除,例6.9 从整型数组a中删除第一个等于x的元素,如果x不是数组中的元素,则显示:“can not delete x!”。 算法:数组空间中的数据只能修改,不能“擦除”。 确定待删除元素的位置 元素从删除位置开始依次前移,覆盖待删除元素 有效元素个数减一。 注意:数组的最后一个元素实际上有两份拷贝 数据结构: 数组a、变量x用于输入要删除的数据 循环控制变量i,两次循环,查找位置以及移动,21,数组常用算法:排序,例6.10 从键盘上输入n(1n10)个整数,用冒泡法将元素按从小到大的顺序排序,然后输出排序后元素。 冒泡排序的算法思想:在排序过程中对元素进行两两比较,越小的元素会经由交换慢慢“浮”到数组的前面(低下标处),像气泡一样慢慢浮起,由此得名,22,冒泡排序算法,假设对长度为n的数组进行冒泡排序,算法可以描述如下: 第1趟冒泡:从数组n-1下标的元素到0下标元素遍历,比较相邻元素对,如果后一个元素小于前一个元素,则交换。第一趟结束时,最小元素“

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论