C语言程序设计7_第1页
C语言程序设计7_第2页
C语言程序设计7_第3页
C语言程序设计7_第4页
C语言程序设计7_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 C语言程序设计 第七章第七章 数组数组1第七章第七章 数数 组组本章内容本章内容1.数组概述数组概述2.一维数组的定义和引用一维数组的定义和引用3.二维数组的定义和引用二维数组的定义和引用4.字符数组的定义和引用字符数组的定义和引用 C语言程序设计 第七章第七章 数组数组2概概 述述 在程序设计中,为了处理方便,在程序设计中,为了处理方便, 把具有相同类把具有相同类型的若干变量按有序的形式组织起来。这些按序排列型的若干变量按有序的形式组织起来。这些按序排列的的同类数据同类数据元素的集合称为元素的集合称为数组数组。在语言中,。在语言中, 数数组属于构造数据类型。一个数组可以分解为多个数组组属于

2、构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为型。因此按数组元素的类型不同,数组又可分为数值数值数组、字符数组、指针数组、结构数组数组、字符数组、指针数组、结构数组等各种类别。等各种类别。 C语言程序设计 第七章第七章 数组数组37.1 一维数组的定义和引用一维数组的定义和引用一、一维数组定义一、一维数组定义一般形式为:一般形式为: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式,; 其中,其中,类型说明符类型说明符是任一种基本数据类型或构造数据类型,是任一

3、种基本数据类型或构造数据类型, 数组名数组名是用户定义的数组标识符;是用户定义的数组标识符; 方括号中的方括号中的常量表达式常量表达式表示表示数据元素的个数,也称为数组的长度。数据元素的个数,也称为数组的长度。例如:例如: int a10; 说明整型数组说明整型数组a,有,有10个元素。个元素。 float b10,c20; 说明实型数组说明实型数组b,有,有10个元素,实型数组个元素,实型数组c,有,有20个元素。个元素。 char ch20; 说明字符数组说明字符数组ch,有,有20个元素。个元素。 C语言程序设计 第七章第七章 数组数组4说明:说明: 1.C语言中规定数组的下标从语言中规

4、定数组的下标从0开始,开始,方括号中常量表达式方括号中常量表达式表示数组元素的个数。表示数组元素的个数。 例如:例如:int a5 表示数组表示数组a有有5个元素。因下标从个元素。因下标从0开始计算。开始计算。因此因此5个元素分别为个元素分别为a0,a1,a2,a3,a4。 2. 数组的类型实际上是指数组元素的取值类型数组的类型实际上是指数组元素的取值类型。对于同一。对于同一个数组,其所有元素的数据类型都是相同的。个数组,其所有元素的数据类型都是相同的。 3. 数组名的书写规则应符合标识符的书写规定。数组名的书写规则应符合标识符的书写规定。 4. 数组名不能与其它变量名相同数组名不能与其它变量

5、名相同,例如:,例如: void main() int a; float a10; 是错误的。是错误的。 C语言程序设计 第七章第七章 数组数组55.不能在方括号中用变量来表示元素的个数不能在方括号中用变量来表示元素的个数, 但是可以是但是可以是符号常数或常量表达式。例如:符号常数或常量表达式。例如: #define FD 5main() int a3+2,b7+FD; 是合法的。但是下述说明方式是错误的。是合法的。但是下述说明方式是错误的。main() int n=5; int an; 6.允许在同一个类型说明中,说明多个数组和多个变量允许在同一个类型说明中,说明多个数组和多个变量。 例如:

6、例如: int a,b,c,d,k110,k220;数组元素的表示方法数组元素的表示方法 C语言程序设计 第七章第七章 数组数组6二、数组元素的引用二、数组元素的引用 数组元素是组成数组的基本单元。数组元素也是一种变数组元素是组成数组的基本单元。数组元素也是一种变量,量, 其标识方法为数组名后跟一个下标,其标识方法为数组名后跟一个下标, 下标表示了元素在下标表示了元素在数组中的顺序数组中的顺序号。号。 数组元素一般引用形式为:数组元素一般引用形式为: 数组名数组名下标下标 其中的其中的下标下标只能为只能为整型整型常量或整型表达式。若为小数时,常量或整型表达式。若为小数时,C编译将编译将自动取整

7、自动取整。 例如,例如,a5,ai+j,ai+都是合法的数组元素。都是合法的数组元素。 注意:注意:在语言中只能通过下标变量使用数组元素,而不在语言中只能通过下标变量使用数组元素,而不能一次引用整个数组。能一次引用整个数组。 例如,输出有例如,输出有10 个元素的数组必须使用循环语句逐个输出个元素的数组必须使用循环语句逐个输出各下标变量:各下标变量: for(i=0; i10; i+) printf(%d,ai); 而不能用一个语句输出整个数组,下而不能用一个语句输出整个数组,下面的写法是错误的:面的写法是错误的: printf(%d,a); C语言程序设计 第七章第七章 数组数组7例 7.1

