C++程序设计 5章 数组与指针_ppt.txt

大学C++程序设计教程-杨国兴及例题-课件PPT

收藏

资源目录
跳过导航链接。
大学C程序设计教程-杨国兴及例题-课件PPT.zip
C++程序设计教程-杨国兴及例题-PPT演示文稿
C++程序设计教程-杨国兴及例题-PPT课件文件
C++程序设计教程-杨国兴及例题-大学教学资料
(课件资料)《C++程序设计教程》-杨国兴-电子教案及例题
压缩包内文档预览:
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:21836152    类型:共享资源    大小:1.57MB    格式:ZIP    上传时间:2019-09-06 上传人:QQ24****1780 IP属地:浙江
25
积分
关 键 词:
大学 C++ 程序设计 教程 杨国兴 例题 课件 ppt
资源描述:
大学C++程序设计教程-杨国兴及例题-课件PPT,大学,C++,程序设计,教程,杨国兴,例题,课件,ppt
内容简介:
第5章 数组与指针5.1 数组5.2 指针5.3 动态内存分配5.4 指针作为函数的参数5.5 指针数组与多级指针5.1 数组 数组:具有相同数据类型的若干变量按序进行存储的变量集合 。 数组有一维、二维和多维数组。5.1.1 一维数组 1. 一维数组的定义 数据类型 数组名常量表达式; 如: int a10; 说明: (1) 数组名与变量名一样都是标识符,必须遵循标识符的命名规则。 (2) “数据类型”是指数组元素的数据类型,可以是任一基本类型或构造类型,同一个数组的每个元素都具有相同的数据类型。第5章 数组与指针5.1 数组5.1.1 一维数组(续一) (3) “常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。 (4) 数组元素的下标从0开始,即数组中第一个元素的下标为0。如上面定义的数组a的第一个元素是a0。 (5) 一个数组中的所有元素在内存中是连续存放的。 2. 一维数组的引用 引用格式: 数组名下标 其中下标可以为整型常量或表达式 注意:引用数组元素时,不要使下标越界! 如上面的数组a,其下标应为09!第5章 数组与指针例5.1 一维数组的引用 #include void main() int i,a10; for(i=0; i10; i+) ai = i*10; for(i=0; i10; i+) cout ai ; cout endl; 程序运行结果为:0 10 20 30 40 50 60 70 80 90 第5章 数组与指针5.1 数组5.1.1 一维数组(续一) 3. 一维数组的初始化 在定义数组的同时为数组元素提供初始值,称为数组的初始化。一维数组初始化的一般格式为: 数据类型 数组名常量表达式 = 值1, 值2, , 值n; 例如: (1) int a5 = 1,2,3,4,5; (2) int a = 1,2,3,4,5; 不指定数组长度,根据初值个数自动确定长度 (3) int a5 = 1,2,3; 初值个数小于数组长度,后面元素值自动赋为0 (4) int a5 = 0; 初值只写出一个0,则将所有元素都初始化为0第5章 数组与指针例5.2 用一维数组处理Fibonacci数列的前40项#include #include void main()int i;int f40=1,1;for(i=2; i40; i+)fi = fi-1 + fi-2;for(i=0; i40; i+)cout setw(12) fi;if( (i+1)%5 = 0)cout endl;cout endl;第5章 数组与指针例5.2(续)程序运行结果:第5章 数组与指针例5.3 用冒泡法对10个整数按从小到大的顺序排序分析:冒泡法的基本思想是通过相邻两个数之间的比较和交换,使较小的数逐渐从底部移向顶部,较大的数逐渐从顶部移向底部。以5个整数排序为例,过程如图所示。 整个排序过程由两层循环完成,第一次外层循环通过相邻两个数的比较交换,将待排序数据中的最大数8移到最后,此时最后一个数8已经排好序。第二次外层循环再把剩下的4个数两俩比较交换,将其中最大的数5移到a3的位置,此时最后两个数5,8已经排好序。一直到最后将所有数据都排好序。第5章 数组与指针例5.3(续一)#include #include void main()int i,j,t,a10;cout 请输入10个整数,用空格分隔:;for(i=0; i ai;for(i=0; i10-1; i+) for(j=0; j aj+1) t = aj; aj = aj+1; aj+1=t; cout 排序后的数据:; for(i=0; i10; i+) cout setw(5) ai; 第5章 数组与指针程序运行结果为:请输入10个整数,用空格分隔:8 3 9 18 32 42 17 24 25 13排序后的数据:3 8 9 13 17 18 24 25 32 42 5.1 数组5.1.2 二维数组 1. 二维数组的定义 数据类型 数组名常量表达式1常量表达式2; 如: int a23; 二维数组在内存中按行存放。 2. 二维数组的引用 引用格式: 数组名下标1下标2 其中下标可以为整型常量或表达式 第5章 数组与指针a00 a01 a02a10 a11 a12例5.4 二维数组的引用 #include void main()int i,j, a34;for(i=0; i3; i+)for(j=0; j4; j+) aij = (i+1)*10+j;for(i=0; i3; i+)for(j=0; j4; j+) cout aij ;cout endl;程序运行结果为:10 11 12 13 20 21 22 23 30 31 32 33 第5章 数组与指针5.1 数组5.1.2 二维数组(续) 3. 二维数组的初始化 (1)分行初始化 如: int a34 = 1,2,3,4,5,6,7,8,9,10,11,12 ; (2)按二维数组在内存中的排列顺序给各元素赋初值 如: int a34 = 1,2,3,4,5,6,7,8,9,10,11,12 ; (3)对部分数组元素初始化 如: int a34 = 1,2,3,4,5,6,7,8 ; int a34 = 1,2,3,4,5,6,7;第5章 数组与指针例5.5 将两个2*3的二维数组中的对应元素的值相加后存入第3个数组中,并输出到屏幕。 #include #include void main()int i,j,c23;int a23=1,2,3,4,5,6;int b23=7,8,9,10,11,12;for(i=0; i2; i+)for(j=0; j3; j+)cij=aij+bij;for(i=0; i2; i+)for(j=0; j3; j+)cout setw(4) cij;cout endl; 程序运行结果为: 8 10 12 14 16 18第5章 数组与指针例5.6 找出4*4二维数组中对角线上元素的最大值。 #include #include void main()int a44 = 11,24,53,14,51,36,27,18,29,15,41,62,23,84,75,26;int i,j,max;for(i=0; i4; i+)for(j=0; j4; j+)cout setw(4) aij;cout endl;max = a00;for(i=1; i max)max = aii;cout 对角线的最大值是: max;程序运行结果为: 11 24 53 14 51 36 27 18 29 15 41 62 23 84 75 26 对角线的最大值是:41 第5章 数组与指针5.1 数组5.1.3 字符数组 1. 字符数组的定义 char 数组名常量表达式; char 数组名常量表达式1常量表达式2; 如: char a10, b34; 2. 字符数组的初始化 char 数组名常量表达式 = 字符1, 字符2, , 字符n; 如:char s10=c, , p, r, o, g, r, a, m; 注意:初值个数如大于数组长度会发生编译错误 若初值个数小于数组长度,后面多余元素赋为0 若初值个数与数组长度相同,定义数组时长度可以省略第5章 数组与指针5.1 数组5.1.3 字符数组(续一) 用字符串常量初始化字符数组: 如: char s10=“c program”; 或 char s10= “c program”; 注意这种方式要保证字符数组长度字符串的字符个数+1 3. 字符数组的引用 (1)单个数组元素的引用 如输出上面的字符数组s,可用以下语句: for(int i = 0; i10; i+ ) cout si; (2)字符数组的整体引用 也可用以下方式输出字符数组s: cout s;第5章 数组与指针5.1 数组5.1.3 字符数组(续二) 4. 字符串与字符串结束标志 C+使用字符数组存放字符串,为了测试字符串的实际长度,在字符串结尾定义了一个结束标志 0( ASCII码值为0的字符 ) 例5.9 求一个字符串的实际长度#include void main()char s20 = “C Program”; /后面的11个元素都初始化为 0int i, len=0;for(i=0; si!=0; i+)len+;cout len endl; 第5章 数组与指针5.1 数组5.1.3 字符数组(续三) 5. 常用的字符串处理函数 对字符串进行比较、复制等操作的系统函数,使用前需包含头文件string.h。 (1)strcmp() 函数比较两个字符串的大小 strcmp(字符串1,字符串2) 函数返回值: a字符串1与字符串2相等,函数返回值等于0;b字符串1大于字符串2,函数返回值等于1; c字符串1小于字符串2,函数返回值等于-1。 字符串比较规则:从两个字符串的第一个字符开始,每对相应字符按ASCII码大小进行比较,直到对应字符不相同或达到串尾为止。第5章 数组与指针例5.10 strcmp()函数的应用 #include #include void main()char a10 = Program;char b10 = Programer;char c10 = Problem;int i,j,k,l;i = strcmp(a,b);j = strcmp(a,c);k = strcmp(a,Program);l = strcmp(c,a);cout i j k l endl; 程序运行结果为: -1 1 0 -1第5章 数组与指针5.1 数组5.1.3 字符数组(续四) (2)strcpy() 函数复制字符串 strcpy(字符数组,字符串) 函数执行后将字符串复制到字符数组中。 注意: 字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志0一起复制。 不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,必须用函数strcpy()复制。第5章 数组与指针例5.11 strcpy()函数的应用 #include #include void main()char a20;char b20 = C+ Program;strcpy(a, b);strcpy(b, C+);cout a endl;cout b endl; 程序运行结果为:C+ ProgramC+第5章 数组与指针5.1 数组5.1.3 字符数组(续五) (3)strcat() 函数连接字符串 strcat(字符数组,字符串) 函数执行后将字符串连接到字符数组后面。 注意: 字符数组必须定义得足够大,以便容纳连接后的目标字符串。 连接后,第二个参数字符串的内容保持不变。第5章 数组与指针例5.12 strcat()函数的应用 #include #include void main()char a20 = C+ ;char b20 = Program;strcat(a, b);strcat(b, design);cout a endl;cout b endl; 程序运行结果为:C+ ProgramProgram design第5章 数组与指针5.1 数组5.1.3 字符数组(续六) (4)strlen() 函数求字符串实际长度(不包括结束符) strlen(字符串) (5)strlwr() 函数将字符串中的大写字母转换成小写 strlwr(字符串) 其中参数字符串是字符数组 (6)strupr() 函数将字符串中的小写字母转换成大写 strupr(字符串) 其中参数字符串是字符数组第5章 数组与指针例5.13 strlen()函数的应用 #include #include void main()char a20 = C+;int i = strlen(a);int j = strlen(C+ Program);cout i j endl; 程序运行结果为:3 11第5章 数组与指针例5.14 strlwr()和strupr()函数的应用 #include #include void main()char a20 = C+ Program;char b20 = C+ Program;strlwr(a);strupr(b);cout a endl;cout b endl; 程序运行结果为:c+ programC+ PROGRAM第5章 数组与指针5.2 指针5.2.1 地址与指针的概念 1. 内存地址 计算机的内存储器被划分成一个个的存储单元,这些存储单元按一定的规则编号,这个编号就是存储单元的地址。 每个存储单元的大小为一个字节,每个单元有一个唯一的地址。 2. 变量的地址 在程序中定义的所有变量,都要分配相应的存储单元,不同类型的数据所需要的存储空间的大小不同。 系统分配给变量的内存空间的起始单元地址称为该变量的地址。 如: int a; 则0x3000为变量a的地址第5章 数组与指针5.2 指针5.2.1 地址与指针的概念(续) 3. 指针与指针变量 (1)指针:一个变量的地址也称为该变量的指针。 (2)指针变量:用于存储其它变量的指针(即地址)的变量。 指针变量的定义: 数据类型 *指针变量名; 如: int *p1; float *p2; char *p3; 注意:指针变量所指向的变量类型不能改变 指针变量必须指向具体内存地址才能引用,如: int *p; *p=10; (3)指针运算符(*)与取地址运算符(&)第5章 数组与指针例5.15 通过指针变量存取变量的值 #include void main()int a, *p1;double b, *p2;char c, *p3;p1 = &a;p2 = &b;p3 = &c;*p1 = 10;*p2 = 11.2;*p3 = A;cout a endl;cout b endl;cout c endl; 程序运行结果为:1011.2A第5章 数组与指针例5.16 输入a和b两个数,按从小到大的顺序输出 #include void main()int a, b;int *p1, *p2, *p; cout a b;p1 = &a;p2 = &b;if( *p1 *p2 )p = p1;p1 = p2;p2 = p;cout min= *p1 max= *p2 endl; 程序运行结果为:请输入两个整数:30 10min = 10 max = 30第5章 数组与指针5.2 指针5.2.2 指针运算 指针运算包括算数运算、关系运算与赋值运算。 指针可以与整数进行加减运算,结果与指针所指向的数据类型有关。p+n表示指针p当前所指向位置后面第n个同类型数据的地址, p-n表示指针p当前所指向位置前面第n个同类型数据的地址。 指向同一种数据类型的指针可以进行关系运算。如果两个相同类型的指针相等,表示这两个指针指向同一个地址。 指针也可以与0进行比较运算,如果p=0成立,我们称p是一个空指针,即指针p还没有具体指向。 为了避免使用没有指向的指针,在定义指针变量时,可以将其初始化为0(也可以写成NULL)。第5章 数组与指针例5.17 指针与整数的加减运算 #include void main()int a, *p1,*p2;double b, *p3, *p4;p1 = &a;p3 = &b;cout p1 p3 endl;p2 = p1+1; /p1+1与p3+1的含义不同,与指针数据类型有关p4 = p3+1;cout p2 p4 endl;p2 = p1-1; /p1-1与p3-1的含义不同,与指针数据类型有关p4 = p3-1;cout p2 p4 endl;p2 = p1+5;p4 = p3+5;cout p2 p4 endl; 程序运行结果为:0x0012FF7C 0x0012FF6C0x0012FF80 0x0012FF740x0012FF78 0x0012FF640x0012FF90 0x0012FF94第5章 数组与指针例5.18 使用空指针 #include void main()int a, *p=NULL;cout p endl;if(p!=NULL)*p=10;cout 将10赋值给p所指向的地址 endl;elsecout p是空指针,不能使用! endl;p = &a;cout p endl;if(p!=NULL)*p=10;cout 将10赋值给p所指向的地址 endl;elsecout p是空指针,不能使用! endl; 程序运行结果为:0x00000000p是空指针,不能使用!0x0012FF7C将10赋值给p所指向的地址第5章 数组与指针5.2 指针5.2.3 用指针处理数组 数组在内存中是连续存放的,数组名就是数组的首地址(第一个元素的地址),指针可以与整数进行加减运算,利用这一性质可以方便地用指针处理数组。 第5章 数组与指针例5.19 使用指针输出数组中的所有元素 #include void main()int a6 = 1,2,3,4,5,6;int *p;p = a;for(int i=0; i6; i+)cout *p ;p+;cout endl; 程序运行结果为:1 2 3 4 5 6第5章 数组与指针例5.20 指向同一个数组的两个指针的减法运算#include void main()int a10 = 1,2,3,4,5,6,7,8,9,10;int *p1, *p2;p1 = a;p2 = &a3;cout p2-p1 endl;p1 = &a2;p2 = &a7;cout p2-p1 endl; 程序运行结果为:3 5第5章 数组与指针5.3 动态内存分配 在程序运行过程中根据需要动态分配存储空间,不需要时还可以将空间释放,通过new和delete运算符实现。 1. 动态分配一个数据的存储空间 通过new运算符实现动态分配内存,格式如下: new 类型名(初值) 如: int *p1, *p2; p1 = new int(10); p2 = new int; 运算符delete用来删除由运算符new动态分配的存储空间。使用格式如下: delete 指针名; 如:delete p1; 第5章 数组与指针5.3 动态内存分配 2. 动态分配多个连续的数据存储空间 通过new运算符动态分配数组,格式如下: new 类型名整型表达式 如: int *p1; p1 = new int10; 用delete删除动态数组时,要在指针前加 “”。格式如下: delete 指针名; 如:delete p1; 第5章 数组与指针例5.21 动态内存分配的使用#include void main()int *p1, *p2;p1 = new int(10);p2 = new int10;int i;for(i=0; i10; i+)*(p2+i) = i;cout *p1 endl;for(i=0; i10; i+)cout *(p2+i) ;cout endl;for(i=0; i10; i+)cout p2i “ ”; / p2i 与 *(p2+i)所访问的数据相同cout endl; delete p1;delete p2; 程序运行结果为:100 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9 第5章 数组与指针5.4 指针作为函数的参数5.4.1 指针变量作为函数的参数 指针作为函数的参数,实际上传递的是变量的地址,进行的是地址传递。 例5.22 指针作为函数参数,被调函数中交换参数值第5章 数组与指针#include void swap(int *x, int *y);void main()int a, b;a = 10;b = 20;swap(&a, &b);cout a , b endl;void swap(int *x, int *y)int temp;temp = *x;*x = *y;*y = temp;5.4 指针作为函数的参数5.4.1 指针变量作为函数的参数(续) 例5.22 程序运行过程中变量值的变化分析第5章 数组与指针(a)(b)(c)(d)程序运行结果为:20,105.4 指针作为函数的参数5.4.2 数组作为函数的参数 数组元素作为函数的参数,与普通变量作为函数的参数相同。数组名作为函数的参数实际上传递的是数组的首地址,进行的是地址传递。 例5.23 编写一个函数,将数组中的元素按照相反的顺序存放 分析:将数组名和元素个数作为函数的参数,可以通过地址访问数组中的所有元素。在函数中将数组的第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,一直进行到中间,即完成反序存放。第5章 数组与指针例5.23 源程序#include void inv(int x, int n);void main()int i,a10=0,1,2,3,4,5,6,7,8,9;cout 原数组: endl;for(i=0;i10;i+)cout ai ;cout endl;inv(a,10);cout 交换后的数组: endl;for(i=0;i10;i+)cout ai ;cout endl; 程序运行结果为:原数组:0 1 2 3 4 5 6 7 8 9交换后的数组:9 8 7 6 5 4 3 2 1 0第5章 数组与指针void inv(int x, int n)int temp,i,j,m;m=(n-1)/2;for(i=0;i=m;i+)j=n-1-i;temp=xi;xi=xj;xj=temp; 注意:由于传递的是数组地址,因此形参x和实参a指向相同的内存地址,因此在函数体中对x的操作实际上就是对a的操作例5.23 (续)第5章 数组与指针注意:数组名作为函数参数传递的是数组首地址,因此也可以直接将形参改为指针,当数组名作为实参时,同样能够传递数组首地址。将函数inv()做以下修改:void inv(int *x, int n)int *i, *j, temp, m;m=(n-1)/2;for(i=x, j=x+n-1; ij; i+, j-)temp=*i;*i=*j;*j=temp;5.5 指针数组与多级指针5.5.1 指针数组 数组元素是指针的数组,称为指针数组。 定义格式: 类型名 *数组名常量表达式; 如: int *p110; double *p210; 第5章 数组与指针例5.24 用指针数组处理二维数组的元素#include void main()int line33=1,0,0, 0,1,0,0,0,1;int *p_line3; /声明整型指针数组p_line0=line0; /初始化指针数组元素p_line1=line1;p_line2=line2;coutMatrix test:endl; /输出单位矩阵for(int i=0;i3;i+) /对指针数组元素循环for(int j=0;j3;j+) /对矩阵每一行循环coutp_lineij ;coutendl; 程序运行结果为:1 0 00 1 0 0 0 1第5章 数组与指针5.5 指针数组与多级指针5.5.2 多级指针 如果一个指针变量保存的是另一个指针变量的地址,我们称之为指向指针的指针,或多级指针。 定义格式: 类型名 *指针变量名; 如: int *p1; double *p2; 第5章 数组与指针例
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学C++程序设计教程-杨国兴及例题-课件PPT
链接地址:https://www.renrendoc.com/p-21836152.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!