第5章数组、字符串、指针.ppt
《第5章数组、字符串、指针.ppt》由会员分享,可在线阅读,更多相关《第5章数组、字符串、指针.ppt(64页珍藏版)》请在三一办公上搜索。
1、,第5章 数组,教学内容理解数组数据类型掌握一维数组与二维数组的定义、存放、初始化和基本操作掌握数组与指针的关系掌握字符串的相关操作熟悉使用指针处理字符串的方法掌握数组的常用算法教学重点字符串的相关操作数组的常用算法教学难点数组的常用算法,数组概念,数组是一种构造数据类型数组是相同类型有序数据的集合数组中的每一个数据称为数组的一个元素数组中的元素可以通过统一的数组名和下标来唯一确定C编译器给数组分配一块连续存储空间依次存放数组的各个元素,一维数组,只用一个下标的数组称为一维数组定义类型说明符 数组名常量表达式;例:int a10,b2*3;常见错误int a(10);int n;scanf(“
2、%d”,#define N 10 int aN;,一维数组,初始化:在定义数组的同时给数组元素赋初值基本方法:int a5=1,2,3,4,5;其它方法:教材P127存放,引用数组元素形式:数组名下标下标可以是常量,也可以是变量下标取值范围从0开始,一维数组的基本操作,输入输出一次处理一个元素循环实现main()int a10,i;for(i=0;i10;i+)scanf(“%d”,一维数组的基本操作,求最值逐个判断#define N 10main()int aN,i,p,max;/*p存放最大值下标,max存放最大值*/*输入数组元素*/max=a0;p=0;for(i=0;imax)max
3、=ai;p=i;printf(“The max number a%d=%d”,p,max);,一维数组的基本操作,倒置ai与aN-i-1交换N个元素交换N/2次for(i=0;iN/2;i+)t=ai;ai=aN-i-1;aN-i-1=t;,一维数组应用举例,例5-4:求某班20个学生某门课程考试的平均成绩及高于平均成绩的学生人数。P130程序流程输入数据:20个成绩处理数据:求平均分,统计高于平均分的人数输出结果:平均分,人数,源程序,#define NUM 20main()int aNUM,n,i;float sum,aver;sum=0;for(i=0;iaver)n+;printf(“
4、%dn”,n);,二维数组,使用两个下标的数组称为二维数组定义类型说明符 数组名常量表达式常量表达式;例:int a34;初始化基本方法:int a34=1,2,3,4,5,6,7,8,9,10,11,12;其它方法:教材P135,二维数组,存放:二维表格,按行存储,引用数组元素形式:数组名下标 下标下标可以是常量,也可以是变量下标取值范围从0开始,二维数组应用举例,例:设一个学习小组有5个学生,每个学生有3门课的考试成绩,求全组每个学生的平均成绩.分析:处理一批性质相同的数据时,可以考虑使用数组,并根据数据间的逻辑关系选择数组的维数用一个二维数组存放考试成绩用一个一维数组存放平均成绩,源程序
5、,main()int a53,aver5,sum,i,j;for(i=0;i5;i+)for(j=0;j3;j+)scanf(“%d”,如何找出最高成绩?,sum=0;,printf(“n”);,矩阵操作,相乘P136Cm,n=Am,l*Bl,n,(i=1,2,m;j=1,2,n),for(i=0;iM;i+)for(j=0;jN;j+),cij=0;for(k=0;kL;k+)cij=cij+aik*bkj;,矩阵操作,转置P137方阵转置:可以不定义新数组非方阵转置:需要定义新数组,147258369,123456789,对角线上的元素不交换,行列下标相同,i=j,aij与aji交换,逐行
6、处理,第i行需要处理N-i-1个元素,指向一维数组的指针,可将某个数组元素的地址存放在一个指针变量中前提:定义一个基类型与数组元素数据类型相同的指针变量例:输入输出一维数组中的所有元素下标法#include#define N 10void main()int aN,i;for(i=0;iN;i+)scanf(%d,/*等价于scanf(%d,a+i);*/,/*等价于printf(%d,*(a+i);*/,指向一维数组的指针,指针法#include#define N 10void main()int aN,i,*p;for(p=a;pa+N;p+)scanf(%d,p);for(p=a;pa+
7、N;p+)printf(%d,*p);,二维数组的存储与访问,以int a23为例,数组a,二维数组的存储与访问,数组是一种构造数据类型,构成数组的元素是既可以是整型等基本数据类型,也可以是数组数据类型一个二维数组就是一维数组,其中每个元素又都是一个一维数组,a0,a1,a,2000,a+1,2006,二维数组的存储与访问,二维数组的存储与访问,a0=*(a+0)=*a=2000&a00=&(*(a0+0)=a0+0=*a=2000a00=*(&a00)=*(a0+0)=*a&a01=&(*(a0+1)=a0+1=*a+1=2002a01=*(&a01)=*(a0+1)=*(*a+1)a1=*
8、(a+1)=2006&a10=&(*(a1+0)=a1+0=*(a+1)=2006a10=*(&a10)=*(a1+0)=*(a+1)&a12=&(*(a1+2)=a1+2=*(a+1)+2=2010a12=*(&a12)=*(a1+2)=*(*(a+1)+2),总结,a0是数组名,即数组的首地址,也就是数组元素a00的地址即&a00虽然a与a0(或*a)的值均为2000,但其含义并不相同a指向一块大小为6个字节的存储空间,而a0指向一块大小为2个字节的存储空间a+1指向下一块大小为6个字节的存储空间,即数组a1a0+1则指向下一块大小为2个字节的存储空间,即元素a01。一般而言,&aij=a
9、i+j=*(a+i)+j,aij=*(ai+j)=*(*(a+i)+j),指向二维数组的指针,例:输入输出二维数组中的所有元素下标法#include#define M 4#define N 5void main()int aMN,i,j;for(i=0;iM;i+)for(j=0;jN;j+)scanf(%d,scanf(%d,ai+j);,printf(%d,*(ai+j);,指向二维数组的指针,指针法#include#define M 4#define N 5void main()int aMN,i,*p;for(p=,p=a,虽然a+1的值与a10的地址相等,但p+1却指向a01,因为p
10、的基类型为整型,每执行一次p+,指针将移动2个字节.,指向二维数组的指针,#include#define M 4#define N 5void main()int aMN,i;int(*p)N;/*定义一个指向包含N个元素的整型一维数组的指针变量*/for(p=a;paM;p+)for(i=0;iN;i+)scanf(%d,*p+i);for(p=a;paM;p+)for(i=0;iN;i+)printf(%d,*(*p+i);printf(n);,指针变量p的基类型为包含N个元素的整型一维数组。每执行一次p+,指针将移动2*N个字节,即指向二维数组的下一行*p+i指向当前行第i个元素,*(*
11、p+i)为当前行第i个元素的值,不要将int(*p)N;写成int*pN;,后者表示定义一个包含N个元素的一维数组,每个元素为基类型为整型的指针变量,字符数组,用于存放字符数据的数组,字符数组中的一个元素存放一个字符定义char 数组名常量表达式;初始化char c7=W,e,l,c,o,m,e;引用数组名下标,字符串,C语言中没有字符串数据类型,而是使用字符数组来处理字符串系统自动为字符串常量增加一个字符串结束标志0(ASCII码为0)字符串“Welcome”的存放形式,8个字节,char c=“Welcome”;数组c的存放形式,8个元素,c0 c1 c2 c3 c4 c5c6 c7,不等
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 字符串 指针

链接地址:https://www.31ppt.com/p-5954067.html