您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > c-chap6 数组
1第六章数组26.1总结与回顾(数据类型与程序设计)6.2数组作为一种复杂数据类型6.3数组的声明、操作和使用6.4数组作为函数参数的处理6.5数组的应用(排序、查找和应用)6.6多维数组提纲31.高级语言的基本能力-简单数据类型(整型/实型/字符型)-程序控制结构(顺序/分支/循环、子程序调用)2.算法与算法设计的基本方法-算法是求解问题的基本思路和步骤。-采用自顶向下/逐步求精的算法设计方法。3.数据类型+算法=程序6.1总结与回顾44.数据类型的内涵–数据的抽象(定义)整数/实数/字符等是对客观世界事物(数据)的抽象。–数据的存储空间(表达范围)长整型、短整形、浮点数、字符等数据所分配的存储空间各不相同。–数据的操作算术、逻辑、关系运算。6.1总结与回顾55.求解问题的局限:–数据抽象的局限很多客观世界的事物很难抽象到简单的数据类型上。比如:数列或级数的抽象。–处理能力的局限比如对任意数列的排序和查找问题,依照目前的能力尚不能够进行处理。•解决上述问题的基本思路:增强数据的表达和处理能力。6.1总结与回顾66.1总结与回顾(数据类型与程序设计)6.2数组作为一种复杂数据类型6.3数组的声明、操作和使用6.4数组作为函数参数的处理6.5数组的应用(排序、查找和应用)6.6多维数组提纲76.2数组作为一种复杂数据类型引入数组是为了增强对复杂数据的抽象和表达能力,比如某个班学生的成绩、候选人的计票、每天的温度等。数组是一种基于简单数据类型构造而成的复杂数据类型,因此需要了解:数组的表达对象(数据的抽象)数组的存储结构数组的操作86.2数组作为一种复杂数据类型1.数组的表达对象现实世界经常存在这样的数据:某课程一个班级中按学号排列的各个学生考试成绩、一年中各月份的平均温度……其特点是这有限个数据元素的类型相同,且具有先后顺序关系;上述特征的数据可以抽象为线性表。线性表是具有相同数据类型的n(n=0)个数据元素的有限序列,通常记为:(a1,a2,…ai-1,ai,ai+1,…an)其中n为表长,n=0时称为空表。线性表数据元素之间为线性关系,通俗讲就是“一个接一个的排列”。数组是线性表的一种存储结构。92.数组是一组相关的存储单元(存储结构)–相关的含义:这些存储单元位置相邻(一个接一个),可以容纳多个具有相同数据类型的数据元素(数据项),这些数据元素具有相同的名字,参见书P156的图6-1。-存储位置的相邻性体现了线性表数据元素之间的相邻性。6.2数组作为一种复杂数据类型数组名(数组中的所有元素具有相同的名字c)103.数据元素的访问–数组名[元素序号]。其中元素序号又称下标。–注意:第一个元素的序号为0,因此c[0]引用数组c的第一个元素。c[i-1]引用第i个元素。6.2数组作为一种复杂数据类型数组名元素下标114.下标运算符“[]”(数组操作)–在赋值语句右边时,该操作从数组元素中检索数据;例:x=c[1];//读取下标为1的数组元素的值,赋给变量x;–在左边时,指对数组元素的赋值。例:c[2]=x*3+5;//将赋值表达式右边的值赋给下标为2的数组元素6.2数组作为一种复杂数据类型126.1总结与回顾(数据类型与程序设计)6.2数组作为一种复杂数据类型6.3数组的声明、操作和使用6.3.1数组的声明6.3.2数组的初始化6.3.3数组逐元素操作6.3.4字符数组6.4数组作为函数参数的处理6.5数组的应用(排序、查找和应用)6.6多维数组提纲13一、数组的声明:(与变量声明相同)元素类型名数组名[整型常量表达式];元素类型名可以是整型、字符型、浮点型、结构和指针。常量表达式说明数组元素的个数,运算结果必须为整型。6.3.1数组的声明2000H2004H2002H2005H2007H2006H2003H2001Hscore[0]存储空间score[1]score[2]score[3]例如:main(){intscore[4];……}或者#defineSIZE4main(){intscore[SIZE];……}假设int类型数据为2字节•注意:定义数组的大小必须用整型常量或者整型常量表达式。下面定义是错误的,即使n在定义数组之前已经进行了初始化或者使用scanf语句读入了值。•inta[n];//n是个变量,错误141.数组中各元素的类型相同;2.数组元素的引用:数组名[下标],如score[0];3.下标必须是整数或者整数表达式。注意:表达式中的操作数可以是常量、变量、函数调用或表达式。4.C语言中数组下标从0开始,score[0]表示第1个数组元素,score[i]表示第i-1个数组元素(i是变量)。5.允许在同一个类型说明中,说明多个数组和多个变量。例如:intnum,students[150],score[4];但注意数组名不能和其他变量名相同。6.3.1数组的声明2002H2005H2007H2006H2003H2001Hscore[0]存储空间score[1]score[2]score[3]2000H2004H156.3.2数组的初始化二.数组的初始化C语言中可利用声明语句对数组元素的值进行初始化:元素类型名数组名[常量表达式]={值,值……值};例如:intscore[4]={65,78,54,91};数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。2000H2004H2002H2005H2007H2006H2003H2001Hscore[0]存储空间score[1]score[2]score[3]65785491166.3.2数组的初始化1.若在定义一个整型数组的同时赋初值,如果初始化值的个数小于数组元素的个数,剩余的元素被自动初始化为0。例如:intscore[4]={80};2000H2004H2002H2005H2007H2006H2003H2001Hscore[0]存储空间score[1]score[2]score[3]80000注意:整型数组各元素不会自动初始化为0,至少要把第一个数组元素初始化为0,才能使剩下的元素自动初始化为0。176.3.2数组的初始化2.若在定义一个浮点型数组的同时赋初值,如果初始化值的个数小于数组元素的个数,剩余的元素被自动初始化为0.000000。如:floatscore[4]={85.5};关于字符型数组后面再讲。186.3.2数组的初始化3.如果初始化元素个数大于数组长度,则编译会报错,例如:intscore[4]={65,78,54,91,60};4.如果在声明带有初始化值列表的数组时省略数组的大小,那么数组元素的个数就是初始化值列表中的元素个数。intscore[]={65,78,54,91,60};//score有5个元素196.3.3数组的逐元素操作•数组元素和普通的基本类型变量一样,对基本类型变量的所有操作(读、赋值、取地址等)同样适用于数组元素,基本变量能出现的地方数组元素也可以出现。•C语言规定数组元素不能整体引用,每次只能引用数组的一个元素。例如,不能用赋值运算对数组进行整体赋值。因为在C语言中,数组名具有特殊含义,它代表数组的首地址。inta[5];a={1,2,3,4,5};//错误20三、数组的逐元素操作:一般情况下(字符数组会有例外),无法对数组进行整体操作,例如整体赋值或者输出。要采用循环控制结构对数组的元素逐个进行操作和处理。例如:书P158图6-2数组的初始化处理链接图6-4设置数组元素的值链接图6-5计算数组元素的和链接请同学们结合具体算法并对照图6-1体会下标运算符的使用,以及数组元素的值和数组元素下标的区别。6.3.3数组的逐元素操作21图6-2数组的初始化处理#includestdio.hmain(){intn[10],i;for(i=0;i=9;i++)/*初始化数组*/n[i]=0;printf(“%s%13s\n”,“Element”,“Value”);//当输出字符串时,用%s控制*/for(i=0;i=9;i++)printf(%7d%13d\n,i,n[i]);system(pause);return0;}22图6-4设置数组元素的值#includestdio.h#defineSIZE10main(){ints[SIZE],j;for(j=0;j=SIZE-1;j++)/*设置数组元素的值*/s[j]=2+2*j;printf(%s%13s\n,Element,Value);for(j=0;j=SIZE-1;j++)/*打印数组元素的值*/printf(%7d%13d\n,j,s[j]);system(pause);return0;}定义常量SIZE,用于表示数组长度,便于程序的阅读和修改。注意书写习惯:常量名全部大写,变量名小写23图6-5计算数组元素的和#includestdio.h#defineSIZE10main(){inta[SIZE]={1,3,5,4,7,2,99,16,45,67,89,45};inti,total=0;for(i=0;i=SIZE-1;i++)/*数组元素求和*/total+=a[i];printf(Totalofarrayelementvaluesis:%d\n,total);system(pause);return0;}24读取并计算数组元素的和#includestdio.h#defineSIZE10main(){inta[SIZE],i,total=0;printf(input%dnumbers:,SIZE);for(i=0;i=SIZE-1;i++)/*循环控制逐元素读取*/scanf(“%d”,&a[i]);/*a[i]]表示第i+1个数组元素的地址*/for(i=0;i=SIZE-1;i++)/*数组元素求和*/total+=a[i];printf(Totalofarrayelementvaluesis:%d\n,total);system(pause);return0;}/*利用循环控制结构输入并建立数组*/25下面分析书中例子(见书161页图6-6)1.intresponse[RESPONSE_SIZE]存放40个学生的评分intfrequency[FREQUENCY_SIZE]存放1~10之间各种等级分值的统计票数2.response[answer]某个学生的评分值,取值为1~103.frequency[rating]某一分值的统计结果4.++frequency[response[answer]]根据某个学生的评分值将该分值的统计结果加1。5.为什么要将FREQUENCY_SIZE定义为11呢?“将数组的下标值与评分值对应”。使用frequency[1]~frequency[10]6.3.3数组的逐元素操作266.3.3数组的逐元素操作•注意:不要引用超出数组范围的数组元素。由于系统运行时不会自动检测元素下标是否越界,因此编写程序时要格外小心,由编程人员自己确保对元素的正确引用,以免因下标越界对其他存储单元中数据造成破坏。如:intscore[4]={65,78,54,91};printf(“%d”,score[4]);/*编译不会报错,但是输出结果是未知的*/2000H2004H2002H2005H2007H2006H2003H2001Hscore[0]存储空间score[1]score[2]score[3]65785491?2009H2008H27下面分析书中例子(见书163页图6-7)1.请注意for结构的循环嵌套2.printf(“%7d%13d”,i,n[i]);i表示数组的下标变量;n[i]表示数组元素的值3.嵌套内的循环for(j=1;j=n[i];j++),用n[i](数组n第i+1个元素的值)控制循环次数4.数组的逐元素处理(外层循环)6.3.3数组的逐元素操作286.3.3数组的逐元素操作•书163页图6-8掷骰子游戏的程序自己看。•练习1.定义一个能容纳10个
本文标题:c-chap6 数组
链接地址:https://www.777doc.com/doc-3404771 .html