8、 数组元素的引用. #include void main() int i,a10;for(i=0;i=0;i-)printf(%d ,ai);printf(n); C语言程序设计 第七章第七章 数组数组8三、数组初始化赋值三、数组初始化赋值 数组初始化赋值是指数组初始化赋值是指在数组说明时给数组元素赋予初值在数组说明时给数组元素赋予初值。 数组初始化是在编译阶段进行的。这样将减少运行时间,提高效数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。率。 数组初始化的一般形式为:数组初始化的一般形式为: 类型说明符类型说明符 数组名数组名常量表达式常量表达式=值,值值,值值值; 其中其中:

9、 在在 中的各数据值即为各元素的初值,中的各数据值即为各元素的初值, 各值各值之间用逗之间用逗号间隔。号间隔。 例如:例如: int a10= 0,1,2,3,4,5,6,7,8,9 ; 相当于相当于a0=0; a1=1;. a9=9; C语言程序设计 第七章第七章 数组数组9语言对数组的初始赋值的几点规定:语言对数组的初始赋值的几点规定: 1.可以只给部分元素赋初值。当可以只给部分元素赋初值。当 中值的个数少于元素个数中值的个数少于元素个数时,只给前面部分元素赋值。时,只给前面部分元素赋值。 例如:例如: int a10=0,1,2,3,4; 表示只给表示只给a0a45个元素赋值,个元素赋值

10、,而后而后5个元素自动赋个元素自动赋0值。值。 2.当当 中值的个数多于元素个数时,中值的个数多于元素个数时, 系统出错。系统出错。 3.只能给元素逐个赋值,不能给数组整体赋值。只能给元素逐个赋值,不能给数组整体赋值。 例如给十个元素全部赋例如给十个元素全部赋1值,只能写为:值,只能写为: int a10=1,1,1,1,1,1,1,1,1,1; 而不能写为:而不能写为: int a10=1; 4.如给全部元素赋值,则在数组说明中,如给全部元素赋值,则在数组说明中, 可以不给出数组元可以不给出数组元素的个数。例如:素的个数。例如: int a5=1,2,3,4,5; 可写为:可写为: int

11、a=1,2,3,4,5; C语言程序设计 第七章第七章 数组数组10四、一维数组程序举例四、一维数组程序举例1.例例 7.2 用数组来处理求用数组来处理求Fibonacci数列问题数列问题.main() int i;int f40=1,1;for(i=2;i40;i+) fi=fi-2+fi-1;for(i=0;i40;i+)if(i%5=0)printf(n);printf(%12d ,fi);printf(n); C语言程序设计 第七章第七章 数组数组11四、一维数组程序举例四、一维数组程序举例2.选择法排序选择法排序选择法排序选择法排序算法思想:算法思想: 1)对有)对有n个数的序列(存

12、放在数组个数的序列(存放在数组an中),从中选出中),从中选出最小(升序)最小(升序)或最大(降序)的数,与第或最大(降序)的数,与第1个数交换位置;个数交换位置; 2)除第)除第1 个数外,其余个数外,其余n-1个数中选个数中选最小最小或最大的数,与或最大的数,与第第2个数交换位置;个数交换位置; 3)依次类推,选择了)依次类推,选择了n-1次后,这个数列已按次后,这个数列已按升序升序排列。排列。 C语言程序设计 第七章第七章 数组数组12main() int i,j,p,s,a10; printf(n input 10 numbers:n); for(i=0;i10;i+) scanf(%

13、d,&ai); for(i=0;i9;i+) p=i; for(j=i+1;jaj) p=j; if(i!=p) s=ai; ai=ap; ap=s; for(i=0;i=9;i+) printf(%d,ai); C语言程序设计 第七章第七章 数组数组132、起泡法排序、起泡法排序例例 7.3 教材教材Pg.134135 C语言程序设计 第七章第七章 数组数组14冒泡法排序(递增)冒泡法排序(递增) 算法思想:算法思想:(将相邻两个数比较,小的调到前头将相邻两个数比较,小的调到前头) 1)有)有n个数(存放在数组个数(存放在数组an中),第一趟将中),第一趟将每相邻两个数比较,每相邻两

