资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,1,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,*,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,1.掌握一维数组的定义,数组元素的援用方法。,2.掌握二维数组的定义,数组元素的援用,了解二维数组的实践意义。,3.掌握字符数组与字符串的概念与定义方法,熟习常用的字符串处置函数。,4.掌握运用数组进展运用程序的设计的普通方法。,教 学 要 求,第6章 数组,6.2 一维数组,6.1 概述,6.3 二维数组,结,束,6.4 字符数组和字符串,6.6 实例,6.7 小结,6.5 数组作为函数的参数,教 学 内 容,6.1 数组概述,2.1 数组概述(P105),编写程序的目的是处置数据,前面我们曾经提到,描画程序要处置的数据是程序设计很重要的一个方面。由程序处置的数据能够很简单,也能够很复杂,为了描画各种各样不同的数据,要求言语系统有足够的数据表示才干。和大多数高级言语一样,C言语也采用了下面的数据机制:,把言语要处置的数据对象划分为一些类型,每个类型是一个数据值的集合。,提供一组根本数据类型,确定书写方式和一组相关根本操作,以支持程序中对根本数据对象的表示和运用。,提供一组由简单数据类型、数据对象构造更加复杂的数据类型、数据对象的手段,以满足程序中处置复杂数据的要求。,下页,6.1 数组概述,C 言语的根本类型包括整型、实型和字符类型,本课程的第2章引见了C言语根本数据类型的表示和运算方面的问题。C言语的构造类型包括数组、构造和公用体,还有用于数据组织的重要机制“指针。,利用C言语的数据构造技术,可以把多个根本类型的数据或不是根本类型的数据组成一个整体在程序中运用,这样能更贴切地描画现实问题中的数据。由这种构造技术产生的数据类型和数据对象是复合数据类型和复合数据对象。对象的各个组成部分称为“元素、“成员和“成分等。同样,复合数据类型和复合数据对象都有名字,同时C言语还提供访问复合对象成分的操作机制。,下页,6.1 数组概述,数组是 C 言语对一组一样性质数据的顺序存储管理机制;利用数组可把多个具有一样类型的数据对象组合在一同并作为一个整体来管理,这些数据对象称为数组的元素。C 言语中用 a0、a1 的方式表示数组元素,方括号内的整型数称为数组的下标。运用下标和数组名可以用同一方式处置一批或一切数组元素,也可处置个别元素。,数组是最简单的构造类型,但是非常有用,许多问题不用数组几乎难以处理。,本章引见一维和二维数组的定义、数组元素援用、字符数组。字符串和数组运用的根本算法。,构造数据类型之一,数组:有序数据的集合,用数组名标识,元素:属同一数据类型,用数组名和下标确定,6.2 一维数组,6.2 一维数组,一维数组的定义,什么是一维数组,数组的维数是指数组运用的下标个数,假设数组中每个元素只带有一个下标,称为一维数组。,一维数组的定义方式,类型阐明符 数组名常量表达式;,阐明,类型阐明符指出数组元素的数据类型;,数组名是标识符;,常量表达式必需用方括号括起来,指的是数组的元素个数(长度),它是一个整型值,其中可包含常数和符号常量。,下页,括号中不需求有元素个数,由于实践上 C 系统都把它们处置成 int*指针方式,与元素个数无关。,调用方式:strlen(s);,re=find(str,s),z=x;x=y;y=z;,运用下标和数组名可以用同一方式处置一批或一切数组元素,也可处置个别元素。,int i,k=1,aM;,printf(n Enter Numbers:);scanf(%d,类型阐明符指出数组元素的数据类型;,4 字符数组和字符串,字符数组和字符串实例,return i;,while(s2i!=0)s1i=s2i;i+;,包括数组定义、数组类型、数组维数、数组存储、数组元素和数组下标概念、数组阐明、初始化方法、数组元素下标的范围、正确援用数组中的元素、数组元素的输入和输出方法、多维数组元素的陈列方法和初始化等问题。,re=find(str,s),556=5 8 85 86,作用 二维数组定义时也可以用花括号对全部或前面一部分数组元素进展初始化。,6.2 一维数组,不能用变量定义数组维数,例:int n=10;,int an;,C 言语规定,数组变量的大小是固定不变的,因此需求在定义时规定元素类型和元素个数。,与普通变量一样,可以在一个定义语句中定义多个数组。例如:int a10,b5,c;,一维数组的存储,意义 掌握一维数组在内存中的存储方式,有利于了解数组机制和数组元素的性质。,存储 系统定义数组时,根据定义语句中的空间需求分配足够的延续存储空间,数组元素顺序存放在这些存储单元中。下标为 0 的元素排在最前面,每个元素占据的存储空间完全一样。,下页,6.2 一维数组,数组空间开销计算 有两种计算方法。,存储容量=元素个数sizeof(元素类型名),存储容量=sizeof(数组名),数组名的本质 是数据组的内存起始地址。可以把数组名看作是一个表示存储地址的常量。,例如:假设 a 是已有定义的整型数组名,scanf(%d,a);将读入的一个整型数赋给 a 所表示的存储单元,该整型数正好是数组 a 的第一个数组元素的地址。(不能用 scanf(%d,实例 int a5,数组名表示内存首地址,是地址常量,下页,a,0,a0,1,a1,2,a2,3,a3,4,a4,编译时分配延续内存,内存字节数=元素个数*sizeof(元素类型),6.2 一维数组,一维数组的援用,数组元素表示方式:数组名下标,其中:下标可以是常量或整型表达式,阐明,数组必需先定义,后运用,只能逐个援用数组元素,不能整体援用,下标是元素相对于数组起始地址的偏移量,所以从 0(下界)开场顺序编号。最后一个元素的下标(上界)值为数组元素个数减一。,留意:元素的下标和元素在数组中的序号的关系,如 Ai 表示数组 A 的第 i+1 个元素。,留意:C 言语系统并不自动检查数组的下标能否越界,对下标的控制由编称者完成。,例:int data5;,data5=10;,下页,6.2 一维数组,援用数组元素的本质是将数组元素看作简单变量。数组元素可以作为定义类型的变量参与表达式计算和变量操作(援用和赋值)。,只能逐个援用数组元素,不能整体援用。,一维数组初始化,概念 在定义数组时,为数组元素赋初值,(在编译阶段使之得到初值),阐明,存储在动态存储区中的(部分)数组不初始化,其元素值为随机数,存储在静态存储区中(static、全局)数组元素不赋初值,系统会自动赋以 0 值,可以只给部分数组元素赋初值,全部数组元素赋初值时,可不指定数组长度,int a6=1,2,3,4,5;,等价于:a0=1;a1=2;a2=3;,a3=4;a4=5;a5=6;,static int a6,等价于:a0=0;a1=0;a2=0;,a3=0;a4=0;a5=0;,int a6=1,2,等价于:a0=1;a1=2;a2=0;,a3=0;a4=0;a5=0;,int a3=1,2,3,4,int a=1,2,3,4,5,6,下页,6.2 一维数组,一维数组实例,【例6.2】求一组成果的平均分数,设给定的数据是 87,90,85,98,65,80,74,67。,分析:思索用数组表示这组成果,虽然给出的数据全是整数值,但思索作为成果及能够需求进展的运算,运用实型数更适宜。本例运用数组定义时初始化的方式来表示要计算的数据,其次,为添加程序的通用性,思索让程序自动判别数据值的个数,用于循环终了的控制条件。,程序:,下页,#include,main(),int i,num;,float score =,87,90,85,98,65,80,74,67,float sum=0.0;,num=sizeof(score)/sizeof(float);,for(i=0;inum;i+),sum+=scorei;,printf(Average:%.1f n,sum/num);,运转结果:,Average:80.8,6.2 一维数组,【例6.3】编写程序。将前15 个奇数按每行 5个的格式正序和反序输出。,分析:本例用循环构造控制数组的方法顺序或逆序地逐个援用数组元素的操作,实现换行动作的控制。,程序:,下页,#include,#define M 15,main(),int i,k=1,aM;,for(i=0;iM;i+,k+=2)ai=k;,printf(Sequence Output:n);,for(i=0;i0;i-),printf(%4d,ai);,if(i%5=0)printf(n);,运转结果:,Sequence Output:,1 3 5 7 9,11 13 15 17 19,21 23 25 27 29,Invert Output:,29 27 25 23 21,19 17 15 13 11,9 7 5 3 1,6.2 一维数组,【例6.4】编写程序,输入一组整数,将它们排序后由小到大输出。,分析:我们运用大家熟习的冒泡方法来完成排序的操作。它的思绪很简单,将相邻两个数组元素进展比较,将小的调整到前面。,排序过程:,比较第一个数与第二个数,假设为逆序 a0a1,那么交换;然后比较第二个数与第三个数;依次类推,直至第 n-1个数和第n个数比较为止 第一趟冒泡排序,结果最大的数被安顿在最后一个元素位置上,对前 n-1 个数进展第二趟冒泡排序,结果使次大的数被安顿在 第 n-1个元素位置,反复上述过程,经n-1趟冒泡排序后,排序终了,下页,scanf(%s,str);/*str 是地址*/,for (sum=0.,分析:思索用数组表示这组成果,虽然给出的数据全是整数值,但思索作为成果及能够需求进展的运算,运用实型数更适宜。,s1 s2,函数值前往负数。,掌握一维数组的定义,数组元素的援用方法。,定义中除了运用两个方括号和常量表达式外,与一维数组的要求一样。,int change=1,t,i,j;,0,j=1;j=i;j+),问题:从字符串对 str 中查找子串 s,找到那么报告第一个字符的位置;找不到,打印信息。,0,i=0;iN;i+),int i,num;,包括数组名作函数参数,数组元素作函数参数,在函数中运用全局数组。,如比较字符c1 和 c2,假设 c1=c2 为真,结果为 0;,掌握字符数组与字符串的概念与定义方法,熟习常用的字符串处置函数。,字符数组的援用 字符数组的逐个字符援用,与援用数值数组元素类似。,6.2 一维数组,算法举例,23,77,14,89,06,68,23,14,77,06,68,第一趟,第二趟,14,23,06,68,第三趟,第四趟,14,06,23,第五趟,06,14,下页,6.2 一维数组,程序:,#include,main(),int a50,num,i,j,t,change=1;,printf(n Enter Numbers:);scanf(%d,printf(n Enter Date:);,for(i=0;i 0 i-),change=0;,for(j=0;j aj+1),t=aj;aj=aj+1;aj+1=t;change=1;,printf(n Sorted Date:);,for(i=0;inum;i+)printf(%d,ai);,运转结果:,Enter Numbers:6,Enter Date:23 77 14 89 6 68,Sorted Date:6 14 23 68 77 89,6.3 二维数组,6.3 二维数组(P110),二维数组的
展开阅读全文