C语言程序设计-第七章数组.ppt
《C语言程序设计-第七章数组.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计-第七章数组.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章 数组数组 整型整型基本类型:基本类型:实型实型 字符型字符型、枚举类型枚举类型 数组类型数组类型 构造类型:构造类型:结构体类型结构体类型 公用体类型公用体类型指针类型指针类型空类型空类型C语言的数据类型1/16/20231/16/20231 1信管教研室信管教研室 什么构造类型?什么构造类型?所谓构造类型是指由基本类型数据按一定的规则所谓构造类型是指由基本类型数据按一定的规则组成的,是用户自己按规则定义的。数组是构造类组成的,是用户自己按规则定义的。数组是构造类型之一。型之一。什么是数组?什么是数组?在数学中我们学过数列、矩阵的概念,数列通常在数学中我们学过数列、矩阵的概念,数
2、列通常表示为:表示为:a a1 1 、a a2 2、a a3 3、.、a an n,矩阵通常表示为:矩阵通常表示为:a11a12a13a14a21a22a23a24241/16/20231/16/20232 2信管教研室信管教研室 在在C C语言中表示数组的方法是:语言中表示数组的方法是:a0a0、a1a1、a2a2、a3a3、a4a4、a5a5;其中其中a a:称为数组名。:称为数组名。方括号中的数:称为下标。方括号中的数:称为下标。下标是一个数时,也就是数列,称为下标是一个数时,也就是数列,称为一维数组一维数组。下标是两个数时,也就是矩阵,称为下标是两个数时,也就是矩阵,称为二维数组二维数
3、组。还有三维数组、四维数组等。还有三维数组、四维数组等。1/16/20231/16/20233 3信管教研室信管教研室 例如:有五名学生的一组学号:例如:有五名学生的一组学号:2004035012、2004035013、2004035014、2004035015、2004035016。如果用数组来表示的话可以用统一的数组名,比如果用数组来表示的话可以用统一的数组名,比如如 num,用下标区别每个变量。用下标区别每个变量。即即 num0、num1、num2、num3、num4 表表示一个学号数组。示一个学号数组。1/16/20231/16/20234 4信管教研室信管教研室7.1 一维数组的定义
4、和引用一维数组的定义和引用1、一维数组的定义一维数组的定义v定义方式:定义方式:类型说明符类型说明符 数组名数组名 常量表达式常量表达式;例例 long num4;表示表示num数组包含五个元素,分别是:数组包含五个元素,分别是:num0、num1、num2、num3、num4。注意:下标从注意:下标从 0 开始,数组元素取值类型是长整型。开始,数组元素取值类型是长整型。定义数组中元定义数组中元素的取值类型素的取值类型定义数组中元素的个定义数组中元素的个数,即数组长度。数,即数组长度。数组名的命名规则和变量名相同,遵循标识符命名规则。数组名的命名规则和变量名相同,遵循标识符命名规则。常量表达式
5、中可以包括常量和符号常量,不能包括变量。常量表达式中可以包括常量和符号常量,不能包括变量。1/16/20231/16/20235 5信管教研室信管教研室 一维数组在内存的存储形式:一维数组在内存的存储形式:num 就是数组存储区域的首地址,即就是数组存储区域的首地址,即 num=200。一组变量一组变量num 200num0num1num2num3num4204208212216200403501220040350132004035014200403501520040350161/16/20231/16/20236 6信管教研室信管教研室 2、一维数组的引用、一维数组的引用v数组必须先定义,后
6、使用;数组必须先定义,后使用;v只能逐个引用数组元素只能逐个引用数组元素,不能一次引用整个数组不能一次引用整个数组;v数组元素表示形式数组元素表示形式:数组名数组名下标下标。其中:下标可以是整型常量、变量或表达式。其中:下标可以是整型常量、变量或表达式。例例 int a10;scanf(“%d”,a);()必须必须 int a10;for(j=0;j10;j+)scanf(“%d”,&aj);例如:例如:int k=5;a1、ak、a10-k 都是合法的。都是合法的。1/16/20231/16/20237 7信管教研室信管教研室3 3、一维数组元素值的输入与输出、一维数组元素值的输入与输出例如
7、例如:main()int i,a10;for(i=0;i10;i+)scanf(“%d”,&ai);for(i=0;i10;i+)printf(“%d ”,ai);一维数组元素的一维数组元素的输出。输出。一维数组元素的一维数组元素的输入。输入。1/16/20231/16/20238 8信管教研室信管教研室 使用数组定义和数组元素时的几点注意:使用数组定义和数组元素时的几点注意:1、把数组定义时、把数组定义时方括号中的数方括号中的数和和元素下标值元素下标值区别开。区别开。方括号中的数表示数组含有的方括号中的数表示数组含有的元素个数元素个数;元素下标值是标识具体的元素下标值是标识具体的数组元素的;
8、数组元素的;方括号中的数不能是变量,只能是常量。方括号中的数不能是变量,只能是常量。2、数组元素的下标可以是常量,、数组元素的下标可以是常量,也可以是变量,也可以是变量,其值必须是非负数,其值必须是非负数,如果是小数,系统自动取整如果是小数,系统自动取整。3、数组必须先定义后使用。、数组必须先定义后使用。4、系统不检查数组元素下标的越界问题。、系统不检查数组元素下标的越界问题。5、一维数组元素的输入、输出使用单层循环语句。、一维数组元素的输入、输出使用单层循环语句。1/16/20231/16/20239 9信管教研室信管教研室4、一维数组的初始化、一维数组的初始化在定义数组时,为数组元素赋初值
9、。在定义数组时,为数组元素赋初值。(在编译阶段使之得到初值)在编译阶段使之得到初值)l 当全部数组元素赋初值时,可不指定数组长度。当全部数组元素赋初值时,可不指定数组长度。如如 int a5=6,2,3;等价于:等价于:a0=6;a1=2;a2=3;a3=0;a4=0;如如 int a3=6,2,3,5,1;()l 只给部分数组元素赋初值只给部分数组元素赋初值。int a=1,2,3,4,5,6;编译系统根据初值个数确定数组维数值。编译系统根据初值个数确定数组维数值。int a5=1,2,3,4,5;等价于:等价于:a0=1;a1=2;a2=3;a3=4;a4=5;初始化方式:初始化方式:l
10、在定义数组时对数组元素赋予初值在定义数组时对数组元素赋予初值。1/16/20231/16/20231010信管教研室信管教研室5、程序举例、程序举例例例1 1 读读1010个整数存入数组,找出其中最大值和最小值。个整数存入数组,找出其中最大值和最小值。步骤步骤:1.输入输入:for循环输入循环输入10个整数;个整数;2.处理处理:(a)先令先令max=min=x0(b)依次用依次用xi和和max,min比较比较(循环循环)若若maxxi,令令min=xi3.输出输出:max和和min。#include#define SIZE 10void main()int xSIZE,i,max,min;p
11、rintf(Enter 10 integers:n);for(i=0;iSIZE;i+)printf(%d:,i+1);scanf(%d,&xi);max=min=x0;for(i=1;iSIZE;i+)if(maxxi)min=xi;printf(Maximum value is%dn,max);printf(Minimum value is%dn,min);1/16/20231/16/20231111信管教研室信管教研室例例2 2 用数组求用数组求FibonacciFibonacci数列前数列前2020个数。个数。#include void main()int i;int f20=1,1;
12、for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;ia2a1a2,则交换则交换值;然后比较第二个数与第三个数,若为逆序值;然后比较第二个数与第三个数,若为逆序a2a3a2a3,则,则交换值;依次类推,直至第交换值;依次类推,直至第7 7个数和第个数和第8 8个数比较为止个数比较为止第一第一趟冒泡排序趟冒泡排序,结果,结果最大最大的数被安置在最后一个元素位置上,即的数被安置在最后一个元素位置上,即在在a8a8中。中。(2 2)对前)对前7 7个数进行第二趟冒泡排序,结果使个数进行第二趟冒泡排序,结果使次大次大的数被安置的数被安置在第在第7 7个元素位置,即在个元素位置,即在
13、a7a7中。中。(3 3)重复上述过程,共经过)重复上述过程,共经过7 7趟冒泡排序后,排序结束。趟冒泡排序后,排序结束。1/16/20231/16/20231414信管教研室信管教研室例例38 49 65 76 13 27 30 97第第一一趟趟38 49 65 13 27 30 76第第二二趟趟38 49 13 27 30 65第第三三趟趟38 13 27 30 49第第四四趟趟13 27 30 38第第五五趟趟13 27 30第第六六趟趟49 38 65 97 76 13 27 30初初始始关关键键字字n=8n=83849769713972797 30971376767627301365
14、2765306513134949304927382738303813 27第第七七趟趟1/16/20231/16/20231515信管教研室信管教研室输入输入n 个数给个数给a1 到到 anfor j=1 to n-1for i=1 to n-jaiai+1真真假假aiai+1输出输出a1 到到 an#include void main()int a11,i,j,t;printf(Input 10 numbers:n);for(i=1;i11;i+)scanf(%d,&ai);printf(n);for(j=1;j=9;j+)for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;
15、printf(The sorted numbers:n);for(i=1;i11;i+)printf(%d,ai);若有若有n n个数,则要进个数,则要进行行n-1n-1趟比较;趟比较;在第在第1 1趟比较中要进趟比较中要进行行n-1n-1次两两比较,次两两比较,在第在第j j趟比较中要进趟比较中要进行行n-jn-j趟两两比较。趟两两比较。1/16/20231/16/20231616信管教研室信管教研室7.2 二维数组及多维数组二维数组及多维数组 一维数组通常是用来处理数列问题的。一维数组通常是用来处理数列问题的。例如:例如:a1、a2、a3、.、an、.可以用一维来表示。可以用一维来表示。二
16、维数组通常是用来处理矩阵问题的,例如二维数组通常是用来处理矩阵问题的,例如下面的数表(矩阵):下面的数表(矩阵):a13a a1414a a1111a a1212a a2121a a2222a23a24a a3131a32a33a3434341/16/20231/16/20231717信管教研室信管教研室1 1、二维数组的定义、二维数组的定义v定义方式:定义方式:类型说明符数组名类型说明符数组名 常量表达式常量表达式常量表达式常量表达式;v数组元素的存放顺序数组元素的存放顺序在内存中按行顺序存放。在内存中按行顺序存放。即先存第一行,接着存即先存第一行,接着存第二行,以此类推。例如:第二行,以此
17、类推。例如:例例 int a34;float b25;int a3,4;()行数行数列数列数元素个数元素个数=行数行数*列数列数int a32a01a10a11a20a21014523a00a00 a01a10 a11a20 a211/16/20231/16/20231818信管教研室信管教研室2 2、二维数组理解、二维数组理解 由按上述定义的二维数组的方式由按上述定义的二维数组的方式 (比如:比如:int a34)int a34),我们可以把二维数组看成是一种特殊的一维数组,它的元素又我们可以把二维数组看成是一种特殊的一维数组,它的元素又是一维数组。例如,把是一维数组。例如,把a a看成是一
18、维数组,它有看成是一维数组,它有3 3个元素,分别个元素,分别是是a0a0、a1a1、a2a2,每个元素又是一个包含每个元素又是一个包含4 4个元素的一维个元素的一维数组。如下表:数组。如下表:a0 a00、a01、a02、a03a a1 a10、a11、a12、a13 a2 a20、a21、a22、a23其中其中 a 是数组是数组 a0、a1、a2 的数组名,而的数组名,而 a0是数组是数组 a00、a01、a02、a03 的数组名的数组名 a1是数组是数组 a10、a11、a12、a13的数组名的数组名 a2是数组是数组 a20、a21、a22、a23的数组名的数组名1/16/20231/
19、16/20231919信管教研室信管教研室 3、二维数组元素的引用、二维数组元素的引用 形式:形式:数组名数组名下标下标下标下标4、二维数组的输入输出。使用双层循环,、二维数组的输入输出。使用双层循环,例如:例如:main()int a45,i,j;for(i=0;i=3;i+)for(j=0;j=4;j+)scanf(“%d”,&aij);for(i=0;i=3;i+)for(j=0;j=4;j+)printf(“%d”,aij);输入,数据用空格或输入,数据用空格或回车隔开。回车隔开。输出输出1/16/20231/16/20232020信管教研室信管教研室 例例 int a23=1,2,3
20、,4,5,6;a00a01a02a10a11a12123456全部初始化全部初始化=5 5、二维数组元素的初始化、二维数组元素的初始化l分行初始化:分行初始化:1/16/20231/16/20232121信管教研室信管教研室 例例 int a23=1,2,4;a00a01a02a10a11a12120400部分初始化部分初始化=5 5、二维数组元素的初始化、二维数组元素的初始化l分行初始化:分行初始化:1/16/20231/16/20232222信管教研室信管教研室 例例 int a 3=1,4,5;a00a01a02a10a11a12100450第一维长度省略初始化第一维长度省略初始化=5
21、5、二维数组元素的初始化、二维数组元素的初始化l分行初始化:分行初始化:1/16/20231/16/20232323信管教研室信管教研室 例例 int a 23=1,2,3,4,5,6;a00a01a02a10a11a12123456全部初始化全部初始化=5 5、二维数组元素的初始化、二维数组元素的初始化l按元素排列顺序初始化按元素排列顺序初始化1/16/20231/16/20232424信管教研室信管教研室5 5、二维数组元素的初始化、二维数组元素的初始化l按元素排列顺序初始化按元素排列顺序初始化 例例 int a23=1,2,4,;a00a01a02a10a11a12124000部分初始化
22、部分初始化=1/16/20231/16/20232525信管教研室信管教研室 例例 int a 3=1,2,3,4、5;a00a01a02a10a11a12123450第一维长度省略初始化第一维长度省略初始化=5 5、二维数组元素的初始化、二维数组元素的初始化l按元素排列顺序初始化按元素排列顺序初始化1/16/20231/16/20232626信管教研室信管教研室程序举例程序举例例例 将二维数组行列元素互换,存到另一个数组中。将二维数组行列元素互换,存到另一个数组中。a=1 2 34 5 6b=1 42 53 6#include void main()int a23=1,2,3,4,5,6;i
23、nt b32,i,j;printf(array a:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);printf(array b:n);for(i=0;i=2;i+)for(j=0;jmax真真假假max=aijrow=icolum=j输出输出:max和和row,colum#include void main()int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;int i,j,row=0,colum=0,max;max=a00;for(i=0;i=2;i+)for(j=0;jmax)ma
24、x=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);1/16/20231/16/20232828信管教研室信管教研室例例 读入下表中值到数组,分别求各行、各列及表中读入下表中值到数组,分别求各行、各列及表中所有数之和。所有数之和。12 4 615 7 9 8 23 3 2 5 1712 4 6 2215 7 9 31 8 23 3 34 2 5 17 2437 39 35 111#include main()int x54,i,j;for(i=0;i4;i+)for(j=0;j3;j+)scanf(%d,&xij)
25、;for(i=0;i3;i+)x4i=0;for(j=0;j5;j+)xj3=0;for(i=0;i4;i+)for(j=0;j3;j+)xi3+=xij;x4j+=xij;x43+=xij;for(i=0;i5;i+)for(j=0;j4;j+)printf(%5dt,xij);printf(n);1/16/20231/16/20232929信管教研室信管教研室思考题:思考题:1、float a10;是一个定义一维数组的例子:是一个定义一维数组的例子:理解理解 float、a、10 各部分的含义。各部分的含义。2、下面定义哪一个是错的?为什么?、下面定义哪一个是错的?为什么?1)#defin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第七 数组
限制150内