资源描述:
《C语言课件第七章数组》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章数组前面各章所使用的数据都属于基本数据类型(整型、实型、字符型),C语言除了提供基本数据类型外,还提供了构造类型的数据,它们是数组类型、结构体类型、共同体类型等。构造数据类型是由基本数据类型的数据按照一定的规则组成,所以也称为“导出类型”。下面简单介绍一下数组概念:1、数组:一组具有相同数据类型的数据的有序的集合。2、数组元素:数组中的元素。数组中的每一个数组元素具有相同的名称,不同的下标,可以作为单个变量使用。在定义一个数组后,在内存中使用一片连续的空间依次存放数组的各个元素。3、数组的下标:是数组元素的位置的一个索引或指示。4、数组的维数:
2、数组元素下标的个数。根据数组的维数可以将数组分为一维、二维、三维、多维数组。7.1一维数组的定义和使用7.1.1 一维数组的定义(先定义后使用)定义方式:类型说明符数组名[整型常量表达式]例、inta[10];定义一个数组,数组名a,有10个元素,每个元素的类型均为int。这10个元素分别是:a[0]、a[1]、a[2]、a[3]、a[4]、....、a[8]、a[9]。注意:(1)C语言中,数组下标从0开始.(2)C语言不允许对数组的大小做动态定义,如:intn;scanf("%d",&n);inta[n];因为在编译时,C编译器根据已知数组大小分
3、配内存空间。说明:(1)数组名:按标识符规则。本例a就是数组名。(2)整型常量表达式:表示数组元素个数(数组的长度)。可以是整型常量或符号常量,不允许用变量。整型常量表达式在说明数组元素个数的同时也确定了数组元素下标的范围,下标从0开始~整型常量表达式-1(注意不是1~整型常量表达式)。C语言不检查数组下标越界,但是使用时,一般不能越界使用,否则结果难以预料。本例数组元素个数是10个,下标从0-9。(3)类型说明:指的是数据元素的类型。类型说明确定了每个数据占用的内存字节数。比如整型2字节,实型4字节,双精度8字节,字符1字节。本例数组元素是整型,每
4、个元素占2个字节,因为有10个数组元素,所以占用20字节。(4)C编译程序为数组分配了一片连续的空间。(5)C语言还规定,数组名是数组的首地址。即a=&a[0]数组必须先定义后使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。数组元素的表示形式:数组名[下标表达式]下标可以是整型常量或整型表达式。如:a[0]=a[5]+a[7]-a[2*3]1个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。7.1.2一维数组元素的引用[例]使数组元素a[0]~a[9]的值为0~9,然后逆序输出。main(
5、){inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%d",a[i]);}运行输出: 9876543210初始化格式:数据类型数组名[常量表达式]={初值表}初始化:在定义时指定初始值,编译器把初值赋给数组变量。赋值:使用赋值语句,在程序运行时把值赋给数组变量,如a[0]=2。1、一般初始化,例:inta[10]={0,1,2,3,4,5,6,7,8,9}intarray[10]={1,2,3,4,5,6,7,8,9,10};7.1.3一维数组的初始化2、部分元素初始化,其余元素
6、均为零。例:inta[10]={0,1,2,3,4};仅前5个元素赋初值,后5个元素未指定初值。3、全部元素均初始化为0,不允许简写。inta[10]={0,0,0,0,0,0,0,0,0,0};或:inta[10]={0};不能简写为:inta[10]={0*10};4、如果全部元素均指定初值,定义中可以省略元素的个数,例、inta[5]={1,2,3,4,5};可以写为:inta[]={1,2,3,4,5};[例]输入10个数,用“冒泡法”对10个数排序(由小到大)。冒泡法的基本思想:通过相邻两个数之间的比较和交换,使(数值)较小的数逐渐从底部移
7、向顶部,较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。“冒泡法”算法:以六个数9、8、5、4、2、0为例。第1趟比较(下图1)第2趟比较(下图2)7.1.4一维数组程序举例第1趟比较后,剩5个数未排好序;两两比较5次第2趟比较后,剩4个数未排好序;两两比较4次第3趟比较后,剩3个数未排好序;两两比较3次第4趟比较后,剩2个数未排好序;两两比较2次第5趟比较后,全部排好序;两两比较1次算法结论:对于n个数的排序,需进行n-1趟比较,第j趟比较需进行n-j次两两比较。程序流程图:(用两层嵌套循环实现)程序:设需排序的数有10个,定义
8、数组大小为11,使用a[1]~a[10]存放10个数,a[0]不用。main(){inta[11];/*用a