版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第八章数 组1一数组概述一维数组的定义与引用一维数组的初始化6学时安排 参考计划二二维数组的定义与引用二维数组的初始化应用举例(一)三应用举例(二)2内容提要概述一维数组和二维数组的定义与使用常用算法:查找、排序等38.1 概述 数组:按序排列的同类数据元素的集合。数组是由若干 类型相同 的相关数据按 一定顺序存储 在一起形成的 一组数据 集合。 数组的用途保存大量同类型的相关数据例如:矩阵运算,表格数据等数组的特点快速地随机访问一旦定义,不能改变大小均由连续的存储单元组成,最低地址对应于数组的第一个 元素,最高地址对应于最后一个元素引用时可使用同一名字并利用下标进行区分数组可分为一维、二维
2、、多维数组 48.2.1 一维数组的定义和引用一维数组的定义定义方式为: 类型说明符 数组名常量表达式例如:int a10;说明: 常量表达式用中括号括起 下标从0开始,int a10 a0,a1,.a9 常量表达式必须是常量,不能是变量。 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 1 20 4 60 9 3 98 0 11 5058.2.1 一维数组的定义和引用 例如: int score100;/*数组*/ 数组的数据类型数组名:数组首址2000200220042006200820102012score0score1score2score3score4score5 sco
3、re=2000数组元素个数6一维数组元素的引用通过下标 ,每次可引用一个数组元素,但不能引用整个数组。一个数组元素就如同一个简单变量。a0=a5+a7-a2*3 常量和表达式做下标ai=ai+1; 变量做下标aa0=a1 数组元素做下标书上例8-1,说明了对一维数组的定义和引用的基本方法。8.2.1 一维数组的定义和引用7注意:1)对数组定义时所声明的类型实际上是指数组元素的取值类型;对于同一个数组,其所有元素的数据类型必须是相同的。2)数组名的命名应符合标识符的定义规则。3)数组名不能与其它变量名相同。4)数组定义时,方括号中的常量表达式说明了数组元素的个数,如a5表示数组a有5个元素。但是
4、其下标是从0开始编号的 。8.2.1 一维数组的定义和引用8注意:5)在定义时,不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。6)允许在同一个类型说明中,同时说明多个数组和多个变量。例如:int a,b,c,d,k110,k220;7)可以越界访问数组的元素,但这样做会导致不可预料的结果,甚至于造成系统的崩溃(执行写操作)。8.2.1 一维数组的定义和引用9一维数组的定义、赋值和引用。 【exp8-1】#include void main() int i,a10; for(i=0;i=0;i-) printf(%d ,ai); /依次倒序输出各个元素程序运行结果:9 8
5、 7 6 5 4 3 2 1 08.2.1 一维数组的定义和引用10 在实际的应用软件中,数组大小一般都用宏来定义,以适应未来可能的变化。#define SIZE 10 int aSIZE;8.2.1 一维数组的定义和引用118.2.2 一维数组的初始化 数组的初始化是指在定义数组时给数组初值。1. 在定义数组时赋初值;int a10=0,1,2,3,4,5,6,7,8,9;2. 部分赋值,未明确写出的均初始化为0;int a10=0,1,2,3,4;3. 赋值时不指定数组长度。int a=0,1,2,3,4; /*数组只有5个元素*/128.3.1 二维数组的定义与引用定义:类型说明符 常量
6、表达式常量表达式例如:float a34 a00 a03 a10 a13 a20 a23138.3.1 二维数组的定义与引用二维数组的定义 数组由若干 类型相同 的相关数据按 一定顺序存储 在一起形成的 一组数据 集合 例如: int score1005; 数组的数据类型数组名:数组首址行 访问数组元素:score00、score01、 score04 、score994 访问数组:score 系统在内存中分配连续100*5 个int数据类型的空间给数组。存放顺序:按行存放,先顺序存放第一行的元素,再存放第二行的元素 列148.3.1 二维数组的定义与引用引用程序中引用的是数组中一个元素,必须
7、用下标来指定。如:数组名下标下标float a44 a00 a01 a02 a03a10 a11 a12 a13 a20 a21 a22 a23a30 a31 a32 a33其中a23指的是第三行第四个元素。158.3.1 二维数组的定义与引用三维数组的定义与二维数组相同。如:float a234 234共有24个元素。 float a100100100有1000000个元素a010a000a999999168.3.1 二维数组的定义与引用在程序中为数组赋值的方法1. 用scanf语句由用户依次输入:for (i=1;i=3;i+) for (j=1;j=4;j+) scanf(“%d”,&a
8、ij);2. 由循环变量用循环赋值: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 for (i=0;i4;i+) (for j=0;j4;j+) aij = 4*i+j+1;178.3.1 二维数组的定义与引用二维数组程序举例将一个二维数组行和列元素互换,存到另一个数组中 1 4a= 1 2 3 b= 2 5 4 5 6 3 6分析:对数组a,列先于行变化,对于数组b,行先于列变化.for (i=0;i2;i+) for (j=0;j3;j+) bji=aijfor (i=0;i3;i+) for (j=0;j2;j+) bij=aji18数组定义后,其元素值
9、是随机数。在定义数组的同时,为其元素赋值,称为赋初值。int a5 = 12, 34, 56 ,78 ,9 ;int a22=1,2,3,4;int a22=0,2,1,3;int a5 = 0 ;int Arr23=0,1,2;int a = 11, 22, 33, 44, 55 ;int matrix4=1,2,3,4,1对多维数组,可以且只可以省略最高维长度说明切记切记!/*数组赋初值,整体赋值 */*数组赋初值,所有未显式 指定值元素赋值为”0” */*由计算机自动计算 数组大小 */8.3.2 二维数组的初始化19int matrix = 1,2,3,4,5,6,7,8,9,10,1
10、1,12;int matrix4=1,2,3,4,1;int matrix4 = 1,2,3,4,5,6,7,8,9;int matrix4 = 1,2,3,4,5,6,7,8,9,10;编译通不过3434348.3.2 二维数组的初始化20课堂练习1.以下对一维数组a的正确说明是: A) char a(10) ; B) int a10 ; C) int k=5,ak; D) char a =a,b,c;2.以下对二维数组a的正确说明是: A) char a105 ; B) int a23 ; C) int k=5,akk-2; D) char a43=“abc”,“bcd”,“cde”; E
11、) int a34 = 1,5,9;21将数组中的元素颠倒顺序排放1 2 3 4 5 6 7 8 9 10分析:1) a0 与a9交换, a1 交换 a8,依此类推。 错误的写法 a0=9;a9=a0; 2) 如何控制循环, 只需循环到一半 k=n/2; for (i=1,j=n;i=k;i+;j-) t=ai;ai=aj;aj=t 还可以写成 for (i=1,j=n;ij;i+,j-)8.4 应用举例22输入100个050的整数,统计每个数出现的次数【exp8_2】分析:1) 需要51个变量用于统计 int count51。2) 读一个字符,在相应的变量上加1countn+n=0 coun
12、t0+n=1 count1+ n=50 count50+0n0n1n50.000000000000011111111111111111111111150505050505050505050505050505050505050505050505050505050505050508.4 应用举例233) 如果用if 语句,需要判断多少次? if (n=0) count0+; if (n=1) count1+;4)用switch(n) case 0:count0+; case 1:count1+;. 5)采用数组:读入的数字就是累加变量的下标索引 countk+;6)需要循环多少次?100次?8.4
13、 应用举例24程序:#include stdio.hmain() int count51; int i,n; for (i=0; i=50; i+) counti=0; for (i=0; i=99; i+) scanf(%d,&n); countn+; for (i=0;i=50;i+) printf(%d,counti);8.4 应用举例25求Fibnacci数列1,1,2,3,5,8,13,21,.【exp8_3】 初值 f0=1,f1=1 循环体:fi=fi-2+fi-1 循环控制 (for i=2,i=20;i+) 完整程序:void main() int f20=1,1; for
14、(i=2;i=20;i+) fi=fi-2+fi-1; for (i=2;i=20;i+) if (i%5=0) printf(n); printf(%12d,fi); 8.4 应用举例26选择排序算法 【exp8_4】第1次, 将最小数0和第一位的3交换第2次,将次小数1和第2位的6交换发现的规律:for(i=0;iN-1;i+) 将当前i元素的位置记入min; for(j=i+1;jN;j+) 如果j元素的值更小,记录到min如果min和i不同,则交换两元素 8.4 应用举例3 6 2 5 8 1 0 4 7 90 6 2 5 8 1 3 4 7 90 1 2 5 8 6 3 4 7 90
15、 1 2 5 8 6 3 4 7 90 1 2 3 8 6 5 4 7 90 1 2 3 4 6 5 8 7 90 1 2 3 4 5 6 8 7 90 1 2 3 4 5 6 8 7 90 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 927#include #define N 10void main() int i,t,j,min,dataN=3,6,2,5,8,1,0,4,7,9; / 定义i,j for(i=0;iN-1;i+) / 有N个数,则需要查找从0N-2位置的数,最后一 个N-1为仅仅剩下的一个,就不需要排序了 min=i; /认为当前i为最小的数的位
16、置 for(j=i+1;jN;j+) /从第i个直至数组最后一个数 if(datajdatamin) min=j; /记录比当前min小的数的位置 8.4 应用举例28 if(min!=i) /将找到的最小数datamin放到它对应的位置去,如果假设为真,即min就是i,则不用交换 t=datai; datai= data min; datamin=t;/交换数据 /对于当前位置i的数排序完毕,还剩下i+1N-1下标的数 for(i=0;iN;i+) printf(%d ,datai); /输出8.4 应用举例29在数组中查找数据【exp8_5】情况1:在无序数组中查找给定值首次出现的位置 如
17、:10 1 20 39 9 4 12 43 33 4 19(找4的位置)从第0个元素到最后一个元素一次与被找元素比较,相等则停止查找。循环结束条件: (已经找到)|所有的数组都已经找遍8.4 应用举例30void main() int a10,i,num; for (i=0;i10;i+) scanf(“%d”,&ai); printf(“输入被查找的数n”); scanf(“%d”,&num); for (i=0;i10;i+) if (ai=num) break; if (i=9) printf ( “被查找的数是第%d个数n,i+1); else printf(“没找到!n”);8.4
18、应用举例318.4 应用举例考虑另外一种情况,在有序数组中插入一个数。首先需要确定该元素的位置。1 3 5 7 9 116i从第0个元素开始比较,当6小于或等于某个数时停止,该数的位置即为所求。 i = 0; while (i =num) break; else i+; 如果没找到,i的值为10328.4 应用举例数组右移一位 从最后一个元素右移for (i=6;i=1;i-) ai+1=ai;不能写成a1=a0;a2=a1;1 2 3 4 5 6 71 1 2 3 4 5 6 733如果需要将给定的某个数插入到有序的数组中,可以使用如下的五个步骤:建立数组排序找出被插入值所在的位置从该位置起到最后的所有元素右移一位将待插入数值放入上一步空出的位置参考【exp8_6】8.4 应用举例348.4 应用举例#include stdio.hvoid main() int a21; int i,p,k,num,found; char c; printf(“输入20个整数n); for (i=0;i20;i+) scanf(“%d”,&a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地理(黑吉辽蒙卷01)(解析版)-2026年高考考前预测卷
- 化学02(浙江卷)(考试版及全解全析)-2026年高考考前预测卷
- 病历书写质量检查细则
- 宿舍区消防器材巡检执行制度
- 精细装配工序机加排产计划制度
- 热处理车间炉体故障响应预案
- 施工招标评标专家沟通制度
- 寄养区域安全规定材质验收标准
- 金融风控链路故障复盘质量报告
- 包装车间多班次产量跟进计划
- 云财务知识培训课件
- 2025年电力工程师高级职称评审要点与面试题库及答案
- 2025年空军军队文职技能岗考试文化活动复习题及答案
- 电力市场交易管理办法
- 【《人脸识别技术中个人信息保护的法律规制探析》10000字】
- 政府绩效管理(第二版)课件 方振邦 第1-4章 政府绩效管理概述-政府绩效监控
- 2026年高考数学一轮复习策略《指向深度学习的高中数学教学策略》讲座
- 生物质颗粒采购合同范本
- 青海教师退休管理办法
- 码头防风防汛管理制度
- 2025年安徽省高考化学试卷真题(含答案详解)
评论
0/150
提交评论