C语言程序设计PPT课件第8章数组.ppt
《C语言程序设计PPT课件第8章数组.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计PPT课件第8章数组.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第第第8 8 8 8章章章章 数组数组数组数组2023/1/162/49本章学习内容本章学习内容 对数组名特殊含义的理解对数组名特殊含义的理解 数组类型,数组的定义和初始化数组类型,数组的定义和初始化 向函数传递一维数组和二维数组向函数传递一维数组和二维数组 排序、查找、求最大最小值等常用算法排序、查找、求最大最小值等常用算法 2023/1/163/49为什么使用数组为什么使用数组(Array)?【例例例例8.18.18.18.1】要读入要读入要读入要读入10101010人的成绩,然后求平均成绩人的成绩,然后求平均成绩人的成绩,然后求平均成绩人的成绩,然后求平均成绩 需定义需定义需定义需定义
2、10101010个不同名整型变量,需要使用多个个不同名整型变量,需要使用多个个不同名整型变量,需要使用多个个不同名整型变量,需要使用多个scanf()scanf()scanf()scanf()int score1,score2,score10;int score1,score2,score10;scanf(%d,&score1);scanf(%d,&score1);scanf(%d,&score2);scanf(%d,&score2);.而用数组,可共用一个而用数组,可共用一个而用数组,可共用一个而用数组,可共用一个scanf()scanf()scanf()scanf()并利用循环语句读取并利
3、用循环语句读取并利用循环语句读取并利用循环语句读取 int score10,i;int score10,i;for(i=0;i10;i+)for(i=0;i10;i+)scanf(%d,&scorei);scanf(%d,&scorei);保存大量保存大量同类型的同类型的相关数据相关数据2023/1/164/498.1一维数组的定义和初始化一维数组的定义和初始化 一维数组的定义一维数组的定义一维数组的定义一维数组的定义 存储类型存储类型存储类型存储类型 数据类型数据类型数据类型数据类型 数组名数组名数组名数组名 整数整数整数整数1 1 1 1 整数整数整数整数2 2 2 2 整数整数整数整数n
4、;n;n;n;a9a8a7 a1a0数组首地址数组首地址intint a10;a10;定义一个有定义一个有定义一个有定义一个有1010个个个个intint型元素的数组型元素的数组型元素的数组型元素的数组 系统在内存分配连续的系统在内存分配连续的系统在内存分配连续的系统在内存分配连续的1010个个个个intint空间给此数组空间给此数组空间给此数组空间给此数组 直接对直接对直接对直接对a a a a的访问,就是访问此数组的首地址的访问,就是访问此数组的首地址的访问,就是访问此数组的首地址的访问,就是访问此数组的首地址基类型基类型下标从下标从0开始开始2023/1/165/498.1一维数组的定义
5、和初始化一维数组的定义和初始化a9a8a7 a1a0intint a10;a10;数组大小必须是值为正的常量,不能为变量数组大小必须是值为正的常量,不能为变量数组大小必须是值为正的常量,不能为变量数组大小必须是值为正的常量,不能为变量 一旦定义,不能改变大小一旦定义,不能改变大小一旦定义,不能改变大小一旦定义,不能改变大小 数组大小最好用宏来定义,以适应未来可能数组大小最好用宏来定义,以适应未来可能数组大小最好用宏来定义,以适应未来可能数组大小最好用宏来定义,以适应未来可能的变化的变化的变化的变化#define#define SIZESIZE 10 10 intint a aSIZESIZE;
6、一维数组的定义一维数组的定义一维数组的定义一维数组的定义 存储类型存储类型存储类型存储类型 数据类型数据类型数据类型数据类型 数组名数组名数组名数组名 整数整数整数整数1 1 1 1 整数整数整数整数2 2 2 2 整数整数整数整数n;n;n;n;2023/1/166/498.1一维数组的定义和初始化一维数组的定义和初始化 数组定义后的初值仍然是随机数数组定义后的初值仍然是随机数 一般需要我们来初始化一般需要我们来初始化 int int a5=12,34,56,78,9;a5=12,34,56,78,9;int int a5=0;a5=0;int int a=11,22,33,44,55;a=
7、11,22,33,44,55;2023/1/167/498.1一维数组的定义和初始化一维数组的定义和初始化 数组的引用数组的引用 数组名数组名数组名数组名 下标下标下标下标 数组下标数组下标数组下标数组下标(index)(index)(index)(index)都是从都是从都是从都是从0 0 0 0开始开始开始开始 使用使用使用使用aa0 0、a1a1、a2a2、a9a9这样的形式这样的形式这样的形式这样的形式访问每个元素访问每个元素访问每个元素访问每个元素 下标既可是常量,也可是整型表达式,允许快速下标既可是常量,也可是整型表达式,允许快速下标既可是常量,也可是整型表达式,允许快速下标既可是
8、常量,也可是整型表达式,允许快速随机访问,如随机访问,如随机访问,如随机访问,如aiai可以像使用普通变量一样使用它们可以像使用普通变量一样使用它们可以像使用普通变量一样使用它们可以像使用普通变量一样使用它们2023/1/168/49如何使两个数组的值相等?如何使两个数组的值相等?main()int a4=1,2,3,4,b4;b=a;解决方法解决方法方法方法1:1:逐个元素赋值逐个元素赋值 b0=a0;b1=a1;b2=a2;b3=a3;方法方法2:2:通过循环赋值通过循环赋值 int i;for(i=0;i4;i+)bi=ai;原因原因:数组名表示数组的首地址数组名表示数组的首地址,其值不
9、可改变其值不可改变!2023/1/169/498.1一维数组的定义和初始化一维数组的定义和初始化【例例例例8.28.28.28.2】编程实现显示用户输入的月份(不包括编程实现显示用户输入的月份(不包括编程实现显示用户输入的月份(不包括编程实现显示用户输入的月份(不包括闰年的月份)拥有的天数闰年的月份)拥有的天数闰年的月份)拥有的天数闰年的月份)拥有的天数 2023/1/1610/498.1一维数组的定义和初始化一维数组的定义和初始化 下标越界是下标越界是大忌大忌!编译程序不检查是否越界编译程序不检查是否越界编译程序不检查是否越界编译程序不检查是否越界下标越界,将访问数组以外的空间下标越界,将访
10、问数组以外的空间下标越界,将访问数组以外的空间下标越界,将访问数组以外的空间那里的数据是未知的,不受我们掌控,可能带那里的数据是未知的,不受我们掌控,可能带那里的数据是未知的,不受我们掌控,可能带那里的数据是未知的,不受我们掌控,可能带来严重后果来严重后果来严重后果来严重后果2023/1/1611/49b0b0b1b1b2b2b3b3b4b4b5b5b6b6b7b7b8b8b9b9c ca a【例例8.3】当下标值小于当下标值小于0或超过数组长度时或超过数组长度时 会出现什么情况?会出现什么情况?运行程序或单步执行观察变量变化情况可以看到,运行程序或单步执行观察变量变化情况可以看到,变量变量c
11、 c和和a a的值因数组越界而被悄悄破坏了的值因数组越界而被悄悄破坏了12345612078910114040444448484c4c5050545458585c5c6060646468686c6c2023/1/1612/498.2二维数组的定义和初始化二维数组的定义和初始化 一维数组一维数组一维数组一维数组 用一个下标确定各元素在数组中的顺序用一个下标确定各元素在数组中的顺序用一个下标确定各元素在数组中的顺序用一个下标确定各元素在数组中的顺序 可用排列成一行的元素组来表示可用排列成一行的元素组来表示可用排列成一行的元素组来表示可用排列成一行的元素组来表示 如如如如 int a5;int a5
12、;二维数组二维数组二维数组二维数组用两个下标确定各元素在数组中的顺序用两个下标确定各元素在数组中的顺序用两个下标确定各元素在数组中的顺序用两个下标确定各元素在数组中的顺序可用排列成可用排列成可用排列成可用排列成i i i i行,行,行,行,j j j j列的元素组来表示列的元素组来表示列的元素组来表示列的元素组来表示 如如如如 int b23;int b23;n n n n维数组维数组维数组维数组用用用用n n n n个下标来确定各元素在数组中的顺序个下标来确定各元素在数组中的顺序个下标来确定各元素在数组中的顺序个下标来确定各元素在数组中的顺序 如如如如 int c324;int c324;n
13、3n3n3n3时,维数组无法在平面上表示其各元素的位置时,维数组无法在平面上表示其各元素的位置时,维数组无法在平面上表示其各元素的位置时,维数组无法在平面上表示其各元素的位置a0a0a1a1a2a2a3a3a4a4b00b00b01b01b02b02b10b10b11b11b12b122023/1/1613/49【例例例例】以下程序的运行结果是什么?以下程序的运行结果是什么?以下程序的运行结果是什么?以下程序的运行结果是什么?int main()int main()int a3=1,2,3,4,5,6,0;int a3=1,2,3,4,5,6,0;printf(%d,%d,%dn,a11,a2
14、1,a31);printf(%d,%d,%dn,a11,a21,a31);return 0;return 0;1 2 34 5 06 0 00 0 0结果:结果:5,0,0【例例】若若int a 3=1,2,3,4,5,6,7,则则a数组的第一维大小是多少?数组的第一维大小是多少?1 2 34 5 67 0 0二维数组的初始化二维数组的初始化2023/1/1614/49数组的数据类型和存储类型数组的数据类型和存储类型 根据数组的根据数组的根据数组的根据数组的数据类型数据类型数据类型数据类型,为每一元素安排相同长度的存储单元,为每一元素安排相同长度的存储单元,为每一元素安排相同长度的存储单元,为
15、每一元素安排相同长度的存储单元 根据数组的根据数组的根据数组的根据数组的存储类型存储类型存储类型存储类型,将其安排在内存的动态存储区、静态,将其安排在内存的动态存储区、静态,将其安排在内存的动态存储区、静态,将其安排在内存的动态存储区、静态存储区或寄存器区存储区或寄存器区存储区或寄存器区存储区或寄存器区 用用用用sizeofsizeof(a)(a)来获得数组来获得数组来获得数组来获得数组a a所占字节数所占字节数所占字节数所占字节数shortshort2023/1/1615/49short int a23;a0a1a10 a11a12a00 a01a02存放顺序:存放顺序:存放顺序:存放顺序:
16、按行存放按行存放按行存放按行存放先顺序存放第先顺序存放第先顺序存放第先顺序存放第0 0 0 0行元素,再存放第行元素,再存放第行元素,再存放第行元素,再存放第1 1 1 1行元素行元素行元素行元素a00a01a02a10a11a12需知道数组每行列数才能从起始地址开始正确读出数组元素需知道数组每行列数才能从起始地址开始正确读出数组元素二维数组的存储结构二维数组的存储结构二维数组的存储结构二维数组的存储结构2023/1/1616/49二维数组实例二维数组实例 【例例例例8.48.48.48.4】从键盘输入某年某月(包括闰年),编程输出该年从键盘输入某年某月(包括闰年),编程输出该年从键盘输入某年
17、某月(包括闰年),编程输出该年从键盘输入某年某月(包括闰年),编程输出该年的该月拥有的天数的该月拥有的天数的该月拥有的天数的该月拥有的天数2023/1/1617/498.3向函数传递一维数组向函数传递一维数组 传递传递传递传递整个数组整个数组整个数组整个数组给另一个函数,可给另一个函数,可给另一个函数,可给另一个函数,可将数组的将数组的将数组的将数组的首地址首地址首地址首地址作为参数传过去作为参数传过去作为参数传过去作为参数传过去用用用用数组名数组名数组名数组名作函数参数作函数参数作函数参数作函数参数只复制一个地址只复制一个地址只复制一个地址只复制一个地址自然比复制全部数自然比复制全部数自然比
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 PPT 课件 数组
限制150内