14、个数比较,小的调到前头小的调到前头,经,经n-1次两两次两两相邻比较后,最大的数已相邻比较后,最大的数已“沉底沉底”,放在最后一,放在最后一个位置,个位置,小数上升小数上升“浮起浮起”; 2)第二趟对余下的)第二趟对余下的n-1个数(最大的数已个数(最大的数已“沉沉底底”)按上法比较,经)按上法比较,经n-2次两两相邻比较后得次次两两相邻比较后得次大的数;大的数; 3)依次类推,)依次类推,n个数共进行个数共进行n-1趟比较,在第趟比较,在第j趟中要进行趟中要进行n-j次两两比较。次两两比较。 C语言程序设计 第七章第七章 数组数组15main() int a10; int i,j,t; pr

15、intf(n input 10 numbers:n); for(i=0;i10;i+) scanf(%d,&ai); for(j=0;j9;j+) for(i=0;iai+1) t=ai; ai=ai+1; ai+1=t; printf(“the sorted number:n”); for(i=0;i10;i+) printf(%d,ai); C语言程序设计 第七章第七章 数组数组16输入输入10个数,求平均值及高于平均值的数个数,求平均值及高于平均值的数main() int i; float x10,average=0; for(i=0;i10;i+) scanf(%f,&

16、xi); average+=xi; average/=10; printf(%8.2fn,average); for(i=0;iaverage; printf(%8.2f ,xi); C语言程序设计 第七章第七章 数组数组177.2 二维数组二维数组 一、二维数组类型说明一、二维数组类型说明 二维数组说明的一般形式是:二维数组说明的一般形式是: 类型说明符类型说明符 数组名数组名常量表达式常量表达式1常量表达式常量表达式2 ; 其中常量表达式其中常量表达式1表示第一维下标的长度,常量表达式表示第一维下标的长度,常量表达式2 表示表示第第二维下标的长度。二维下标的长度。 例如:例如: int a

17、34; 定义了一个定义了一个3行行4列的数组,数组名为列的数组,数组名为a,其下标变量的类,其下标变量的类型为整型。该数组的下标变量共有型为整型。该数组的下标变量共有34个,即:个,即: a00, a01, a02, a03 a10, a11, a12, a13 a20, a21, a22, a23 C语言程序设计 第七章第七章 数组数组18 从从C语言二维数组的定义可以看出,语言二维数组的定义可以看出,一个二维数组也可以一个二维数组也可以分解为多个一维数组。分解为多个一维数组。 语言允许这种分解,有二维数组语言允许这种分解,有二维数组a 3 4 , 可 分 解 为 三 个 一 维 数 组 ,

18、 其 数 组 名 分 别 为, 可 分 解 为 三 个 一 维 数 组 , 其 数 组 名 分 别 为a0,a1,a2。对这三个一维数组不需另作说明即可使用。这。对这三个一维数组不需另作说明即可使用。这三个一维数组都有三个一维数组都有4个元素,例如:一维数组个元素,例如:一维数组a0的元素为的元素为a00,a01,a02,a03。即:即: a00, a01, a02, a03 a10, a11, a12, a13 a20, a21, a22, a23 注意:数组在内存中是连续存放的,在语言中,二维数注意:数组在内存中是连续存放的,在语言中,二维数组是组是按行排列按行排列的,即的,即按行顺次存放

19、按行顺次存放,先存放,先存放a0行,再存放行,再存放a1行,最后存放行,最后存放a2行。每行中有四个元素也是依次存放。由于行。每行中有四个元素也是依次存放。由于数组数组a说明为说明为int类型,该类型占两个字节的内存空间,所以每类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。个元素均占有两个字节。 C语言程序设计 第七章第七章 数组数组19a010000内存地址内存地址 数组单元数组单元10002数组数组a10 的内存映像的内存映像a1a00 10000内存地址内存地址 数组单元数组单元 10002数组数组a34 的内存映像的内存映像a01100041000610008 a02

20、a03a10 C语言程序设计 第七章第七章 数组数组20二、二维数组元素的引用二、二维数组元素的引用 二维数组的元素的引用形式为:二维数组的元素的引用形式为: 数组名数组名下标下标下标下标 其中下标应为整型常量或整型表达式。其中下标应为整型常量或整型表达式。 例如:例如:a34表示表示a数组三行四列的元素。下标变量和数数组三行四列的元素。下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。组说明在形式中有些相似,但这两者具有完全不同的含义。 数组说明的方括号中给出的是某一维的长度;数组说明的方括号中给出的是某一维的长度; 而数组元素中而数组元素中的下标是该元素在数组中的位置标识。前

21、者只能是常量,的下标是该元素在数组中的位置标识。前者只能是常量, 后后者可以是者可以是常量,变量或表达式。常量,变量或表达式。 例如:例如: int a34; a23=10; a12=2*a23 C语言程序设计 第七章第七章 数组数组21三、二维数组的初始化三、二维数组的初始化 二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组初始化也是在类型说明时给各下标变量赋以初值。 二维数组可二维数组可按行分段赋值按行分段赋值,也可,也可按行连续赋值按行连续赋值。 1.按行分段赋值可写为按行分段赋值可写为int a53=80,75,92,61,65,71,59,63,70,85,87,90,7

22、6,77,85; 2.按行连续赋值可写为按行连续赋值可写为 int a53= 80,75,92,61,65,71,59,63,70,85,87, 90,76,77,85 ; 这两种赋初值的结果是完全相同的。这两种赋初值的结果是完全相同的。 C语言程序设计 第七章第七章 数组数组22二维数组初始化赋值说明二维数组初始化赋值说明: 1.可以只对部分元素赋初值,未赋初值的元可以只对部分元素赋初值,未赋初值的元素自动取素自动取0值。值。 例如:例如: int a33=1,2,3; 是对每一是对每一行的第一列元素赋值,未赋值的元素取行的第一列元素赋值,未赋值的元素取0值。值。 1 0 0 2 0 0 3

23、 0 0 1 0 0 0 2 0 0 0 3 2.如对全部元素赋初值,则第一维的长度可以不给出。如对全部元素赋初值,则第一维的长度可以不给出。 例如:例如: int a33=1,2,3,4,5,6,7,8,9; 可以写为:可以写为: int a3=1,2,3,4,5,6,7,8,9; 而:而: int a 33=0,1,0,2,0,0,0,3; 赋值后的元素如右图赋值后的元素如右图 C语言程序设计 第七章第七章 数组数组23四、二维数组程序举例四、二维数组程序举例例例7.4 教材教材Pg.138 1 2 3 4 5 6 1 4 2 5 3 6main() int a23=1,2,3,4,5,6

24、; int b32,i,j; for(i=0;i2;i+)for(j=0;j3;j+)printf(%5d,aij);bji=aij; printf(n); for(i=0;i3;i+)for(j=0;j2;j+) printf(%5d,bij);printf(n); C语言程序设计 第七章第七章 数组数组24四、二维数组程序举例四、二维数组程序举例例例7.5 教材教材Pg.139main() int i,j,row=0,colum=0,max; int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00; for(i=0;i3;i+) for(j=0;jmax)

25、 max=aij;row=i;colum=j; printf(max=%d,row=%d,colum=%dn,max,row,colum); 1 2 3 4 9 8 7 6-10 10 -5 2 C语言程序设计 第七章第七章 数组数组257.3 字符数组 1、字符数组的定义 例:char c10; (10个长度的字符数组) I am happy在内存中的存储状态?int c10;C0=a;由于字符行与整型是互相通用的,所以合法。 C语言程序设计 第七章第七章 数组数组267.3 字符数组 2、字符数组的初始化 例:char c10=I, ,a, m, , h,a, p,p, y 如果在定义字符

26、数组时不进行初始化,则数组中各元素的值是不可预料的。 如果提供的初值个数大于数组长度,则按语法错误处理。 如果提供的初值个数小于数组长度,则依次赋值后,余下的元素自动定为空字符(0) 例如: char c10=I, ,a 数组状态:Ia0 0 0 0 0 0 0 C语言程序设计 第七章第七章 数组数组277.3 字符数组 3、定义和初始化一个二维字符数组 例:char diamond55= , ,*, , *, , *, *, , , , *, , *, , *, , ,* * * * * * * * * C语言程序设计 第七章第七章 数组数组287.3 字符数组程序 例7.7 输出一个菱形图

27、(如上图)#include void main()char diamond5= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*;int i,j;for(i=0;i5;i+)for(j=0;j5;j+)printf(%c,diamondij);printf(n); C语言程序设计 第七章第七章 数组数组297.3 字符数组 程序 例7.6 输出一字符串 #include void main() char c10=I, ,a,m, ,a, ,b,o,y;int i;for(i=0;i10;i+) printf(%c,ci);printf(n); C语言程序设计 第七章第七

28、章 数组数组307.3 字符数组 字符串和字符串结束标志 在C语言中,是将字符串作为字符数组来处理的。 字符串结束标志:字符0,代表ASCII码为0的字符,它是一个“空操作符”即什么也不做。 例如: char c10=I, ,a 数组状态: 有效长度为: 3Ia0 0 0 0 0 0 0 C语言程序设计 第七章第七章 数组数组317.3 字符数组 字符数组的另一种初始化方法 例:char c=“I am happy”; 也可以省略,即 char c=“I am happy”; 它等价于(长度为11): char c=I, ,a, m, , h,a, p,p, y,0 不等价于(长度为10) char c=I, ,a, m, , h,a, p,p, y “0”是系统自动添加的. C语言程序设计 第七章第七章 数组数组327.3 字符数组 字符数组的输入输出 (1)逐个字符输入输出.用”%c” (2)将整个字符串一次输入或输出.用”%s”(string) 例如:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论