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