




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章 数组,引 入,上一页,下一页,暂 停,重 放,系统,返 回,休息,一、数组的概念,数组是指一组同类型数据组成的序列。数组中的每个数据称为一个元素,用一个统一的名字来标识,用下标指示数组中的各个元素。,二、数组的维数,一维:只含有一个下标的数组称为一维数组 a9,二维:含有两个下标的数组称为二维数组 b34,多维:含有多个下标的数组称为多维数组 c2354,上一页,下一页,暂 停,重 放,系统,返 回,休息,第一节 一维数组,一、定义,格式: 类型标识符 数组名常量表达式;,(1) 用 , 不能用 ( ),(2) 下标只能用常量,(3) 下标必须是大于零的整数,(4) 下标最大元素个数是65535,指明数组中各 元素的数据类型,指明数组 包含的元素个数,举例:int ab10 ;,说明:,练习,上一页,下一页,暂 停,重 放,系统,返 回,休息,二、数组元素的初始化,在定义数组时对各元素指定初始值,称为数组的初始化,例:int ab5=1,3,5,7,9 ;,内存中存储格式为:,例:char c10 = c, ,l,a,n,g,u,a,g,e,内存中存储格式为:,ab0 ab1 ab2 ab3 ab4,c0 c1 c2 c3 c4 c5 c6 c7 c8 c9,ab,c,上一页,下一页,暂 停,重 放,系统,返 回,休息,其实数组在内存中存储时,占用的是一片连续的单元,例:short ab5=1,3,5,7,9 ;,double cd3=1.35, 2.18,5.00;,1,3,5,7,9,2.18,5.00,ab,cd,ab0,ab1,ab2,ab3,ab4,cd0,cd1,cd2,1.35,该数组在内存中的分配情况为:,系统使用数组元素时,先找到该数组的起始位置,然后根据数组的类型和下标计算出该元素的地址,再进行操作。,地址计算公式为:,元素地址 = 数组起始位置 + 下标 一个元素所占字节,该数组在内存中的分配情况为:,例: ab2=12 ;,12,练一练,上一页,下一页,暂 停,重 放,系统,返 回,休息,说明:,1. 下标是从 0 开始的,2. 初始化数据用 括起,各数据间用 “ ,” 分隔,3. 数据个数可以少于数组的元素个数,但不能大于元素个数。,int a5= 1,3,5 ;,int a5= 1,2,3,4,5,6,7 ;,4. 当给所有元素赋值时,可以省略数组元素个数,系统根据数据个数确定数组元素的个数。,float b3=1.0,2.0,3.5;,float b =1.0,2.0,3.5;,float b =1.0,2.0,3.5;,float b8=1.0,2.0,3.5;,上一页,下一页,暂 停,重 放,系统,返 回,休息,三、数组元素的引用,引用格式: 数组名下标,(1) 定义与引用的区别,int a9; a9=10 ;,(2) 数组元素的赋值只有在初始化时才能整体赋值,以后只能通过逐个赋值的方法进行。,例: int b3=1,0,5 ;,例: a2 = 3 ;,说明:,a0=a4+a2;,int b3 ; b = 1,0,5 ;,上一页,下一页,暂 停,重 放,系统,返 回,休息,上一页,下一页,暂 停,重 放,系统,返 回,休息,二、数组首地址引用方法,第二节 一维数组和指针,例: *(a+2)= 3 ; scanf(“%d”, a+i); printf(“%d”,*(a+i);,例:int a5=1,3,5,7,9 ;,内存中存储格式为:,a0 a1 a2 a3 a4,地址,a+1,a+2,a+3,a+4,a,一、一维数组和数组元素的地址,引用格式: 数组名+i,上一页,下一页,暂 停,重 放,系统,返 回,休息,例: *(p+2)= 3 ; for (I=0;I=4;I+) scanf(“%d”, p+); p=a; for (I=0;I=4;I+) printf(“%d”, *p+);,例:int a5=1,3,5,7,9 , *p=a;,内存中存储格式为:,a0 a1 a2 a3 a4,p+1,p+2,p+3,p+4,p,三、利用指针引用一维数组元素,引用格式: 指针名+i,上一页,下一页,暂 停,重 放,系统,返 回,休息,例:p2=5 ; for (i=0;i=4;i+) scanf(“%d”, ,当指针指向一维数组以后,就可以像使用数组一样使用指针,内存中存储格式为:,a0 a1 a2 a3 a4,P1,P2,P3,P4,P0,四、用带下标的指针引用一维数组元素,引用格式: 指针名I,例: p=,上一页,下一页,暂 停,重 放,系统,返 回,休息,格式: max(a); 数组名做实参 max(p); 指针做实参,一、数组元素做实参(传值调用),例: int mix(int a,int b); if ab return a; else return b; ,第三节 指针和数组做为函数参数,二、数组名和指针做实参(传址调用),三、数组和指针做形参 格式1: 函数类型 函数名(参数类型 指针) 例: int max(int *p); 格式2: 函数类型 函数名( 参数类型 数组 ) 例: int max( int a ); 或 int max( int aM );,第四节 数组元素的引用举例,输出下列矩阵,上一页,下一页,暂 停,重 放,系统,返 回,休息,#include “stdio.h” main() int i; int a20; for (i=0;i20;i+) ai=i+1; for (i=0;i20;i+) if (i%5=0) printf(“n”); printf(“%8d”,ai); ,2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18 19 20,printf( “%8d”,*(a+i) );,*(a+i)=i+1;,输入十个数,计算其平均值,float aver( float a ,int n) int i; float sum=0, average; for (i=0;i=n-1;i+) sum=sum+ai; average=sum/n; return average; ,上一页,下一页,暂 停,重 放,系统,返 回,休息,main() int i; float sum=0, a10, av; for (i=0;i10;i+) scanf(“%f”, ,第五节 二维数组,一、引言,假设某班级学生的成绩如下:,上一页,下一页,暂 停,重 放,系统,返 回,休息,二、定义,格式: 类型 数组名常量表达式1常量表达式2,举例: int b34 ;,说明:,1. 二维数组的排列顺序是按行排列的,2. 二维数组所有元素个数不能大于65535,int b200400 ;,3. 两个下标的取值都必须是大于0的正整数,上一页,下一页,暂 停,重 放,系统,返 回,休息,三、初始化,同一维数组一样,二维数组也可以在定义的时候赋值,int b34= 1,2,3,4, 5,6,7,8, 9,10,11,12 ;,说明:,1. 初始化可以采用分行的方法完成,2. 也可以直接按各个元素在数据中的排列顺序直接列出,int b34=1,2,3,4,5,6,7,8,9,10,11,12 ;,这种方式直观,清晰,是最常见的一种方式,这种方式分不清行列间的关系,而且数据较多时很容易出错,上一页,下一页,暂 停,重 放,系统,返 回,休息,3. 给所有元素赋值时或采用分行方式赋值时,下标1可省略,例:int a3=1,2,3,6,5,4;,a00 a01 a02 a10 a11 a12,int a23=1,2,1;,int b3 =1,2,3,4,5,6,7,8,9,10,11,12 ;,int a23=1,2,3,6,5,4;,int a3=1,2,1,a00 a01 a02 a10 a11 a12,4. 任何时候下标2不能省略,因为系统无法判断元素个数,a00 a01 a02 a10 a11 a12,上一页,下一页,暂 停,重 放,系统,返 回,休息,四、二维数组的引用,与一维数组的引用类似,二维数组的引用也是通过数组名和两个下标进行的,例: 编写输入各位同学成绩的程序段(假设有40位同学),main() int i , j ; float cj416; for (i=1;i=40;i+) for (j=1;j=5; j+) printf(“请输入第%d位同学第d门成绩”),i , j ); scanf(“%f”,cjij ); ,上一页,下一页,暂 停,重 放,系统,返 回,休息,第六节 二维数组和指针,对于一维数组: (1)数组名array表示数组的首地址, 即array0的地址; (2)数组名array是地址常量 (3)array+i是元素arrayi的地址 (4)arrayi *(array+i),二维数组的地址,int a3 ;,基类型,行指针与列指针,4,int a34;,二维数组元素表示形式: (1)a12 (2)*(a1+2) (3)*(*(a+1)+2) (4)*(&a00+1*4+2),地址表示: (1) a+1 (2) &a10 (3) a1 (4) *(a+1) (5)(int *) (a+1),地址表示: (1) &a12 (2) a1+2 (3) *(a+1)+2 (4)&a00+1*4+2,main() int a34= 1,2,3,4, 3,4,5,6, 5,6,7,8 ; int i; int (*p)4=a; for(i=0;i3;i+) for (j=0;j4;j+) printf(“%d“, *(*(p+i)+j); ,指向一维数组的指针变量 定义形式: 数据类型 (*指针名)一维数组维数; 例 int (*p)4;,指向指针的指针,i,4,p2,&i,p1,&p2,定义方法: 类型标识符 *指针变量名 结合方向:自右自左 *p 相当于 *(*p),例:int *p1; int *p2; int i=3; p2=,定义一个指向指针变量的变量 p1,定义一个指针变量p2,定义一个整型变量i,将变量i的地址传给p2,即使p2指向变量i,将指针变量p2的地址传给p1,即使p1指向p2,一个指针可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抖音直播带货用户画像数据授权及合作协议
- 环保型工业废水处理药剂储存与租赁长期协议
- 全球艺术品拍卖业务委托合同
- 轻轨车站售票柜台柜体维护与管理协议
- 学术会议主题论坛策划执行与专家邀请合同
- 农业气象信息采集器租赁与气象灾害风险评估与预警服务协议
- 中药配方颗粒原料生产专利授权合同
- 宠物美容连锁店品牌加盟与区域保护合同
- 宗教信仰自由子女成长与父母关爱协议
- 高质量职业资格考试培训讲师全面聘用协议
- 大学生职业生涯规划与就业指导第2版(高职)全套教学课件
- 中国儿童阻塞性睡眠呼吸暂停诊断与治疗指南护理课件
- 江西康莱特新森医药原料有限公司年产100 吨注射用薏苡仁油生产项目环境影响报告
- 医学影像数据库建设与应用研究
- 胎儿宫内窘迫的护理查房课件
- 海南跨境电商行业前景分析报告
- 妇科科室全面质量与安全管理手册
- 2023年湖北宜昌市住建局所属事业单位人才引进笔试参考题库(共500题)答案详解版
- 农产品集中交易市场等级技术规范
- 第12课-拓印的魅力(课件)
- 钢箱梁制造运输及安装合同
评论
0/150
提交评论