




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、u课前预习课前预习u将手机调到静音将手机调到静音u认真做笔记认真做笔记u及时完成及时完成作业作业上课要求上课要求u了解数组的概念u掌握定义和引用一维数组的方法u掌握定义和引用二维数组的方法学习学习目标目标u数组u定义和引用一维数组u定义和引用一维数组学习内容学习内容6.1 数组的概念 前几章前几章使用的变量都属于基本类型,例如使用的变量都属于基本类型,例如整型整型intint、字符型字符型charchar、浮点浮点型型(floatfloat、doubledouble)数据数据,这,这些都是简单的数据类型些都是简单的数据类型。 对于有些数据,只用简单的数据类型是不够的,对于有些数据,只用简单的数
2、据类型是不够的,难以反映出数据的特点,也难以有效地进行处理。难以反映出数据的特点,也难以有效地进行处理。 3030名学生名学生成绩,成绩,需要需要用用3030个变量个变量 100100名学生名学生成绩,成绩,需要需要用多少个变量用多少个变量? 用用s1,s2,s3,s30s1,s2,s3,s30表示成绩,能否体现内在联系?表示成绩,能否体现内在联系? c c语言用方括号中的数字表示下标,如用语言用方括号中的数字表示下标,如用s15s15表示表示,s s为数组名,为数组名,1515为数组中元素的个数。为数组中元素的个数。一组具有同一属性的数据一组具有同一属性的数据 数组是一组数组是一组有序数据有
3、序数据的集合。数组中各数据的排的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序列是有一定规律的,下标代表数据在数组中的序号号,如,如s5s5。 用一个用一个数组名数组名和和下标下标唯唯一确定数组中的元素一确定数组中的元素。 数组中的每一个元素都属于数组中的每一个元素都属于同一个同一个数据类型数据类型。 用用循环循环对数组中的元素进行操作,可以有效地处对数组中的元素进行操作,可以有效地处理大批量的数据,大大提高效率。理大批量的数据,大大提高效率。6.2.1 6.2.1 定义一维数组定义一维数组6.2.2 6.2.2 引用一维数组的元素引用一维数组的元素6.2.3 6.2.3 一
4、维数组的初始化一维数组的初始化6.2.4 6.2.4 一维数组程序举例一维数组程序举例6.2 定义和引用一维数组6.2.1 定义一维数组一维数组是最简单的一维数组是最简单的数组数组。数组元素只有数组元素只有1 1个下标个下标一一维维数组数组,s5,s5 ,相当于,相当于“线线”。数组数组元素元素有有2 2个下标个下标二二维维数组,数组,s12s12,相当于,相当于“面面”。数组数组元素元素有有3 3个个下标下标三维三维数组数组,s243,s243 ,相当于相当于“体体”。一维及多维数组的概念和用法是类似的。一维及多维数组的概念和用法是类似的。6.2.1 定义一维数组定义定义数组的方法与定义变量
5、的方法类似数组的方法与定义变量的方法类似。intint a a;intint a5 a5;不同不同的的是是数组数组一一次定义次定义一批一批有关联的变量有关联的变量; ;在在定义数组时需要指定这批变量的定义数组时需要指定这批变量的类型类型、数组、数组名称名称,数组中,数组中包含变量的包含变量的个数个数。如如 intint a10; a10;6.2.1 定义一维数组 定义一维数组的定义一维数组的方方式为:式为: 类型符类型符 数组名数组名 常量表达式常量表达式; 数组名的命名规则和变量名数组名的命名规则和变量名相同相同, ,符合标识符的命名符合标识符的命名规则。规则。 常量表达式常量表达式给出给出
6、元素的元素的个数个数。 下标从下标从0 0开始开始,如,如 intint a10; a10; a0,a1,a2,a9 a0,a1,a2,a9 注意没有注意没有a10a10 这个元素。这个元素。 常量表达式中可以包括常量和符号常量,不能包含变量,常量表达式中可以包括常量和符号常量,不能包含变量,即数组的大小不依赖于程序运行过程中变量的值。即数组的大小不依赖于程序运行过程中变量的值。 intint n n; scanfscanf(“%(“%d”,&nd”,&n);); intint an;an;6.2.2 引用一维数组的元素 必须必须先定义先定义数组,才能引用数组中的数组,才能引用数组中的元素元素
7、 t=a3,t=a3,将将a a数组中序号为数组中序号为3 3的元素的值赋给变量的元素的值赋给变量t t。 只能逐个引用数组元素而只能逐个引用数组元素而不能一次引用整个不能一次引用整个数组中的数组中的全部全部元素元素。 b=a2;c=a5; b=a2;c=a5; printfprintf(“%(“%d d,%d%d,%d%d,%d%d,% %d,%dd,%d n”,an”,a););6.2.2 引用一维数组的元素 引用数组元素的表示形式为:引用数组元素的表示形式为: 数组数组名下标名下标 a0 a0=a5+a2+1-a2=a5+a2+1-a2* *3 3 a7/3,a19%3 a7/3,a19
8、%3 intint n=5,a10n=5,a10; an=20; an=20;注意定义数组与引用数组元素的注意定义数组与引用数组元素的区别区别:形式上:形式上:intint a10; a10;定义数组长度为定义数组长度为1010; t=a6t=a6;引用引用a a数组中序号为数组中序号为6 6的元素的元素;简单的判别方法:如果在数组名简单的判别方法:如果在数组名 常量常量 前有类型名前有类型名(charchar,intint,floatfloat,doubledouble等),则为定义数组。等),则为定义数组。如果没有类型名,则为引用数组元素。如果没有类型名,则为引用数组元素。例例6.1 6.
9、1 引用数组元素。利用循环给数组元素引用数组元素。利用循环给数组元素a0a0a9a9赋值为赋值为0 09 9,然后按逆序输出各元素的值。,然后按逆序输出各元素的值。解题思路:解题思路:先用循环给数组元素先用循环给数组元素a0 a0 a9a9赋值赋值0 09 9,这样,每,这样,每个数组元素都有固定的值了,然后按个数组元素都有固定的值了,然后按a9a9到到a0a0的顺序的顺序输出各元素的值。输出各元素的值。#include #include void main()void main() intint i,ai,a10; 10; for( for(i i=0;i=9;i+) =0;i=0; =9;
10、i=0; i i-)-) printfprintf(%d ,a(%d ,ai i); ); printfprintf(n);(n); 使使a0a9的值的值为为090123456789a0a1a2a3a4a5a6a7a8a9先输出先输出a9,最后输,最后输出出a06.2.3 一维数组的初始化对数组元素的赋值既可以通过赋值语句来实现,也可以在定义对数组元素的赋值既可以通过赋值语句来实现,也可以在定义数组时同时给予初值,这就称为数组的数组时同时给予初值,这就称为数组的初始化初始化。(1) (1) 定义数组时对全部数组元素赋初值定义数组时对全部数组元素赋初值intint a10=0,1,2,3,4,5
11、,6,7,8,9; 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,a0=0,a1=1,a2=2;a3=3;a4=4;a5=5,a6=6,a7=7,a8=8,a9=9a7=7,a8=8,a9=9。(2) (2) 可以只给一部分元素赋值可以只给一部分元素赋值,未被赋值的根据数组,未被赋值的根据数组类型类型自动自动赋值赋值。 intint a10=0,1,2,3,4 a10=0,1,2,3,4; intint a10=0,1,2,3,4, a10=0,1,2,3,4,0,0,0,0,00,0,0,0,0;(3)(3)在对全部数
12、组元素赋初值时,如果在对全部数组元素赋初值时,如果数据个数数据个数确定,则可以在确定,则可以在定义数组时不指定数组长度,系统根据数据的数量确定数组的定义数组时不指定数组长度,系统根据数据的数量确定数组的长度。长度。 intint a5=1,2,3,4,5; a5=1,2,3,4,5; 可写可写为为 intint a =1,2,3,4,5a =1,2,3,4,5; 注意:如果数组的长度与定义初值的注意:如果数组的长度与定义初值的个数不相同个数不相同,则数组长度,则数组长度不能省略不能省略。 如果数组如果数组a a的长度为的长度为1010,使用,使用intint a =1,2,3,4,5a =1,
13、2,3,4,5;数数组只赋了组只赋了5 5个初值,系统认为数组长度为个初值,系统认为数组长度为5 5。 应该写为应该写为a10 =1,2,3,4,5 =1,2,3,4,5;6.2.4 一维数组程序举例 例例6.2 6.2 用数组来处理求用数组来处理求fibonaccifibonacci数列问题。数列问题。fibonaccifibonacci数列问题数列问题的含义见的含义见例例p138(p138(兔子生小兔子兔子生小兔子) )。第几个月第几个月小兔子对数小兔子对数中兔子对数中兔子对数老兔子对数老兔子对数兔子总数兔子总数1 11 10 00 01 12 20 01 10 01 13 31 10 0
14、1 12 24 41 11 11 13 35 52 21 12 25 56 63 32 23 38 87 75 53 35 51313解题思路:解题思路: 建立一个数组,将数列中第建立一个数组,将数列中第1 1个数放在数组第个数放在数组第1 1个元素中,个元素中,数列第数列第2 2个数放在数组第个数放在数组第2 2个元素中,个元素中, 数组序号为数组序号为i i的元素的值是其前两个元素值之和。即:的元素的值是其前两个元素值之和。即: fi= fi-2+fi-1 fi= fi-2+fi-1 用循环来求出数组各元素之和用循环来求出数组各元素之和) 3()2(1) 1(12121nfffnfnfnn
15、n费波那西费波那西(fibonacci)(fibonacci)数列数列#include #include void main()void main() intint i; i; intint f20=1,1f20=1,1; ; /f0f0和和f1f1的值的值1,11,1 for(i=2;i20;i+) for(i=2;i20;i+) fi=fi-2+fi-1fi=fi-2+fi-1; ; /求求f2f2和和f19f19的的值值 for(i=0;i20;i+) for(i=0;i20;i+) if(i%5if(i%5=0) =0) printfprintf(n); (n); /每行输出每行输出5
16、 5个个 printfprintf(%12d,fi); (%12d,fi); printfprintf(n);(n); 例例5.85.8程序在顺序求出并输出各个数后,不能保存这些程序在顺序求出并输出各个数后,不能保存这些数据,如果要单独输出第数据,如果要单独输出第1010个数,是比较困难个数,是比较困难的的。 本例本例用数组处理时,把每个数据都保存在各数组元素中,用数组处理时,把每个数据都保存在各数组元素中,如果要单独输出第如果要单独输出第1010个数,是很容易的,直接输出个数,是很容易的,直接输出f9f9即即可可。 例例6.3 6.3 假如有假如有n n个人,各人年龄不同,希望按年龄将他们从
17、小个人,各人年龄不同,希望按年龄将他们从小到大排列。到大排列。 解题思路:解题思路: 排序的规律有两种:一种是排序的规律有两种:一种是“升序升序”,从小到大;另一种从小到大;另一种是是“降序降序”,从大到,从大到小小 把题目抽象为:把题目抽象为:“对对n n个数按升序排序个数按升序排序” 采用采用起泡法起泡法排序排序:先将第:先将第1 1个数和第个数和第2 2个数比较,如果第个数比较,如果第2 2个个数比第数比第1 1个数小,将两数交换,交换后大的放到第个数小,将两数交换,交换后大的放到第2 2个位置,个位置,将第将第2 2个数和第个数和第3 3个数比较,如果第个数比较,如果第2 2个数比第三
18、个数小,将个数比第三个数小,将两数交换,交换后两数交换,交换后大的放到大的放到第第3 3个位置,。执行一次个位置,。执行一次循环后,最大的书被沉到最后面。循环后,最大的书被沉到最后面。985420895420859420854920854290854209大数沉淀,小数起泡大数沉淀,小数起泡a0a1a2a3a4a5for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 854209584209548209542809542089a0a1a2a3a4a5for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 542089452089425089420589a0a1
19、a2a3a4a5for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 420589240589204589a0a1a2a3a4a5for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 204589024589a0a1a2a3a4a5for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; for(i=0;iai+1) for(i=0;iai+1) for(i=0;iai+1) for(i=0;iai+1) for(j=0;j5;j+)#include#include void main()void main() intint a10; a10;
20、 intint i,j,ti,j,t; ;printfprintf(input 10 numbers :n);(input 10 numbers :n);for(i=0;i10;ifor(i=0;i10;i+) +) scanfscanf(%(%d,&ad,&ai); i); printfprintf(n);(n);for(j=0;j9;j+)for(j=0;j9;j+)for(i=0;i9-j;i+) for(i=0;iai+1) ai+1) t=ai;ai=ai+1;ai+1=t; t=ai;ai=ai+1;ai+1=t;printfprintf(the sorted numbers :n
21、);(the sorted numbers :n);for(i=0;i10;i+) for(i=0;i10;i+) printfprintf(%d ,ai);(%d ,ai);printfprintf(n);(n); 6.3 二维数组的定义和引用6.3.1 6.3.1 定义二维数组定义二维数组6.3.2 6.3.2 引用二维数组的元素引用二维数组的元素6.3.3 6.3.3 二维数组的初始化二维数组的初始化6.3.4 6.3.4 二维数组程序举例二维数组程序举例6.3.1 定义二维数组二二维数组定义的一般形式为维数组定义的一般形式为 类型符类型符 数组名数组名 常量表达式常量表达式常量表达式常
22、量表达式;float float a34,b510a34,b510;定义定义a a为为3 34(34(3行行4 4列列) )的数组的数组 b b为为5 510(510(5行行1010列列) )的的数组数组注意不能写为注意不能写为float float a3,4,b5,10;a3,4,b5,10;6.3.1 定义二维数组a00a01a02a03a10a11a12a13a20a21a22a23二维数组在内存中的存储顺序:二维数组在内存中的存储顺序:按行存放按行存放,即在内存中先,即在内存中先顺序存放第一行的元素,再存放第二行的顺序存放第一行的元素,再存放第二行的元素,见图元素,见图6.66.6,p
23、156-p157p156-p157。6.3.2 引用二维数组的元素二维数组元素的表示形式为二维数组元素的表示形式为: 数组数组名名 下标下标下标下标 b12=a23/2 b12=a23/2 合法合法 c3/25%5,d2+26-3 c3/25%5,d2+26-3 合法合法 intint a34 a34; a3; a34=3; 4=3; 不不合法合法6.3.3 二维数组的初始化intint a34=1,2,3,4,5,6,7,8 a34=1,2,3,4,5,6,7,8,9,10,11,129,10,11,12;等价等价于于intint a34= a34=1,2,3,4,1,2,3,4,5,6,7
24、,8,5,6,7,8,9,10,11,129,10,11,12;/;/按行存放按行存放intint a34=1,5,9; a34=1,5,9;等价于等价于intint a34=1, a34=1,0,0,00,0,0,5,5,0,0,00,0,0,9,9,0,0,00,0,0;intint a34=1,5,6 a34=1,5,6;等价于等价于intint a34=1,5,6,a34=1,5,6,00 ;等价于等价于intint a34=1, a34=1,0,0,00,0,0,5,6,5,6,0,00,0,0,0,0,00,0,0,0;6.3.3 二维数组的初始化intint a34=1,2,3,
25、4,5,6,7,8,9,10,11,12 a34=1,2,3,4,5,6,7,8,9,10,11,12;等价等价于于intint a 4=a 4=1,2,3,4,1,2,3,4,5,6,7,8,5,6,7,8,9,10,11,129,10,11,12;intint a4=0,0,3, ,0,10 a4=0,0,3, ,0,10;等价等价于于intint a4= a4=0,0,3,0,0,3,0 0,0,0,0,00,0,0,0 ,0,10,0,10,0,00,0;6.3.4 二维数组程序举例 例例6.4 6.4 将一个二维数组将一个二维数组a a的的行和列的元素互换,存到另一个二行和列的元素互
26、换,存到另一个二维数组维数组b b中。中。654321a635241b编程思路:编程思路: 将将a a数组中第数组中第i i行行j j列元素赋给列元素赋给b b数组中数组中j j行行i i列元素列元素 例如例如 a00 a00 赋给赋给 b00 b00 a0a01 1 赋给赋给 b10 b10 a0 a02 2 赋给赋给 b20 b20, 可以用双层循环来处理,用外循环控制行的变化,内循可以用双层循环来处理,用外循环控制行的变化,内循环控制列的变化环控制列的变化#include #include void main()void main() intint a23=1,2,3,4,5,6; a2
27、3=1,2,3,4,5,6; intint b32, b32,i,ji,j; ; printfprintf(array a:n);(array a:n); for (i=0;i2;i for (i=0;i2;i+) /+) /i控制控制行行数的变化数的变化 for for (j=0;j3;j(j=0;j3;j+) /+) /j控制列数的控制列数的变化变化 printfprintf(%5d,aij); (%5d,aij); /输出输出a的的各各元素元素 bji=aij; bji=aij; /a元素值赋给元素值赋给b相应相应元素元素 printfprintf(n);(n); printfprint
28、f(array b:n); (array b:n); for ( for (i i=0;i3;i+)=0;i3;i+) for(j=0;j2;j+)for(j=0;j2;j+) printfprintf(%5d,bij(%5d,bij);/);/输出输出b b的的各元素各元素,行列互换,行列互换 printfprintf(n);(n); 例例6.5 6.5 一一个班有个班有5 5个个学生,己知每个学生有学生,己知每个学生有5 5门课的成绩门课的成绩,要求输出,要求输出平均成绩平均成绩最高的学生的成绩以及该学生的最高的学生的成绩以及该学生的序序号号。 解题解题思路:思路: 用二维数组,行代表学生,列代表一门课的用二维数组,行代表学生,列代表一门课的成绩成绩及平均及平均成绩。成绩。 要要存放存放5 5个个学生学生5 5门课的成绩门课的成绩和和平均成绩平均成绩,数组的大小应,数组的大小应该该是是5 56 6。#
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 紫云英种植与水稻提质增效技术
- 黄颡鱼池塘健康养殖技术
- 中国医学区块链场景构建及应用指南2025
- 安全法规与标准试题及答案
- 贸易术语及应用及试题及答案
- jetson 系列移植指南 nv-jetson-agx-xavier-as-jetson-xavier-nx
- 2025年宁泌泰胶囊项目建议书
- CPSM考试科目试题及答案详解
- 国际货运保险常识试题及答案
- 2024年SCMP智慧学习试题及答案
- 2025江苏南京市金陵饭店股份限公司招聘高频重点模拟试卷提升(共500题附带答案详解)
- 中国急性缺血性卒中诊治指南(2023)解读
- 爱国卫生知识宣传
- 人教版三年级下册语文《古诗三首(元日)》练习题(含答案)
- 华为采购管理
- 小学学生一日常规管理
- 基于代际互动视角的农村老年家庭数字反哺机制研究
- 《敏捷项目管理》课件
- 外研版(2025新版)七年级下册英语Unit 1 学情调研测试卷(含答案)
- 专题10 开展心理健康教育 促进身心健康成长-备战2023年中考英语阅读理解时文爆点专题训练(解析版)
- 土壤质地与土壤酶活性-第1篇-洞察分析
评论
0/150
提交评论