版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数组一维、二维数组,1,课前预习 将手机调到静音 认真做笔记 及时完成作业,上课要求,2,了解数组的概念 掌握定义和引用一维数组的方法 掌握定义和引用二维数组的方法,学习目标,3,数组 定义和引用一维数组 定义和引用一维数组,学习内容,4,6.1 数组的概念,前几章使用的变量都属于基本类型,例如整型int、字符型char、浮点型(float、double)数据,这些都是简单的数据类型。 对于有些数据,只用简单的数据类型是不够的,难以反映出数据的特点,也难以有效地进行处理。,5,30名学生成绩,需要用30个变量 100名学生成绩,需要用多少个变量? 用s1,s2,s3,s30表示成绩,能否体现内
2、在联系? C语言用方括号中的数字表示下标,如用s15表示,s为数组名,15为数组中元素的个数。,一组具有同一属性的数据,6,数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号,如s5。 用一个数组名和下标唯一确定数组中的元素。 数组中的每一个元素都属于同一个数据类型。 用循环对数组中的元素进行操作,可以有效地处理大批量的数据,大大提高效率。,7,6.2.1 定义一维数组 6.2.2 引用一维数组的元素 6.2.3 一维数组的初始化 6.2.4 一维数组程序举例,6.2 定义和引用一维数组,8,6.2.1 定义一维数组,一维数组是最简单的数组。 数组元素只有1
3、个下标一维数组,s5,相当于“线”。 数组元素有2个下标二维数组,s12,相当于“面”。 数组元素有3个下标三维数组,s243,相当于“体”。 一维及多维数组的概念和用法是类似的。,9,6.2.1 定义一维数组,定义数组的方法与定义变量的方法类似。 int a;int a5; 不同的是数组一次定义一批有关联的变量; 在定义数组时需要指定这批变量的类型、数组名称,数组中包含变量的个数。 如 int a10;,10,6.2.1 定义一维数组,定义一维数组的方式为: 类型符 数组名常量表达式; 数组名的命名规则和变量名相同,符合标识符的命名规则。 常量表达式给出元素的个数。 下标从0开始,如 int
4、 a10; a0,a1,a2,a9 注意没有a10这个元素。,11,常量表达式中可以包括常量和符号常量,不能包含变量,即数组的大小不依赖于程序运行过程中变量的值。 int n; scanf(“%d”,12,6.2.2 引用一维数组的元素,必须先定义数组,才能引用数组中的元素 t=a3,将a数组中序号为3的元素的值赋给变量t。 只能逐个引用数组元素而不能一次引用整个数组中的全部元素。 b=a2;c=a5; printf(“%d,%d,%d,%d,%d,%dn”,a);,13,6.2.2 引用一维数组的元素,引用数组元素的表示形式为: 数组名下标 a0=a5+a2+1-a2*3 a7/3,a19%
5、3 int n=5,a10; an=20;,14,注意定义数组与引用数组元素的区别: 形式上:int a10;定义数组长度为10; t=a6;引用a数组中序号为6的元素; 简单的判别方法:如果在数组名常量前有类型名(char,int,float,double等),则为定义数组。如果没有类型名,则为引用数组元素。,15,例6.1 引用数组元素。利用循环给数组元素a0a9赋值为09,然后按逆序输出各元素的值。 解题思路: 先用循环给数组元素a0 a9赋值09,这样,每个数组元素都有固定的值了,然后按a9到a0的顺序输出各元素的值。,16,#include void main() int i,a10
6、; for(i=0;i=0; i-) printf(%d ,ai); printf(n); ,使a0a9的值为09,a0a1a2a3a4a5a6a7a8a9,先输出a9,最后输出a0,17,6.2.3 一维数组的初始化,对数组元素的赋值既可以通过赋值语句来实现,也可以在定义数组时同时给予初值,这就称为数组的初始化。 (1) 定义数组时对全部数组元素赋初值 int a10=0,1,2,3,4,5,6,7,8,9; a0=0,a1=1,a2=2;a3=3;a4=4;a5=5,a6=6, a7=7,a8=8,a9=9。,18,(2) 可以只给一部分元素赋值,未被赋值的根据数组类型自动赋值。 int
7、a10=0,1,2,3,4; int a10=0,1,2,3,4,0,0,0,0,0;,19,(3)在对全部数组元素赋初值时,如果数据个数确定,则可以在定义数组时不指定数组长度,系统根据数据的数量确定数组的长度。 int a5=1,2,3,4,5; 可写为 int a =1,2,3,4,5; 注意:如果数组的长度与定义初值的个数不相同,则数组长度不能省略。 如果数组a的长度为10,使用int a =1,2,3,4,5;数组只赋了5个初值,系统认为数组长度为5。 应该写为a10 =1,2,3,4,5;,20,6.2.4 一维数组程序举例,例6.2 用数组来处理求Fibonacci数列问题。Fib
8、onacci数列问题的含义见例P138(兔子生小兔子)。,21,解题思路: 建立一个数组,将数列中第1个数放在数组第1个元素中,数列第2个数放在数组第2个元素中, 数组序号为i的元素的值是其前两个元素值之和。即: fi= fi-2+fi-1 用循环来求出数组各元素之和,费波那西(Fibonacci)数列,22,#include void main() int i; int f20=1,1; /f0和f1的值1,1 for(i=2;i20;i+) fi=fi-2+fi-1; /求f2和f19的值 for(i=0;i20;i+) if(i%5=0) printf(n); /每行输出5个 print
9、f(%12d,fi); printf(n); ,23,例5.8程序在顺序求出并输出各个数后,不能保存这些数据,如果要单独输出第10个数,是比较困难的。 本例用数组处理时,把每个数据都保存在各数组元素中,如果要单独输出第10个数,是很容易的,直接输出f9即可。,24,例6.3 假如有n个人,各人年龄不同,希望按年龄将他们从小到大排列。 解题思路: 排序的规律有两种:一种是“升序”,从小到大;另一种是“降序”,从大到小 把题目抽象为:“对n个数按升序排序” 采用起泡法排序:先将第1个数和第2个数比较,如果第2个数比第1个数小,将两数交换,交换后大的放到第2个位置,将第2个数和第3个数比较,如果第2
10、个数比第三个数小,将两数交换,交换后大的放到第3个位置,。执行一次循环后,最大的书被沉到最后面。,25,9 8 5 4 2 0,8 9 5 4 2 0,8 5 9 4 2 0,8 5 4 9 2 0,8 5 4 2 9 0,8 5 4 2 0 9,大数沉淀,小数起泡,a0 a1 a2 a3 a4 a5,for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; ,26,8 5 4 2 0 9,5 8 4 2 0 9,5 4 8 2 0 9,5 4 2 8 0 9,5 4 2 0 8 9,a0 a1 a2 a3 a4 a5,for(i=0;iai+1) t=ai;ai=ai+1;ai
11、+1=t; ,27,5 4 2 0 8 9,4 5 2 0 8 9,4 2 5 0 8 9,4 2 0 5 8 9,a0 a1 a2 a3 a4 a5,for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; ,28,4 2 0 5 8 9,2 4 0 5 8 9,2 0 4 5 8 9,a0 a1 a2 a3 a4 a5,for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; ,29,2 0 4 5 8 9,0 2 4 5 8 9,a0 a1 a2 a3 a4 a5,for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; ,30,for(i=0;
12、iai+1) ,for(i=0;iai+1) ,for(i=0;iai+1) ,for(i=0;iai+1) ,for(j=0;j5;j+),31,#include void main() int a10; int i,j,t; printf(input 10 numbers :n); for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; printf(the sorted numbers :n); for(i=0;i10;i+) printf(%d ,ai); printf(n); ,32,6.3 二维数组的定义和引用,6.3.1 定义二维数组 6.3.2 引用二维数组的元
13、素 6.3.3 二维数组的初始化 6.3.4 二维数组程序举例,33,6.3.1 定义二维数组,二维数组定义的一般形式为 类型符 数组名常量表达式常量表达式; float a34,b510; 定义a为34(3行4列)的数组 b为510(5行10列)的数组 注意不能写为float a3,4,b5,10;,34,6.3.1 定义二维数组,二维数组在内存中的存储顺序:按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素,见图6.6,P156-P157。,35,6.3.2 引用二维数组的元素,二维数组元素的表示形式为: 数组名下标下标 b12=a23/2 合法 c3/25%5,d2+26-3
14、 合法 int a34; a34=3; 不合法,36,6.3.3 二维数组的初始化,int a34=1,2,3,4,5,6,7,8,9,10,11,12;等价于 int a34=1,2,3,4,5,6,7,8,9,10,11,12;/按行存放 int a34=1,5,9;等价于 int a34=1,0,0,0,5,0,0,0,9,0,0,0; int a34=1,5,6;等价于 int a34=1,5,6,0;等价于 int a34=1,0,0,0,5,6,0,0,0,0,0,0;,37,6.3.3 二维数组的初始化,int a34=1,2,3,4,5,6,7,8,9,10,11,12;等价于
15、 int a 4=1,2,3,4,5,6,7,8,9,10,11,12; int a4=0,0,3, ,0,10;等价于 int a4=0,0,3,0,0,0,0,0 ,0,10,0,0;,38,6.3.4 二维数组程序举例,例6.4 将一个二维数组a的行和列的元素互换,存到另一个二维数组b中。,39,编程思路: 将a数组中第i行j列元素赋给b数组中j行i列元素 例如 a00 赋给 b00 a01 赋给 b10 a02 赋给 b20, 可以用双层循环来处理,用外循环控制行的变化,内循环控制列的变化,40,#include void main() int a23=1,2,3,4,5,6; int
16、 b32,i,j; printf(array a:n); for (i=0;i2;i+) /i控制行数的变化 for (j=0;j3;j+) /j控制列数的变化 printf(%5d,aij); /输出a的各元素 bji=aij; /a元素值赋给b相应元素 printf(n); ,41,printf(array b:n); for (i=0;i3;i+) for(j=0;j2;j+) printf(%5d,bij);/输出b的各元素,行列互换 printf(n); ,42,例6.5 一个班有5个学生,己知每个学生有5门课的成绩,要求输出平均成绩最高的学生的成绩以及该学生的序号。 解题思路: 用二维数组,行代表学生,列代表一门课的成绩及平均成绩。 要存放5个学生5门课的成绩和平均成绩,数组的大小应该是56。,43,#include void main() int i,j,max_i; float sum,max=0; float s56=78,82,93,74,65, 91,82,72,76,67, 100,90,85,72,98, 67,89,90,65,78, 77,88,99,45
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南省南阳市邓州市重点名校2025-2026学年初三第三次模拟考试英语试题含解析
- 邵东县2025-2026学年初三第五次中考模拟考试语文试题含解析
- 岳阳市湘阴县重点名校2025-2026学年初三下学期期末教学质量检测试题(Ⅰ)数学试题含解析
- 浙江省宁波市名校2026届初三暑假末结业考试物理试题含解析
- 江苏省东台市第四联盟市级名校2025-2026学年初三英语试题期末练习试卷含解析
- 重庆市七中学2025-2026学年初三下期第二次模拟考试英语试题文试题含解析
- (正式版)DB37∕T 3039-2017 《化妆品中溴硝丙二醇的测定 高效液相色谱法》
- 压疮护理中的护理实践与经验
- 2026年旅游管理专业导游证考取与带团技巧
- 2026年基站建设项目施工计划书
- 2026中交集团纪委第一办案中心社会招聘笔试历年常考点试题专练附带答案详解
- 2026年春季新教材教科版(2024)三年级下册科学全册教案
- 紫外线灯使用及安全指导
- GB/T 8554-2026电子和通信设备用变压器和电感器测试方法和试验程序
- 工业厂房改造项目风险评估报告
- 离婚后共同财产分割协议
- (2026年春季新版本)人教版二年级数学下册全册教案
- 《制药卫生》课件
- (完整版)杭州钱江新城中心区城市设计控规部分
- 中医治疗颈椎病课件完整版
- 器质性精神障碍的护理
评论
0/150
提交评论