C语言程序ppt课件ch6数组.ppt
《C语言程序ppt课件ch6数组.ppt》由会员分享,可在线阅读,更多相关《C语言程序ppt课件ch6数组.ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章第六章1本章要点本章要点1.1.建立数组的概念;建立数组的概念;2.2.掌握一维数组和二维数组的定义、掌握一维数组和二维数组的定义、引用、引用、存储结构和初始化方法;存储结构和初始化方法;3.3.掌握一维字符数组的输入输出;掌握一维字符数组的输入输出;4.4.掌握字符串处理函数的使用;掌握字符串处理函数的使用;5.5.掌握用数组进行编程的技术。掌握用数组进行编程的技术。26.1 6.1 数组的概念数组的概念如何处理一个班学生的学习成绩?如何处理一个班学生的学习成绩?一行文字怎样存储?一行文字怎样存储?一个矩阵怎样存储一个矩阵怎样存储?.问题的提出:问题的提出:一组具有一组具有相同数据类型
2、相同数据类型的数据的的数据的 有序集合有序集合 这些数据的特点这些数据的特点:1.1.具有相同的数据类型具有相同的数据类型 2.2.使用过程中需要保留原始数据使用过程中需要保留原始数据 C C语言为这些数据提供了一种语言为这些数据提供了一种构造数据类型:构造数据类型:数组。数组。3 数组数组是一组有序的、类型相同的数据的集合,是一组有序的、类型相同的数据的集合,这些数据被称为这些数据被称为数组的元素数组的元素。46.2 6.2 一维数组一维数组6.2.1 6.2.1 一维数组的定义和引用一维数组的定义和引用1.定义一维数组的一般方式:定义一维数组的一般方式:类型说明符类型说明符 数组名数组名
3、常量表达式常量表达式;说明:说明:l类型说明符:数组的类型。类型说明符:数组的类型。l数组名同变量名命名规则相同。数组名同变量名命名规则相同。l常量表达式指明数组中元素个数,必须大于零。常量表达式指明数组中元素个数,必须大于零。可以是数值常量、符号常量和字符常量。可以是数值常量、符号常量和字符常量。例如:例如:float mark100;float mark100;char str200;char str200;intint aa1010;5其中:其中:markmark、strstr、a a 是数组名。是数组名。方括号内是数组的方括号内是数组的长度长度。下标的个数称为数组的下标的个数称为数组的
4、维数维数,markmark、strstr是是一维数组、一维数组、a a是二维数组。是二维数组。数组的成员称为数组数组的成员称为数组元素元素。数组元素的类型称为该数组的数组元素的类型称为该数组的基类型基类型。数。数组组markmark的基类型是的基类型是floatfloat,数组,数组strstr的基类型是的基类型是charchar。例如:存储学生成绩用实型数组例如:存储学生成绩用实型数组 mark100 mark100,存储一行文字用字符数组存储一行文字用字符数组 str200 str200,存储一个存储一个4*64*6的矩阵用二维整型数组的矩阵用二维整型数组 a46 a46。6说明说明:(1
5、)(1)数组名后是用方括号数组名后是用方括号而不是圆括号而不是圆括号。(2)(2)数组定义中的常量表达式表示数组元素个数。数组定义中的常量表达式表示数组元素个数。必须必须是大于零的是大于零的常量常量。如:如:int a0,d(6);/*错误错误*/int b-8;/*错误错误*/int c2+3;/*正确正确*/(3)(3)语言中不允许对数组的大小作语言中不允许对数组的大小作动态动态定义。定义。数组的说明语句必须在数组的说明语句必须在可执行语句之前可执行语句之前。#define N 5int aN;int n;scanf(“%d”,&n);int an;int n=10,an;72.一维数组的
6、引用一维数组的引用 数组元素的引用形式:数组元素的引用形式:数组名数组名 下标下标 如如a3n下标可以是整型常量、整型变量或整型表达式。下标可以是整型常量、整型变量或整型表达式。如:如:a3=a0+ai+1;n下标的值是数组元素的下标的值是数组元素的序号序号,且从,且从0开始,直到开始,直到n-1.int a10,说明数组说明数组a一共有一共有10个元素,起始值是个元素,起始值是0。数组数组a的的10个元素分别是:个元素分别是:a0、a1、a9。n数组的输入输出应采用循环的方法数组的输入输出应采用循环的方法.int a10;int a10;for(i=0;i10;i+)for(i=0;i10;
7、i+)scanfscanf(”%(”%d d”,&”,&a ai);i);下标指出在数组中第几个元素8数组中的每个元素数组中的每个元素在功能上在功能上等价于一个一般的变量。等价于一个一般的变量。例如:例如:输入输入100100个学生成绩,并求出总成绩。个学生成绩,并求出总成绩。l 引用数组元素的注意事项引用数组元素的注意事项:float m100,sum=0;float m100,sum=0;for(i=0;i100;i+)for(i=0;i100;i+)scanf(”%f”,&scanf(”%f”,&m mii););sum+=sum+=m mii;数组方式数组方式float x,sum=0
8、;float x,sum=0;for(i=0;i100;i+)for(i=0;i100;i+)scanf(”%f”,&x);scanf(”%f”,&x);sum+=x;sum+=x;简单变量简单变量 x x sumsum85 m0m1m2m99 sumsum8285637890638585 851488279501482263167950优点:优点:数据重用数据重用 数据有序数据有序9mark0mark1mark2mark3.mark9986.592.077.552.0.94.02000H2004H2008H200CH。218CH引用数组元素时,根据首引用数组元素时,根据首地址和下标,自动计算
9、出地址和下标,自动计算出该元素的实际地址,取出该元素的实际地址,取出该地址的内容进行操作。该地址的内容进行操作。如引用如引用 mark2:(1)计算计算 2000+2*4=2008(2)取出取出2008的内容的内容l下标与地址的关系下标与地址的关系 为下标运算符为下标运算符,数组数组名、数组元素是两种不同性名、数组元素是两种不同性质的数据。质的数据。数组名是数组的首地址,数组名是数组的首地址,是一个地址常量。是一个地址常量。数组元素则是数值。数组元素则是数值。10 一维数组的初始化一维数组的初始化 在数组定义时为数组元素赋初值称为数组初始化.方法:将初值依次写在花括号方法:将初值依次写在花括号
10、 内。内。如:如:int a5=2,4,6,8,10;存储形式:存储形式:存储单元存储单元11(1)给数组中部分元素赋初值,其他元素按零值处理。给数组中部分元素赋初值,其他元素按零值处理。如:如:int a9=1,2;则则 a0=1,a1=2,a2a8值全为值全为0。(2)对数组元素全部赋值可以不指定长度。int a=0,1,2,3,5;int a=0,1,2,3,5;等价于:等价于:int a5=0,1,2,3,5;int a5=0,1,2,3,5;(4)初值的个数不能超过数组总元素的个数)初值的个数不能超过数组总元素的个数。int a3=1,2,3,4;语法错语法错!说明:说明:(3)对数
11、组中间元素赋值必须指明位置)对数组中间元素赋值必须指明位置。int a5=,2,3,4;/*对第对第3-5个元素赋初值个元素赋初值*/12数组元素在程序中赋值利用输入函数利用输入函数main()char as26;int i;for(i=0;i26;i+)scanf(%c,&asi);.利用赋值语句利用赋值语句main()char as26,ch;for(ch=A;ch=Z;ch+)asch-A=ch;.136.2.3 一维数组应用举例 例例1 1 从键盘上输入从键盘上输入1010个实型数存入数组,然个实型数存入数组,然 后按输入顺序的逆序输出这后按输入顺序的逆序输出这1010个数。个数。ma
12、in()float a10;int i;for(i=0;i=0;i-)printf(“%10.2f”,ai);14 例例2 2 从键盘上输入从键盘上输入1010个数,求出其中最大值并输出。个数,求出其中最大值并输出。main()int a10,i,max;for(i=0;i10;i+)scanf(“%d”,&ai);max=a0;for(i=0;imax)max=ai;printf(“max=%dn”,max);算法分析算法分析:采用打擂台的方法采用打擂台的方法,先把先把10个数存在数组中个数存在数组中,任意指任意指定某数为擂主定某数为擂主,然后擂主依次与其他数比较然后擂主依次与其他数比较,若
13、某数大于擂主若某数大于擂主,则该数为擂主。循环结束,则该数为擂主。循环结束,max中一定是最大的数。中一定是最大的数。指定第指定第1 1个元个元素为擂素为擂主主 15 例例33从键盘上输入从键盘上输入6个数存入数组中,再按输入顺序的逆序个数存入数组中,再按输入顺序的逆序存放在该数组中并输出。存放在该数组中并输出。main()int a6,i,j,k,t;for(i=0;i6;i+)scanf(“%d”,&ai);k=6/2-1;for(i=0;i=k;i+)j=6-i-1;t=aj;aj=ai;ai=t;for(i=0;i6;i+)printf(“%3d”,ai);算法分析算法分析:采用循环设
14、计。逆序操作可总结为:采用循环设计。逆序操作可总结为:ai与与aj进行交换,其中进行交换,其中i=0,1,n/2-1,j=n-i-1程序运行演示程序运行演示3 4 1 5 6 2 a0 a1 a2 a3 a4a516例例4 用用冒泡法冒泡法对数据进行由小到大排序。对数据进行由小到大排序。方法:将两个相邻数比较,小的调到前头。采用两重循环。方法:将两个相邻数比较,小的调到前头。采用两重循环。9 8 8 8 8 8 5 5 5 5 4 4 4 2 2 0 8 9 5 5 5 5 8 4 4 4 5 2 2 4 0 25 5 9 4 4 4 4 8 2 2 2 5 0 0 4 4 4 4 4 9 2
15、 2 2 2 8 0 0 0 5 5 5 52 2 2 2 9 0 0 0 0 8 8 8 8 8 8 80 0 0 0 0 9 9 9 9 9 9 9 9 9 9 9由以上可推知:由以上可推知:6 个数要比较个数要比较5趟趟 第第一一趟中要进行两两比较趟中要进行两两比较5次次 第第二二趟中比较趟中比较 4次次 若若 有有n个数,则要进行个数,则要进行n-1趟比较趟比较 第第 i趟比较中要进行趟比较中要进行n-i次两两比较。次两两比较。17#define N 6 main()int aN,i,j,t;for(i=0;iN;i+)scanf(“%d”,&ai);for(i=0;iN-1;i+)f
16、or(j=0;jaj)t=aj-1;aj-1=aj;aj=t;printf(“The sorted numbers:n”);for(i=0;iN;i+)printf(“%d ”,ai);n n个数比较个数比较n-1n-1趟趟第第i i趟比较趟比较n-in-i次次程序运行演示程序运行演示18冒泡排序的缺陷:在比较交换的过程中大的数不能冒泡排序的缺陷:在比较交换的过程中大的数不能一次到位,效率低。一次到位,效率低。例例6 6 选择法排序。选择法排序。选择排序法的基本思想:选择排序法的基本思想:以以冒冒泡泡排排序序法法为为基基础础,在在两两两两比比较较后后并并不不马马上上进进行行交交换换,而而是是在
17、在找找到到最最小小的的数数之之后后,记记住住最最小小数数的的位位置置(数数组组中中的的下下标标),待待一一轮轮比比较较完完毕毕后后,再再将将最最小小的的数一次交换到位。数一次交换到位。193 6 1 9 41 6 3 9 41 3 6 9 41 3 4 9 61 3 4 6 9 选择法排序选择法排序.问题问题 将将 3 3、6 6、1 1、9 9、4 4 从小到大排列。从小到大排列。20选择排序算法选择排序算法 若有若有N N个数,则需要进行个数,则需要进行N-1N-1轮排序处理。轮排序处理。第第1 1轮轮排序从排序从1 1N N个数中找出最小的数,然后将它个数中找出最小的数,然后将它与第与第
18、1 1个数交换。第个数交换。第1 1个数则是最小的数。个数则是最小的数。第第2 2轮轮排序从排序从2 2N N个数中找出最小的数,然后将它个数中找出最小的数,然后将它与第与第2 2个数交换。第个数交换。第2 2个数则是次小的数。个数则是次小的数。经过经过 N-1 N-1 轮处理,完成全部轮处理,完成全部N N个数排序。个数排序。编程时使用二重循环。外面的大循环控制进行编程时使用二重循环。外面的大循环控制进行N-1N-1轮排序,内循环找出第轮排序,内循环找出第 i i 轮的最小值。轮的最小值。21#define N 5#define N 5main()main()int aN,i,j,k,t;i
19、nt aN,i,j,k,t;printf(Input numbers:n);printf(Input numbers:n);for(i=0;iN;i+)for(i=0;iN;i+)scanf(%d,&ai);scanf(%d,&ai);for(i=0;iN-1;i+)for(i=0;iN-1;i+)k=i;k=i;for(j=i+1;jN;j+)for(j=i+1;jaj)k=j;if(akaj)k=j;if(k!=i)if(k!=i)t=ai;ai=ak;ak=t;t=ai;ai=ak;ak=t;printf(The sorted numbers:n);printf(The sorted n
20、umbers:n);for(i=0;iN;i+)for(i=0;iN;i+)printf(%d,ai);printf(%d,ai);程序运行演示程序运行演示22 程序运行演示程序运行演示main()int n,m,t,a10=3,4,7,2,5,0,12,54,23,53;for(n=0;n=9;n+)for(m=n+1;mam)min=an;an=am;am=min;for(n=0;n=9;n+)printf(%3d,an);23 定义二维数组的一般方式:定义二维数组的一般方式:类型说明符类型说明符 数组名数组名 常量表达式常量表达式11常量表达式常量表达式22;例如例如 int a33 存
21、储形式:存储形式:二维数组在内存中二维数组在内存中按行的顺序存放按行的顺序存放,即先存放,即先存放第一行的元素,再存放第二行的元素。第一行的元素,再存放第二行的元素。例如例如 float a34;float a34;6.3 6.3 二维数组二维数组6.3.1 二维数组的定义二维数组的定义第一个下标可第一个下标可能取值的个数能取值的个数第二个下标可第二个下标可能取值的个数能取值的个数24说明:说明:二维数组除了维数比一维数组多一维外,二维数组除了维数比一维数组多一维外,其它性质与一维数组全部类似。其它性质与一维数组全部类似。下面写法是否正确?下面写法是否正确?int a03;用于定义数组长度的常
22、量表达式的值必须用于定义数组长度的常量表达式的值必须是大于是大于0的正整数。的正整数。int i=3,j=4;int aij;定义数组元素的个数必须使用常量表达式,定义数组元素的个数必须使用常量表达式,而不能使用变量。而不能使用变量。256.3.2 二维数组的引用二维数组的引用 二维数组的引用二维数组的引用与引用一维数组元素一样,也用与引用一维数组元素一样,也用下标法引用二维数组元素。下标法引用二维数组元素。二维数组元素表示形式:二维数组元素表示形式:数组名数组名下标下标1下标下标2 下标下标1和下标和下标2是整型常量、整型变量或整型表达是整型常量、整型变量或整型表达式。其编号是从式。其编号是
23、从0开始的开始的。例如:若有例如:若有 int a2*53*4,i=15;则使用则使用 a3*30,a1i-5都是合法的。都是合法的。说明说明:数组名:数组名a代表的是代表的是数组数组a在内存中的首地址在内存中的首地址,因此,可以用数组名因此,可以用数组名a来代表数组元来代表数组元 素素a00的的地址。地址。数组名是常量,不可对它赋值。数组名是常量,不可对它赋值。下标不要越界下标不要越界下标不要越界下标不要越界26一、二维数组的初始化一、二维数组的初始化1.分行给二维数组赋初值。分行给二维数组赋初值。如:int a23=2,3,1,1,2,3;2.将所有数据写在一个将所有数据写在一个 内,按顺
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 ppt 课件 ch6 数组
限制150内