C语言程序设计数组字符串指针.pptx
《C语言程序设计数组字符串指针.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计数组字符串指针.pptx(79页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、重点:一维数组、二维数组的定义与使用方法,使用指针访问数组和字符串的方法。难点:二维数组与指针;与数组有关的常用算法(排序、查找与插入等)。第1页/共79页5.1 数组概述 例.输入10个数,求出他们的平均数。main()int n,a,s=0;float ave;for(n=1;nave)printf(“%d”,a1);if(a2ave)printf(“%d”,a2);if(a3ave)printf(“%d”,a3);./*实际程序是不能这样写*/第3页/共79页思考:发现:如果不是10个数,而是100,1000,甚至是10000,此时按上面方法编写程序就非常冗长。如果可以使用循环来编写,程
2、序可以简洁许多。要使用循环:必须使用ai(i=1,210)的形式来代表a1,a2a10在C语言中使用“数组”来实现:aia0 a1a9第4页/共79页#include void main()int n,i;float s=0,ave,a10;for(i=0;i10;i+)scanf(%f,&ai);s=s+ai;ave=s/10;for(i=0;iave)printf(%f,ai);声明有10个元素的一维数组aa0 a1 a9aiaiaiai第5页/共79页在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在语言中,数组属于构造
3、数据类型。按类型分为:数值数组、字符数组、指针数组、结构数组等按维数可分为:一维数组、二维数组、多维数组。数组在内存中占用一片连续的存储单元第6页/共79页5.2 一维数组只有一个下标变量的数组,称为一维数组。只有一个下标变量的数组,称为一维数组。5.2.1 一维数组定义 一般形式为:类型符 数组名 常量表达式;其中:类型说明符是任一种基本数据类型或构造数据类型,数组名是用户定义的标识符;方括号中的常量表达式表示数据元素的个数,也称为数组的长度。第7页/共79页例如:int a10;float b10,c20;char ch20;数组在内存中占据一片连续的存储空间:以 int a5为例,在内存
4、中为:a0a1a2a3a4相当于声明了5个整型变量第8页/共79页说明:数组的所有元素的数据类型都是相同的。数组取名规则应符合标识符的规定,数组名不能与同一函数中其它变量名相同:int a;float a10;是错误的。C语言中规定数组的下标从0开始,方括号中常量表达式表示数组元素的个数。不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。例如:int n=5,an;是错误的。第9页/共79页5.2.2 一维数组的初始化1、数组声明时初始化 在编译阶段进行的。这样将减少运行时间,提高效率。数组初始化的一般形式为:类型符 数组名常量表达式=值,值值;例如:int a10=0,1
5、,2,3,4,5,6,7,8,9;相当于a0=0;a1=1;.a9=9;第10页/共79页说明:int a10=0,1,2,3,4;int a10=1;static int a3;int a=1,2,3,4,5;int a5=1,2,3,4,5,1;给前5个元素赋值,其余赋0值不能给数组整体赋值,改成1可以省略数组元素个数。静态存储类型,初值为0初值的个数不能超过元素个数第11页/共79页2、使用赋值语句初始化 用赋值语句初始化是在程序执行过程中实现的。例如:int a3;a0=5;a1=8;a2=9;对于数组的元素用赋值语句初始化,常常使用循环来完成,例如:int k,a10;for(k=0
6、;k10;k+)ak=1;/*对数组中所有元素赋初值为1*/第12页/共79页5.2.3 数组元素的引用 数组元素是组成数组的基本单元,数组元素可以看成一种变量。引用数组元素有下标法和指针法。本小节介绍下标法,指针法将在5.5节中介绍。使用下标法引用一维数组元素的一般形式为:数组名下标 其中,的下标只能为整型常量或整型表达式。若为小数时,C编译将自动取整。第13页/共79页说明:int n=3,a10;an=5;an+1=10;int a10,x,y;a10=5;int a10;printf(%d,a);正确代码。引用数组元素的时候,可以用变量。错误代码。最大下标为9,没有a10元素。错误代码
7、。不能用一个语句输出整个数组。第14页/共79页5.2.4 一维数组的基本操作可通过循环给数组元素输入数据 int a10,i,;for(i=0;i10;i+)scanf(“%d”,&ai);也可通过循环输出数组元素 for(i=0;i10;i+)printf(“%d”,ai);例,输入5个数,再按倒序输出5-1.c第15页/共79页求数组中最大元素#define N 10main()int i,p,max,aN;printf(Enter%d Numbersn,N);for(i=0;iN;i+)scanf(%d,&ai);max=a0;for(i=1;i max)max=ai;printf(T
8、he Max=%dn,max);p=0;a%d=%dn,p,max);p=i;及其下标及其下标求最大、最小值以及排序算法中的最大、最小值确定 都可以采用类似方法:把第一个元素假想为当前找到的最大、最小值,在后续的比较中进行更新。5-2.c第16页/共79页一维数组的倒置for(i=0;i N/2;i+)t=ai;ai=aN-i-1;aN-i-1=t;0 0 0 2 4 6 8 1 3 5 7 91 1 9 2 4 6 8 1 3 5 7 02 2 9 7 4 6 8 1 3 5 2 03 3 9 7 5 6 8 1 3 4 2 04 4 9 7 5 3 8 1 6 4 2 05 5 9 7 5
9、 3 1 8 6 4 2 0a0 a1 a9类似问题:字符串的回文比较5-3.c第17页/共79页5.2.5 一维数组的应用举例 例:如果要统计09,1019,2029,.8089,9099分数段及100分的人数。编程分析:a数组用来存放20个学生成绩;另用数组bn来存各分数段的人数:bn0存09分的人数,bn1存1019分的人数,bn9存9099分的人数,bn10存100分的人数。5-4.c第18页/共79页一维数组的应用举例:5.8.1 排序问题(教材P.166)数据的排序就是将一批数据由小大到(升序)或由大到小(降序)进行排列。常用的有选择法、冒泡法。首先要将需要排序的数据放到数组中,这
10、样,便于我们排序。第19页/共79页1选择法排序算法描述:从剩下的元素集中找一个最小的元素依次放到第i个位置。i从0开始原始数据:原始数据:8 6 9 3 2 7第一轮后:第一轮后:2 6 9 3 8 7第二轮后:第二轮后:2 3 9 6 8 7第三轮后:第三轮后:2 3 6 9 8 7第四轮后:第四轮后:2 3 6 7 8 9第五轮后:第五轮后:2 3 6 7 8 9a0 a1 a2 a3 a4 a5869327 6个数需要经历个数需要经历5轮选择(轮选择(i=04)每一轮做的工作:每一轮做的工作:a.从第从第i个到最后一个个到最后一个中找一个最小的。中找一个最小的。b.与第与第i个交换。放
11、到个交换。放到ai这个位置。这个位置。第20页/共79页代码:for(i=0;i5;i+)p=i;for(j=i+1;j6;j+)if(ajap)p=j;t=ai;ai=ap;ap=t;iN-1;iN;a.从第i个到最后一个中找一个最小的。b.与第i个交换。6个数需要经历5轮选择(i=04)5-5.c第21页/共79页 2冒泡法排序(升序)算法描述第一轮:8693268932689326839268329 683296382963289 第二轮:第二轮:5个数共个数共4轮即可轮即可第22页/共79页代码:for(i=0;i4;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1
12、=t;iN-1;iN-i-1;每轮需要经过4-i次比较发现前面的数比后面的数大则需要交换,把大的换到后面去。5个数需要经历4轮选择(i=03)5-6.c第23页/共79页5.3 二维数组与多维数组5.3.1 二维数组的声明 二维数组说明的一般形式是:类型符 数组名常量表达式1常量表达式2;其中:常量表达式1表示第一维下标的长度常量表达式2 表示第二维下标的长度。例如:int a34;float b44;char c510;第24页/共79页int a34;该数组的下标变量共有34个,即:a00a01a02a03a10a11a12a13a20a21a22a23a00a01a02a03a10a23
13、二维数组在内存的存放顺序是二维数组在内存的存放顺序是“先行后列先行后列”注意:语言允许二维数组注意:语言允许二维数组a34a34可分解为可分解为三个一维数组,其数组名分别为三个一维数组,其数组名分别为a0,a1,a0,a1,a2a2。这三个一维数组都有。这三个一维数组都有4 4个元素。个元素。第25页/共79页5.3.2 二维数组元素的引用二维数组的元素的引用形式为:数组名下标下标使用二维数组的情况举例:学生多门功课的成绩,如:a1003可以用来记录100个学生3门功课的成绩。矩阵,如:a33可以用来记录33的矩阵。一个数组元素正好存放一个矩阵的元素。第26页/共79页5.3.3 二维数组的初
14、始化 二维数组初始化也是在类型说明时给各下标变量赋以初值。1.按行分段赋值可写为 int 53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;2.按行连续赋值可写为 int a53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;注意:这两种赋初值的结果是完全相同的。第27页/共79页说明:int a33=1,2,3;int a 3=1,2,3,4,5,6,7,8;100200300123456780第28页/共79页5.3.4 二维数组的基本操作二维数组的操作一般需要使用二重循环。1二维数组的输入输出设数组
15、己定义 int aNM;其程序段如下:for(i=0;iN;i+)for(j=0;jM;j+)scanf(“%d”,&aij);for(i=0;iN;i+)for(j=0;jM;j+)printf(“%d”,aij);printf(“n”);第29页/共79页2求最大元素及其所在的行和列 编程基本思路与在一维数组求最大值元素相同,row,column存放最大值所在行列号。3.矩阵的转置(方阵)对比一维数组的倒置,注意:哪些元素要交换?和谁交换?a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23a30 a31 a32 a33 如果不是方如果不是方阵,则要定
16、义阵,则要定义另一个数组。另一个数组。bji=aij第30页/共79页5.3.6 多维数组的声明和引用 在处理三维空问题等其它复杂问题时要使用到三维及三维以上的数组,通常把三维及三维以上的数组称为多维数组。定义多维数组的格式如下:类型符 数组名常量1常量2常量3;例如:int a555;/*声明a是三维数组*/float b26105;/*声明b是四维数组*/注意:操作多维数组常常要用到多重循环。注意:操作多维数组常常要用到多重循环。第31页/共79页2.6 指针变量2.6.1 地址与指针的概念 数据存放在内存中,每个字节内存单元按顺序编号,称为“内存地址”。通过内存单元的地址即可准确地找到该
17、内存单元。变量的地址就是变量的指针5x2003变量名变量值变量地址p指针变量第32页/共79页2.6.3 指针变量的定义 指针变量定义的一般形式:类型符 *标识符;说明:“*”直接修饰的“标识符”是指针变量。int*p,x;/*p是指针变量,x是整型变量*/指针所指对象的类型称为指针的基准类型。int*p1;/*p1的基准类型为整型,即p1所指向对象的类型是整型*/char*p2;/*p2的基准类型为字符型,即p2所指向对象的类型是字符型*/第33页/共79页2.6.4 指针变量的初始化#include void main()int*p;*p=5;printf(*p=%dn,*p);错误代码:
18、可能引起严重后果不定值p指向不可预料的指向不可预料的内存空间内存空间*p可以表示可以表示p变量所指的变量所指的变量变量第34页/共79页初始化指针变量的方法主要有以下3种:int a,*p;p=&a;int a,*p1,*p2=&a;p1=p2;使用malloc函数或calloc函数,给它们分配一个自由的内存空间地址。apap1p2第35页/共79页2.6.5 指针变量的访问 格式为:*指针变量例:int a=5,*p=&a;la为整型变量,变量里存放的是为整型变量,变量里存放的是5lp为指针变量,变量里存放的是变量为指针变量,变量里存放的是变量a的的地址地址l&a表示变量表示变量a的地址的地
19、址l*p表示变量表示变量p所指向的变量,即所指向的变量,即5ap&a5*p第36页/共79页p+1 p-1+-运算第37页/共79页5.4 数组与指针 5.4.1 一维数组与指针1、使用指针引用数组元素 系统给一个一维数组在内存中分配的一片连续存储空间,系统给一个一维数组在内存中分配的一片连续存储空间,C C语言规定其数组名就语言规定其数组名就是数组在内存中的是数组在内存中的首地址首地址。使用指针引用数组元素的准备工作:int a10,*p /*定义数组与指针变量*/做赋值操作:p=a;p=&a0;两种方法效果完全一样第38页/共79页使用指针引用数组元素使用指针变量p指向数组a:方法一:in
20、t a10,*p;p=a;方法二:int a10,*p=a;a0a1a2.ai.a9pp+1或或a+1p+2或或a+2p+i或或a+ip+9或或a+9a数组数组注意:指针变注意:指针变量量p的运算的运算*(p+0)*(p+1)*(p+2)*(p+i)*(p+9)第39页/共79页说明:p+i指向元素ai 使用指针法引用一维数组的第i个元素的方法:使用指针变量*(p+i)访问元素ai。使用数组名*(a+i)访问元素ai。指向数组的指针变量也可以带下标,即:pi与*(p+i)等价,表示元素ai。第40页/共79页例子:方法一分析int i,imax,max,aN;for(i=0;iN;i+)sca
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 数组 字符串 指针
限制150内