c语言第四章 数组和结构.ppt
《c语言第四章 数组和结构.ppt》由会员分享,可在线阅读,更多相关《c语言第四章 数组和结构.ppt(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言程序设计第四章 数组和结构1C语言程序设计四、数据组织教学目标:教学目标:数组的概念、定义和初始化数组的概念、定义和初始化数组的概念、定义和初始化数组的概念、定义和初始化筛法的解题思路筛法的解题思路筛法的解题思路筛法的解题思路冒泡排序的思路冒泡排序的思路冒泡排序的思路冒泡排序的思路字符数组字符数组字符数组字符数组结构与结构数组结构与结构数组结构与结构数组结构与结构数组2C语言程序设计四、数据组织4.1 4.1 数组数组任务任务任务任务4.14.14.14.1 半期考试结束了,教师想看看半期考试结束了,教师想看看半期考试结束了,教师想看看半期考试结束了,教师想看看C C语言这门课语言这门课
2、语言这门课语言这门课程的最高分,以及有哪几位同学得到了这个程的最高分,以及有哪几位同学得到了这个程的最高分,以及有哪几位同学得到了这个程的最高分,以及有哪几位同学得到了这个最高分。试编程解决这个问题,为简单起见,最高分。试编程解决这个问题,为简单起见,最高分。试编程解决这个问题,为简单起见,最高分。试编程解决这个问题,为简单起见,假设班上共有假设班上共有假设班上共有假设班上共有1010人。人。人。人。3C语言程序设计任务任务4.1程序框图程序框图4_1.4_1.cppcpp4C语言程序设计4.1.1 4.1.1 一维数组的定义一维数组的定义一维数组定义的形式如下:一维数组定义的形式如下:一维数
3、组定义的形式如下:一维数组定义的形式如下:类型说明符类型说明符类型说明符类型说明符 数组名数组名数组名数组名 常量表达式常量表达式常量表达式常量表达式 例如:例如:例如:例如:intintintint score10;score10;score10;score10;double a21000;double a21000;double a21000;double a21000;说明:说明:说明:说明:(1 1 1 1)数组名的命名规则与变量名的相同)数组名的命名规则与变量名的相同)数组名的命名规则与变量名的相同)数组名的命名规则与变量名的相同(2 2 2 2)用方括号将常量表达式括起)用方括号将
4、常量表达式括起)用方括号将常量表达式括起)用方括号将常量表达式括起(3 3 3 3)常量表达式定义了数组元素的个数)常量表达式定义了数组元素的个数)常量表达式定义了数组元素的个数)常量表达式定义了数组元素的个数(4 4 4 4)数组下标从)数组下标从)数组下标从)数组下标从0 0 0 0开始,如果定义开始,如果定义开始,如果定义开始,如果定义5 5 5 5个元素,是从第个元素,是从第个元素,是从第个元素,是从第0 0 0 0个元素到第个元素到第个元素到第个元素到第4 4 4 4个元素。个元素。个元素。个元素。(5 5 5 5)常量表达式中不允许包含变量,如)常量表达式中不允许包含变量,如)常量
5、表达式中不允许包含变量,如)常量表达式中不允许包含变量,如intintintint an an an an;5C语言程序设计4.1.2 4.1.2 数组初始化数组初始化1.1.定义同时初始化定义同时初始化定义同时初始化定义同时初始化将初值放在一对大括号中。将初值放在一对大括号中。将初值放在一对大括号中。将初值放在一对大括号中。对所有元素赋初值。如如intint score3=78,89,98;score3=78,89,98;对部分元素赋初值。如如intint score5=78,89,98;score5=78,89,98;前前5 5个元素有初值个元素有初值 若定义数组时省略数组长度,则系统根据
6、初值的个数自动确定数组元素个数。如如 intint score=78,89,98;score=78,89,98;相当于相当于 intint score3=78,89,98;score3=78,89,98;6C语言程序设计4.1.2 4.1.2 数组初始化数组初始化2.定义之后初始后定义之后初始后此时只能对一个一个的数组元素进行赋值此时只能对一个一个的数组元素进行赋值此时只能对一个一个的数组元素进行赋值此时只能对一个一个的数组元素进行赋值如如如如intintintint score3;score3;score3;score3;score=score=score=score=78,89,9878,
7、89,98;是错误的初始化方法是错误的初始化方法是错误的初始化方法是错误的初始化方法intintintint score3;score3;score3;score3;score0=78;score1=89;score2=98score0=78;score1=89;score2=98score0=78;score1=89;score2=98score0=78;score1=89;score2=98正确正确正确正确3.例例4.1 4.1 程序程序4_2.4_2.cppcpp7C语言程序设计4.1.3 4.1.3 一维数组元素的引用一维数组元素的引用同变量一样,数组也必须先定义,再引用同变量一样,数
8、组也必须先定义,再引用同变量一样,数组也必须先定义,再引用同变量一样,数组也必须先定义,再引用只能引用单个的数组元素,不能引用整个数只能引用单个的数组元素,不能引用整个数只能引用单个的数组元素,不能引用整个数只能引用单个的数组元素,不能引用整个数组组组组每个数组元素都相当于一个普通变量每个数组元素都相当于一个普通变量每个数组元素都相当于一个普通变量每个数组元素都相当于一个普通变量数组引用法数组引用法数组引用法数组引用法 数组名数组名数组名数组名 下标下标下标下标 其中下标可以是常量、变量或表达式其中下标可以是常量、变量或表达式其中下标可以是常量、变量或表达式其中下标可以是常量、变量或表达式例:
9、例:例:例:intintintint a5 a5 a5 a5 a2a2a2a2,a4a4a4a4,a2-1a2-1a2-1a2-1,均正确均正确均正确均正确 但但但但a5a5a5a5,a-1a-1a-1a-1则不正确,但则不正确,但则不正确,但则不正确,但C C C C语言编译时不会提语言编译时不会提语言编译时不会提语言编译时不会提示,只在运行时才可能出错,示,只在运行时才可能出错,示,只在运行时才可能出错,示,只在运行时才可能出错,因此对数组元素的引用一定要谨慎因此对数组元素的引用一定要谨慎因此对数组元素的引用一定要谨慎因此对数组元素的引用一定要谨慎8C语言程序设计4.1.4 4.1.4 一
10、维数组的存储方式一维数组的存储方式vv数组在内存中占据连续的字节单元;数组在内存中占据连续的字节单元;数组在内存中占据连续的字节单元;数组在内存中占据连续的字节单元;vv数组占据的字节单元数等于数组元素个数组占据的字节单元数等于数组元素个数组占据的字节单元数等于数组元素个数组占据的字节单元数等于数组元素个数乘以该数组所属数据类型的数据占据数乘以该数组所属数据类型的数据占据数乘以该数组所属数据类型的数据占据数乘以该数组所属数据类型的数据占据的字节单元数。的字节单元数。的字节单元数。的字节单元数。vv数组元素按顺序连续存放。数组元素按顺序连续存放。数组元素按顺序连续存放。数组元素按顺序连续存放。如
11、:如:如:如:short a10;short a10;short a10;short a10;则该数组在内存中共占据连续的则该数组在内存中共占据连续的则该数组在内存中共占据连续的则该数组在内存中共占据连续的 2 2 2 21010101020202020个字节单元,依次保存个字节单元,依次保存个字节单元,依次保存个字节单元,依次保存 a0a0a0a0、a1a1a1a1、a9 a9 a9 a9 共共共共10101010个元素。个元素。个元素。个元素。9C语言程序设计4.4.1.5 1.5 一维数组程序举例一维数组程序举例任务任务4.24.2 使用筛法求200以内的所有素数。思路:思路:n想象将2
12、00个数看作沙子和小石子,让小石子充当素数,让沙子当作非素数。弄一个筛子,只要将沙子筛走,剩下的就是素数了。n非素数一定是2、3、4、5等的倍数。使用数组,其下标就是100以内的数,让数组元素的值为1或0,作为筛去与否的标志,筛去后的元素值为1,见下图10C语言程序设计任务任务4.2 4.2 筛法依据筛法依据方法的依据:方法的依据:n n1 1 1 1到到到到200200200200这些自然数可以分为这些自然数可以分为这些自然数可以分为这些自然数可以分为3 3 3 3类:类:类:类:(1 1 1 1)单位数,即)单位数,即)单位数,即)单位数,即1 1 1 1(2 2 2 2)素数,大于)素数
13、,大于)素数,大于)素数,大于1 1 1 1,且只能被,且只能被,且只能被,且只能被1 1 1 1和它自身整除和它自身整除和它自身整除和它自身整除(3 3 3 3)合数,除了)合数,除了)合数,除了)合数,除了1 1 1 1和自身,还有其他正因子和自身,还有其他正因子和自身,还有其他正因子和自身,还有其他正因子n n筛法实际上是筛去合数,留下素数筛法实际上是筛去合数,留下素数筛法实际上是筛去合数,留下素数筛法实际上是筛去合数,留下素数n n为了提高筛法效率,注意到:为了提高筛法效率,注意到:为了提高筛法效率,注意到:为了提高筛法效率,注意到:n n如如如如n n n n为合数(这里是为合数(这
14、里是为合数(这里是为合数(这里是200200200200),),),),c c c c为为为为n n n n的大于的大于的大于的大于1 1 1 1的最的最的最的最小正因数,则小正因数,则小正因数,则小正因数,则只要找到只要找到c c就可确定就可确定n n为合数,将其筛去为合数,将其筛去11C语言程序设计筛法求素数的程序框图筛法求素数的程序框图第第1 1块是初始化语块是初始化语句,用于将句,用于将primeprime数组的所有元素置数组的所有元素置为为0 0第第2 2块为对正因数块为对正因数d d进行循环,对所进行循环,对所有的数依次用此数有的数依次用此数进行筛选进行筛选第第3 3块为计数型循块
15、为计数型循环,用于显示所有环,用于显示所有的素数。的素数。4_3.CPP12C语言程序设计4.4.1.5 1.5 一维数组程序举例一维数组程序举例n n任务任务4.34.3 给定由给定由6个整数组成的序列个整数组成的序列2,8,4,3,5,9,将其按从大到小的顺序排,将其按从大到小的顺序排列,并输出。列,并输出。n n要完成这个任务,需要进行排序,排序要完成这个任务,需要进行排序,排序算法很多,王小二找了很多资料,决定算法很多,王小二找了很多资料,决定选用较简单,又很典型的冒泡排序法。选用较简单,又很典型的冒泡排序法。n n下图画出了使用冒泡排序法对这下图画出了使用冒泡排序法对这6个数进个数进
16、行排序的过程。行排序的过程。13C语言程序设计冒泡排序法图示冒泡排序法图示将将a0视为水底,视为水底,a5视为水面,则视为水面,则(1)最轻(小)的数)最轻(小)的数2最先浮到水面,交换最先浮到水面,交换到到a5(2)次轻的次轻的3第二遍第二遍扫描交换到扫描交换到a4(3)再轻的再轻的4第三遍第三遍扫描交换到扫描交换到a3以此类推,以此类推,6个数,共个数,共需需5次扫描次扫描14C语言程序设计冒泡排序法图示冒泡排序法图示(4 4 4 4)第一遍扫描完)第一遍扫描完)第一遍扫描完)第一遍扫描完成后,成后,成后,成后,a5a5a5a5最小,最小,最小,最小,以后的扫描不需再以后的扫描不需再以后的
17、扫描不需再以后的扫描不需再与与与与a5a5a5a5比较比较比较比较(5 5 5 5)第二遍扫描后,)第二遍扫描后,)第二遍扫描后,)第二遍扫描后,a4a4a4a4位置已定,以位置已定,以位置已定,以位置已定,以后也不需再与后也不需再与后也不需再与后也不需再与a4a4a4a4交换交换交换交换n n以此类推每遍扫描以此类推每遍扫描以此类推每遍扫描以此类推每遍扫描后都有一个元素的后都有一个元素的后都有一个元素的后都有一个元素的位置已定,以后不位置已定,以后不位置已定,以后不位置已定,以后不需再与之进行比较需再与之进行比较需再与之进行比较需再与之进行比较15C语言程序设计冒泡排序算法设计冒泡排序算法设
18、计n n为了表述方便,定义以下为了表述方便,定义以下为了表述方便,定义以下为了表述方便,定义以下3 3个变量个变量个变量个变量(1 1 1 1)待排序的数的个数)待排序的数的个数)待排序的数的个数)待排序的数的个数n n n n(此处为此处为此处为此处为6 6 6 6)(2 2 2 2)扫描遍数扫描遍数扫描遍数扫描遍数j j j j(j=1,2,3,n-1j=1,2,3,n-1j=1,2,3,n-1j=1,2,3,n-1)(3 3 3 3)每遍扫描时待比较元素的下标)每遍扫描时待比较元素的下标)每遍扫描时待比较元素的下标)每遍扫描时待比较元素的下标i i i i(i i i i=1,2,3,n
19、-j=1,2,3,n-j=1,2,3,n-j=1,2,3,n-j)n n算法步骤如下算法步骤如下算法步骤如下算法步骤如下(1 1 1 1)将待排序的数据放入数组中)将待排序的数据放入数组中)将待排序的数据放入数组中)将待排序的数据放入数组中(2 2 2 2)让)让)让)让j j j j从从从从1 1 1 1到到到到n-1n-1n-1n-1循环做步骤循环做步骤循环做步骤循环做步骤(3)(3)(3)(3)(每遍扫描的循环每遍扫描的循环每遍扫描的循环每遍扫描的循环)(3 3 3 3)让让让让i i i i从从从从1 1 1 1到到到到n-jn-jn-jn-j做步骤做步骤做步骤做步骤(4)(4)(4)
20、(4)(依次比较两个相邻数组元素,依次比较两个相邻数组元素,依次比较两个相邻数组元素,依次比较两个相邻数组元素,以确定是否交换以确定是否交换以确定是否交换以确定是否交换)(4 4 4 4)如果)如果)如果)如果aiai+1aiai+1aiai+1aiai+1,则交换之则交换之则交换之则交换之(5 5 5 5)输出排序结果)输出排序结果)输出排序结果)输出排序结果16C语言程序设计冒泡排序的冒泡排序的NSNS图图参考程序:参考程序:4_4_4a.cpp4a.cpp17C语言程序设计任务任务4.3 4.3 冒泡排序冒泡排序n n练习练习练习练习(1 1 1 1)上机运行此程序,并输入一些不同的序列
21、试试)上机运行此程序,并输入一些不同的序列试试)上机运行此程序,并输入一些不同的序列试试)上机运行此程序,并输入一些不同的序列试试(2 2 2 2)如果输入序列为)如果输入序列为)如果输入序列为)如果输入序列为9 9 9 9,8 8 8 8,7 7 7 7,6 6 6 6,5 5 5 5,4 4 4 4,试着分析,试着分析,试着分析,试着分析一下程序需执行多少趟扫描?一下程序需执行多少趟扫描?一下程序需执行多少趟扫描?一下程序需执行多少趟扫描?(3 3 3 3)如果输入序列是一个已排好序的序列,如何修)如果输入序列是一个已排好序的序列,如何修)如果输入序列是一个已排好序的序列,如何修)如果输入
22、序列是一个已排好序的序列,如何修改程序使得只进行一趟扫描就完成排序?改程序使得只进行一趟扫描就完成排序?改程序使得只进行一趟扫描就完成排序?改程序使得只进行一趟扫描就完成排序?(4 4 4 4)此程序还可以在哪些方面作出修改以提高效率)此程序还可以在哪些方面作出修改以提高效率)此程序还可以在哪些方面作出修改以提高效率)此程序还可以在哪些方面作出修改以提高效率?4_4b.cpp(5 5 5 5)自行查找效率更高的排序算法,并与此算法进)自行查找效率更高的排序算法,并与此算法进)自行查找效率更高的排序算法,并与此算法进)自行查找效率更高的排序算法,并与此算法进行比较。行比较。行比较。行比较。18C
23、语言程序设计4.4.2 2 二维数组二维数组n n任务任务任务任务4.4.4.4.4 4 4 4 科考队员在北极发现了一座新的冰山,他们想算出冰科考队员在北极发现了一座新的冰山,他们想算出冰科考队员在北极发现了一座新的冰山,他们想算出冰科考队员在北极发现了一座新的冰山,他们想算出冰山在水面上的体积,为此需测量冰山的高度。冰山上各处的高山在水面上的体积,为此需测量冰山的高度。冰山上各处的高山在水面上的体积,为此需测量冰山的高度。冰山上各处的高山在水面上的体积,为此需测量冰山的高度。冰山上各处的高度不同,可以在图上给冰山打上格子,如下图所示。以海面为度不同,可以在图上给冰山打上格子,如下图所示。以
24、海面为度不同,可以在图上给冰山打上格子,如下图所示。以海面为度不同,可以在图上给冰山打上格子,如下图所示。以海面为参照,测量出冰山上每个格子处的平均高度,就可以从整体上参照,测量出冰山上每个格子处的平均高度,就可以从整体上参照,测量出冰山上每个格子处的平均高度,就可以从整体上参照,测量出冰山上每个格子处的平均高度,就可以从整体上描述冰山的地貌,从而计算出它的体积。图中描述冰山的地貌,从而计算出它的体积。图中描述冰山的地貌,从而计算出它的体积。图中描述冰山的地貌,从而计算出它的体积。图中0 0表示海面,数表示海面,数表示海面,数表示海面,数字表示高度,单位为米。设每一格的大小为字表示高度,单位为
25、米。设每一格的大小为字表示高度,单位为米。设每一格的大小为字表示高度,单位为米。设每一格的大小为10m10m10m10m。19C语言程序设计4.4.2 2 二维数组二维数组n n上图中有上图中有上图中有上图中有5 5 5 5行行行行7 7 7 7列,列,列,列,n n对于第对于第对于第对于第0 0 0 0行,可用行,可用行,可用行,可用ice0ice0ice0ice0,它有它有它有它有7 7 7 7个元素,因此可个元素,因此可个元素,因此可个元素,因此可定义为定义为定义为定义为intintintint ice07 ice07 ice07 ice07n n同理有同理有同理有同理有ice17,ic
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言第四章 数组和结构 语言 第四 数组 结构
限制150内