C语言程序设计案例教程李培金第6章数组.ppt
《C语言程序设计案例教程李培金第6章数组.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计案例教程李培金第6章数组.ppt(79页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第6 6章章 数组数组 第第6章章 数组数组 6.1 数组的概念数组的概念 6.2 一维数组一维数组 6.3 二维数组二维数组 6.4 字符数组与字符串字符数组与字符串 第第6 6章章 数组数组 6.1 数数 组组 的的 概概 念念 数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。第第6 6章章 数组数组 如,全班40个学生成绩都是单精度类型,并且按照学号的顺序排列组合而成一个数组。为了区分不同的数组,每个数组用一个名字来表示,称为数组名。40个学生的成绩可表示为:a0,
2、a1,a39,用它们分别来存放第一个学生的成绩、第二个学生的成绩、第四十个学生的成绩。第第6 6章章 数组数组 数组有两个特点:(1)其长度是确定的,在定义的同时确定了其大小,在程序中不允许随机变动。(2)其元素必须是相同类型,不允许出现混合类型。第第6 6章章 数组数组 6.2 一一 维维 数数 组组6.2.1一维数组的定义【例6.1】已知全班40个学生的计算机基础课的考试成绩,求全班的平均成绩。第第6 6章章 数组数组#includemain()floata41;/*定义一个一维实型数组a*/floatsum=0,aver;inti;for(i=1;i=40;i+)scanf(%f,&ai
3、);for(i=1;i=40;i+)第第6 6章章 数组数组 sum+=a40;aver=sum/40;printf(全班平均成绩:%f,aver);在上例中,“floata41;”是一个一维数组的说明语句,说明数组名为a,它由41个元素组成,每个数组元素为单精度实型。任何一个数组在使用之前必须先定义。第第6 6章章 数组数组 一维数组的定义格式为例如:autointnum40;staticfloatscore40,average40;charch20;第第6 6章章 数组数组 说明:(1):如前面章节的有关规定,可以为auto,static,extern等。(2):说明了数组元素所属的数据类
4、型,可以为int,float,char等。(3):其命名规则和变量名相同,同样遵循标识符命名规则。第第6 6章章 数组数组 图6-1数组元素存储形式第第6 6章章 数组数组 (4):表示数组元素的个数,即数组长度。例如,b20表示b数组有20个元素,最小下标为0,最大下标为19,不能使用b20。常量表达式中只能是常量和符号常量,不允许使用变量。例如:intan;/*定义错误:常量表达式不能是变量n*/是错误的。(5)在说明一个数组后,系统会在内存中分配一片连续的存储空间用于存放数组元素,如说明语句“inta10;”,它在内存中的存放形式如图6-1所示,其下标取值范围是09。第第6 6章章 数组
5、数组 6.2.2一维数组的引用C语言规定只能逐个引用数组元素而不能一次引用整个数组。数组元素的引用形式为数组名下标表达式其中,“下标表达式”可以是整型常量、整型变量或整型表达式,其值均为非负数。例如,在说明语句“inta10;”中,a5表示数组中第6个数组元素;a2*4表示数组中第8个数组元素;ai(0i10)表示数组中第i个数组元素。第第6 6章章 数组数组 【例6.2】求数组中最大值和最小值。程序如下:#includemain()inta10;inti,max,min;printf(请输入10个整数:);for(i=0;i10;i+)scanf(%d,&ai);第第6 6章章 数组数组 m
6、ax=min=a0;for(i=1;i10;i+)if(aimax)max=ai;printf(最大数为%d,max);printf(最小数为%d,min);第第6 6章章 数组数组 6.2.3一维数组的初始化在定义数组元素时,系统为其分配了一定的存储空间,所有的存储空间的赋初始值可以在程序运行之前,即在编译阶段进行,也可在运行期间,用赋值语句或输入语句使数组中元素得到初始值。第第6 6章章 数组数组 1在编译阶段赋初值(1)对全部数组元素赋初值。例如:staticinta6=1,2,3,4,5,6;其中,数组元素的个数和花括号中初值的个数是相同的,并且花括号中的初值从左到右依次赋给每个数组元
7、素,即a0=1,a1=2,a2=3,a3=4,a4=5,a5=6。第第6 6章章 数组数组 (2)只给一部分元素赋初值。例如:staticinta10=0,1,2,3,4;此语句定义a数组有10个元素,但花括号中只提供了5个初值,表示只给前5个数组元素a0a4赋初值,后面5个元素a5a9系统自动赋0。第第6 6章章 数组数组 (3)给数组全部元素赋初值时,可以省略数组长度。例如:inta=10,20,30,40,50;省略数组长度时,系统将根据赋初值的个数确定数组长度。上述大括号内共有5个初值,说明数组a的元素个数为5,即数组长度为5。第第6 6章章 数组数组 2在运行阶段赋初值举例如下:in
8、ta10;inti;for(i=0;i10;i+)scanf(%d,&ai);第第6 6章章 数组数组 6.2.4一维数组应用举例【例6.3】用数组的方法求Fibonacci数列。程序如下:#includemain()inti;staticintf20=1,1;for(i=2;i20;i+)第第6 6章章 数组数组 fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,fi);第第6 6章章 数组数组 运行结果如下:11235813213455891442333776109871597258441816765第第6 6章章 数组数
9、组 【例6.4】用昌泡法对10个数按由小到大的顺序排序。分析:昌泡法排序又称为交换排序。基本思想是:从最后一个元素开始,两两相邻元素比较,将较小的元素交换到前面,直到把最小元素交换到最前面为止。排序过程如下:第第6 6章章 数组数组 原始状态7410120539第一次比较结果7410120539第二次比较结果7410120359第三次比较结果7410132059第四次比较结果7410132059第五次比较结果7411032059第六次比较结果7141032059第七次比较结果1741032059第第6 6章章 数组数组 经上述过程完成对8个数的第一轮比较,比较结果将最小数1交换到最前面。然后,
10、以同样的方式完成对其余7个数的第二轮比较,比较结果将最小数3交换到前面。以此类推,经七轮比较,最后完成对8个数由小到大的全部排序。各轮比较结果如下:第第6 6章章 数组数组 第一轮结果:1741032059第二轮结果:1374105209第三轮结果:1347105209第四轮结果:1345710209第五轮结果:1345710209第六轮结果:1345791020第七轮结果:1345791020结束状态:1345791020第第6 6章章 数组数组 图6-2昌泡法排序流程图第第6 6章章 数组数组 昌泡法排序的流程图如图6-2所示,其源程序如下:#definen8main()inti,j,t;
11、intan=7,4,10,1,20,5,3,9;for(i=0;ii;j-)/*控制每轮比较次数*/if(aj-1aj)/*进行交换的条件*/第第6 6章章 数组数组 t=aj-1;aj-1=aj;aj=t;printf(排序结果为:);for(i=0;in;i+)printf(%d,ai);运行结果如下:排序结果为:1345791020第第6 6章章 数组数组 6.3 二二 维维 数数 组组引例:全班40个学生,每人有四门功课:高数、计算机、英语、政治的成绩,现求成绩最高的三个学生的成绩。对于这样一个问题,若用一维数组描述,就要用到四个数组。这种表示方法不能很好地反映它们之间的密切关系,因此
12、引入了二维数组来表示。第第6 6章章 数组数组 6.3.1二维数组的定义二维数组的定义格式:例如:inta25;二维数组的说明和一维数组的说明形式基本相同,只不过它的有两个,第一个表示二维数组的行数,第二个表示二维数组的列数。第第6 6章章 数组数组 在C语言中,把二维数组看成一个数组的数组,即可以把二维数组看作是一个特殊的一维数组,该一维数组的每个数据元素也是一个一维数组。二维数组在内存中的存放顺序是按行存放,即先存放第一行的元素,再存放第二行的元素。第第6 6章章 数组数组 6.3.2二维数组的引用二维数组元素的引用的一般形式为数组名下标表达式1下标表达式2引用二维数组元素的下标表达式的值
13、只能取0到定义数组时所规定的下标上界之间的整数。即行下标的取值范围是0下标表达式1-1,列下标的取值范围是0下标表达式2-1。例如:inta35;这个二维数组的最小下标的元素是a00,最大下标的元素是a24。第第6 6章章 数组数组 【例6.5】通过键盘给2*3的二维数组输入数据,第一行赋1、3、5,第二行赋2、4、6,然后按行输出此二维数组。程序如下:第第6 6章章 数组数组#includemain()inta23,i,j;printf(Enterdatabyline:n);for(i=0;i2;i+)for(j=0;j3;j+)scanf(%d,&aij);第第6 6章章 数组数组 pri
14、ntf(Outputaarray:n);for(j=0;j2;j+)for(i=0;i3;i+)printf(%4d,aij);printf(n);第第6 6章章 数组数组 6.3.3二维数组的初始化二维数组同样存在初始化的问题。二维数组的初始化有以下四种形式:(1)按行依次对二维数组赋初值。例如:staticinta34=1,2,3,4,5,6,7,8,9,10,11,12;(2)将所有数据写在一个花括号内,按数组排列顺序对各数组元素赋初值。例如:staticinta34=1,2,3,4,5,6,7,8,9,10,11,12;(3)同一维数组一样,可以对部分元素显式赋初值。例如:static
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计案例教程 李培金第6章 数组 语言程序设计 案例 教程 李培金第
限制150内