四章数组与指针ppt课件

上传人:工**** 文档编号:569321447 上传时间:2024-07-28 格式:PPT 页数:76 大小:603.50KB
返回 下载 相关 举报
四章数组与指针ppt课件_第1页
第1页 / 共76页
四章数组与指针ppt课件_第2页
第2页 / 共76页
四章数组与指针ppt课件_第3页
第3页 / 共76页
四章数组与指针ppt课件_第4页
第4页 / 共76页
四章数组与指针ppt课件_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《四章数组与指针ppt课件》由会员分享,可在线阅读,更多相关《四章数组与指针ppt课件(76页珍藏版)》请在金锄头文库上搜索。

1、 C/C+ C/C+程序设计C/C+程序设计程序设计胡立坤胡立坤消貉爱魁悯价凰滑曾桂筛匀遇笑制旦怕彦让遇驾穷妆蔑墒畴乎且拆全嚼暴四章数组与指针ppt课件四章数组与指针ppt课件1uangXi University C/C+ C/C+程序设计第第4章数组与指针及其应用章数组与指针及其应用4.1 一维数组4.2 二维数组4.3 字符串4.4 指针和数组4.5动态数组4.6 程序举例数组用于保存大量同类型的相关数组用于保存大量同类型的相关数组用于保存大量同类型的相关数组用于保存大量同类型的相关数据,数据,数据,数据,如矩阵运算,表格数据等。如矩阵运算,表格数据等。如矩阵运算,表格数据等。如矩阵运算,

2、表格数据等。未橱仍脑笨琵狮龄傈佬悸艳尉髓完讫认酬粗供赵矽沮尹丽嗣砸吓咳到溢懈四章数组与指针ppt课件四章数组与指针ppt课件2uangXi University C/C+ C/C+程序设计4.1一维数组一维数组4.1.1引例引例例例4.1求求N个学生的平均成绩,并统计高于平均分的人数个学生的平均成绩,并统计高于平均分的人数。用以前所学知识实现:用以前所学知识实现:int k=0;float s,ave,sum=0;for(int i=0;is; sum=sum+s; ave=sum/100; for(i=0;is; if(save) k+; 用数组来实现:用数组来实现:int k=0;floa

3、t s100,ave,sum=0;for(i=0;isi; sum=sum+si; ave=sum/100; for(i=0;iave)k+; 数组:一组数据类型相同的元素按一定顺序存放,构成的数据集合。数组:一组数据类型相同的元素按一定顺序存放,构成的数据集合。采用随机数函数采用随机数函数si=rand()%101雌蔼掏蚤妥墓峭滇遇潘钵乡聚晋篙哪离糜搬相钵理卖帧店懒奎韦珊通蝶偏四章数组与指针ppt课件四章数组与指针ppt课件3uangXi University C/C+ C/C+程序设计4.1一维数组一维数组4.1.2一维数组的定义、存储和初始化一维数组的定义、存储和初始化(1)数组的形式数

4、组的形式数据类型数据类型数组名数组名整型常量表达式整型常量表达式;如:如:ints5;s0s1s2s3s4下标从下标从0开始开始数组名是常量,表示数组在内存中的首地址。数组名是常量,表示数组在内存中的首地址。数组长度应该为整型常量表达式,不能是变量。如:数组长度应该为整型常量表达式,不能是变量。如:正确:正确: const int s=10; int as; float f5; 错误:错误: int s=10; int as; float b3.4 伯译柏舜打傀墅惶士腥副吧笔枣浙农募尉北霸吹剐晴具只理懂芋等握所浩四章数组与指针ppt课件四章数组与指针ppt课件4uangXi Universit

5、y C/C+ C/C+程序设计4.1一维数组一维数组(2)数组的初始化数组的初始化a.给所有元素赋初值。给所有元素赋初值。如:如:inta5=0,2,4,6,8;或或inta=0,2,4,6,8;b.给部分元素赋初值。如给部分元素赋初值。如:int a10=1,3,5,7,9;花括号内列出的值赋给前面的若干个元素,其余元素自动赋花括号内列出的值赋给前面的若干个元素,其余元素自动赋0。以下的语句均是错误以下的语句均是错误:inta10;a=1,3,5,7,9;/数组名是个地址常量,不能被赋值。数组名是个地址常量,不能被赋值。inta10;a10=1,3,5,7,9;/a10不是数组中的元素,并且

6、不能用花括号为一个元素赋多不是数组中的元素,并且不能用花括号为一个元素赋多个值。个值。intc3=1,2,3,4;/常量个数超过数组定义的长度。常量个数超过数组定义的长度。花括号花括号浇妹伏廖脊肌窒鸭哺芜讳彰荔汾朗野疹痘骸漫银悯阳蛰翘蒙焚蹿粳挚享豺四章数组与指针ppt课件四章数组与指针ppt课件5uangXi University C/C+ C/C+程序设计4.1一维数组一维数组说明:说明:数组大小最好用宏来定义,以适应未来可能的变化数组大小最好用宏来定义,以适应未来可能的变化#define SIZE 10int aSIZE;对数组每个元素的使用与普通变量无异,可以快速地随机对数组每个元素的使

7、用与普通变量无异,可以快速地随机访问访问可以用任意表达式作为下标,动态决定访问哪个元素可以用任意表达式作为下标,动态决定访问哪个元素for (i=0; iSIZE; i+) ai = 2 * i;下标越界是下标越界是大忌大忌!使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果sizeof可以用来获得数组大小可以用来获得数组大小一旦定义,不能改变大小一旦定义,不能改变大小慨铂颊抱祥忻福乓钟柄质桌陶原悲筏役泥鸯饥寥是乡坷鞘竟潍赠躲黎婶臂四章数组与指针ppt课件四章数组与指针ppt课件6uangXi University C/C+ C/C+程序设计4.1一维数组一维数

8、组4.1.34.1.3数组元素的引用和基本操作数组元素的引用和基本操作(1)(1) 数组元素的引用 形式:数组名下标-相当于一个普通变量如有:如有: int a10=1,2,3,4,5,6,7,8,9,10,b10,i(2)int a10=1,2,3,4,5,6,7,8,9,10,b10,i(2);则:则: a3=a0+ai a3=a0+ai; / a3=1+3=4 / a3=1+3=4 couta2+i couta2+i; / /输出输出a4a4元素的值元素的值 coutaa3 coutaa3; / / aaa3a3= = a4=5a4=5 couta10; /数组下标越界数组下标越界 co

9、uta; /对数组一般不能作为一个整体进行操作对数组一般不能作为一个整体进行操作 b=a;脐馁尿水涪囊献泣蹲瀑嚣虹套默空坑浚选闺唁偷辫桥蹲凳颧缴衍蔫峪阶无四章数组与指针ppt课件四章数组与指针ppt课件7uangXi University C/C+ C/C+程序设计4.1一维数组一维数组(2)(2)基本操作基本操作假设有定义:假设有定义:intaN;N是已定义过的符号常量。是已定义过的符号常量。数组元素的输入和输出数组元素的输入和输出-for(j=0;jaj;-for(j=0;jN;j+)coutaj;-for(i=0;i10;i+)scanf( %d ,&ai);-for(i=0;i10;i

10、+)printf( %d ,ai);通过随机函数通过随机函数rand()产生产生0100的的N个数据个数据-for(i=0;iN;i+)ai=rand()%101;数组元素的求和数组元素的求和-for(sum=0,j=0;jN;j+)sum+=aj;升佃椭兔宛艺有毒柳柞志耕反梦怎景屡促号炎潭嘉腔汀茸们庆炭习怯撤吗四章数组与指针ppt课件四章数组与指针ppt课件8uangXi University C/C+ C/C+程序设计4.1一维数组一维数组求数组中的最大元素求数组中的最大元素-max=a0; /假设第一个元素值最大 for(j=1; jmax)max=aj;求最大元素下标求最大元素下标-i

11、max=0;/imax代表最大元素下标代表最大元素下标 for (j=1;jaimax)imax=j;将最大元素放于某一特定位置将最大元素放于某一特定位置(如放在最前头如放在最前头)-imax=0; for(j=1;jaimax)imax=j; if(imax!=0) t=a0;a0=aimax;aimax=t;冕诚吭播称逛奏旷挛永历妻遂些薪猛瓮棒犯丧乃汲讫鸡厢池经烈词凶望闺四章数组与指针ppt课件四章数组与指针ppt课件9uangXi University C/C+ C/C+程序设计4.1一维数组一维数组4.1.4 数组排序排序是将一组数按递增或递减的次序排列,如按学排序是将一组数按递增或递

12、减的次序排列,如按学生的成绩、球赛积分等排序。常用的算法有生的成绩、球赛积分等排序。常用的算法有: 选择法选择法 () 冒泡法冒泡法 () 插入法插入法 快速排序法快速排序法 . 澡盅涛檀绎喧擅炽描棘辊窜蓖捂隶颊敢豁膘窘烛脱纪隅京贷诗掐删梅厅雾四章数组与指针ppt课件四章数组与指针ppt课件10uangXi University C/C+ C/C+程序设计4.1一维数组一维数组(1)选择法排序选择法排序-基本基本思想思想:(a)从从n个数的序列中选出最小的数个数的序列中选出最小的数(递增递增),与第,与第1个数交换位置;个数交换位置;(b)除第除第1个数外,其余个数外,其余n-1个数再按个数再

13、按(1)的方法选出次小的数,与的方法选出次小的数,与第第2个数交换位置个数交换位置;(c)重复重复(1)n-1遍,最后构成递增序列。遍,最后构成递增序列。例例4.3对存放在数组中的对存放在数组中的6个数,用选择法按递增排序。个数,用选择法按递增排序。下标下标 0 15 1 25 2 35 3 45 4 5for( i= 0;i5;i+) min= i; for(j=i+1;j6;j+) if(ajamin)min= j; if(i!=min) temp=ai; ai= amin; amin=temp; 母酮郴肃馈堵囤贾牵柯章荧旨朵浆渠带哀碗失郎七执眩蚌殊乔爷拒店袋郊四章数组与指针ppt课件四章

14、数组与指针ppt课件11uangXi University C/C+ C/C+程序设计4.1一维数组一维数组(2)冒泡法排序冒泡法排序-基本思想:基本思想:(a)从第一个元素开始,对数组中两两相邻的元素比较,将值较小从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较完毕,最的元素放在前面,值较大的元素放在后面,一轮比较完毕,最大的数存放在大的数存放在aN-1中;中;(b)然后对然后对a0到到aN-2的的N-1个数进行同个数进行同(a)的操作,次最大数的操作,次最大数放入放入aN-2元素内,完成第二趟排序;依次类推,进行元素内,完成第二趟排序;依

15、次类推,进行N-1趟排趟排序后,所有数均有序。序后,所有数均有序。例例4.4用冒泡排序法实现例用冒泡排序法实现例4.38 3497K=5348 79K=4 34789K=33 47 8 9K=2for(i=0;i5;i+) for(j=1;jaj ) temp=aj-1; aj-1=aj; aj=temp; 思考:思考:当数据未交换,当数据未交换,说明数组说明数组已有序已有序 ,如何,如何结束排序?结束排序? 腊憾确殃揪昭蟹惰庐倘卖棱柴太属质彻龟召凌丑胶侣粳旅禁瑚岩握剁配刺四章数组与指针ppt课件四章数组与指针ppt课件12uangXi University C/C+ C/C+程序设计4.2二

16、维数组二维数组4.2.1二维数组的定义和初始化二维数组的定义和初始化(1)数组的定义数组的定义 形式:数据形式:数据类型型 数数组名名 常量表达式常量表达式11常量表达式常量表达式22; 如如:float a23;:float a23;a00 a01 a02 a10 a11 a12 以以“先行后列先行后列”的规则连续存放的规则连续存放: : 序号序号= =当前行号当前行号* *每行列数每行列数+ +当前列号当前列号 序号:序号: 0 1 2 3 4 5叫劣茁旭铁截骗光呢杉脾矾龄芭玲孤腕整枕氮仆菇欠舟酵锅筹岳胶春缴坤四章数组与指针ppt课件四章数组与指针ppt课件13uangXi Univers

17、ity C/C+ C/C+程序设计4.2二维数组二维数组(2)数组的初始化数组的初始化(a)按)按在内存排列在内存排列顺序对所有元素赋初值。顺序对所有元素赋初值。(b)按行给所有元素赋初值,每一行的数据放于一个花括号内。)按行给所有元素赋初值,每一行的数据放于一个花括号内。(c)按行给部分元素赋初值,省略的元素初值此时自动为)按行给部分元素赋初值,省略的元素初值此时自动为0。对应的数组对应的数组b为为:(d)按行赋初值也可省略第一维的长度。)按行赋初值也可省略第一维的长度。 对应的数组对应的数组c为为:int a23=1,2,3,4,5,6; 或或 int a3=1,2,3,4,5,6;int

18、 a23=1,2,3,4,5,6;int b34=1,2,0,3,4,0,0,5;int c 3=1,0,2;听燕负吾掠通误浅推阐良忽重蛇恬维泊秦兰困嗽略愁扑琐批咎巧跳腾色鬃四章数组与指针ppt课件四章数组与指针ppt课件14uangXi University C/C+ C/C+程序设计4.2二维数组二维数组4.2.2二维数组的基本操作二维数组的基本操作(1)数组的输入、输出数组的输入、输出例例4.5输入两个矩阵输入两个矩阵A、B的值,求的值,求C=A+B。分析分析:(1)A、B矩阵相加,其实质是将两矩阵的对应元素相加。矩阵相加,其实质是将两矩阵的对应元素相加。相加的条件是有相同的行、列数。相

19、加的条件是有相同的行、列数。(2)输入可以通过空格、输入可以通过空格、Tab符和回车符控制;输出内循符和回车符控制;输出内循环不换行,出了内循环输出环不换行,出了内循环输出endl换行。换行。馅敝积纤座呼唁协辈蛛检呜券油庆霖岂挝玄躲川帜搞渠醋撬挡积沂之淳冶四章数组与指针ppt课件四章数组与指针ppt课件15uangXi University C/C+ C/C+程序设计4.2二维数组二维数组#include iostream.h #include iomanip.h void main() int a23,b23,c23,i,j; for ( i = 0; i2;i+) for( j=0; ja

20、ij; for ( i = 0; i2; i+) for( j = 0; jbij; for ( i = 0; i2; i+) /A+B矩矩阵,每个,每个对应元素相加元素相加 for( j =0; j3; j+) cij=aij+bij; for ( i = 0; i2; i+) for( j=0; j3; j+) coutsetw(4)cij; coutendl; 凄键挚渐惫朔涯旷企尽过僚脐擅薄褥鸽幸扣标褂吏磨段抱嵌烛兆锅辣它埃四章数组与指针ppt课件四章数组与指针ppt课件16uangXi University C/C+ C/C+程序设计4.2二维数组二维数组(2)求二维数组中最大(或最小

21、)元素及下标求二维数组中最大(或最小)元素及下标例例4.6对对33方阵,求最大元素及下标。方阵,求最大元素及下标。与一维数组求最大值的方式相同与一维数组求最大值的方式相同max=a00; imax=0; jmax=0;for ( i = 0; i3; i+) for( j=0; jmax) max=aij; imax=i; jmax=j;鼠堡乞涅炎吴普友僧见滥崖逊惶蛤澈钠管矮詹妻磕垂班掺旁师然编肪匹忘四章数组与指针ppt课件四章数组与指针ppt课件17uangXi University C/C+ C/C+程序设计4.2二维数组二维数组(3)矩阵转置矩阵转置:将矩阵以主对角线为轴线,将元素的行和

22、列将矩阵以主对角线为轴线,将元素的行和列位置调换。位置调换。如对如对33方阵转置方阵转置 1 2 3 1 4 7a = 4 5 6 b = 2 5 8 7 8 9 3 6 9for ( i = 0; i3; i+) for( j=0; ji; j+) t=aij; aij=aji; aji=t; 梦栋椒醚腑跨资关观谰加忍销攘咱妊涨榆仇卷浚揭蜀徽邻锄扇墅忆磕莎荣四章数组与指针ppt课件四章数组与指针ppt课件18uangXi University C/C+ C/C+程序设计4.2二维数组二维数组4.矩阵相乘矩阵相乘例例4.7求两个矩阵求两个矩阵aMN和和bNP的乘积的乘积c。设矩阵设矩阵A A、

23、B B为:为: 则则矩阵矩阵C C为:为:即即矩矩阵C C的第的第i i行第行第j j列元素可通列元素可通过右边右边公式求得公式求得:c00元素的实现:元素的实现:s=0;for(k=0;k3;k+)s+=a0k*bk0;c00=s;捏炎勤哪贺约俯绪圣越胚已硒蚊曼贩伶瓣扁组淬甩妹舞酝套辜拆熬艳循约四章数组与指针ppt课件四章数组与指针ppt课件19uangXi University C/C+ C/C+程序设计4.2二维数组二维数组#includeiostream.h#defineM2#defineN3#defineP4voidmain()intaMN=3,5,7,4,6,8,bNP=1,4,7

24、,10,2,5,8,11,3,6,9,12;intcMP,i,j,k,s;for(i=0;iM;i+)for(j=0;jP;j+)s=0;/求一个元素的值求一个元素的值for(k=0;kN;k+)s+=aik*bkj;cij=s;for(i=0;iM;i+)for(j=0;jP;j+)coutcij;coutendl;类姨常狱勃革阻澳丁慢嘿碍吮武铱蛀掀暑募唆擎漠扯掖妓灭锁办叔霄喊寸四章数组与指针ppt课件四章数组与指针ppt课件20uangXi University C/C+ C/C+程序设计4.3字符串字符串字符串常量:字符串常量: ab123ab1230系统自动添加系统自动添加 0(结束标

25、志符)(结束标志符)处理字符串的方法理字符串的方法有:有: 字符数字符数组、CStringCString(stringstring)类和字符指和字符指针。 本节只介绍前两种方法,后一种方法我们将在下一节介绍。本节只介绍前两种方法,后一种方法我们将在下一节介绍。捣必党殷贾坑瞅彼颊廊循获狂蛾年扇设榜泛搏琴奴盼天丝倾吾轧植富暴居四章数组与指针ppt课件四章数组与指针ppt课件21uangXi University C/C+ C/C+程序设计4.3字符串字符串4.3.1字符数组字符数组 (1)字符数组字符数组chars6;-既可以存放若干个字符,也可以存放一既可以存放若干个字符,也可以存放一个字符串。

26、个字符串。chars28;-可以存放一组相关的字符串可以存放一组相关的字符串,按要处按要处理字符串中最大长度来定义列数。理字符串中最大长度来定义列数。字符数组字符数组若干个字符若干个字符字符串字符串abcdabcd0C O B O L 0F O R T R AN 0s0s1si0si7拯岳冶护媒迅劝锦读潮辐竖摇轧查参哈吩敲昭苍杆艳筷医碘安健贱灭夯揍四章数组与指针ppt课件四章数组与指针ppt课件22uangXi University C/C+ C/C+程序设计4.3字符串字符串(2)字符数组的初始化字符数组的初始化(a)逐个字符赋初值逐个字符赋初值(b)用字符串为字符数组初始化用字符串为字符数

27、组初始化(c)字符串数组初始化字符串数组初始化对二维数组以字符串形式初始化。对于二维字符数对二维数组以字符串形式初始化。对于二维字符数组,用两个下标表示数组中的一个字符。组,用两个下标表示数组中的一个字符。char s10 = I, , a, m, , f, i, n, e; /s不是字符串不是字符串char s10 = I am fine;char s10 = I am fine;s是字符串,是字符串, 0 系统自动添加系统自动添加char a48=char a48=COBOL,FORTRAN,PASCAL,C/C+;沽摆祖茧雷递痰炒痊佃赡氓杀观营归莆赶呻惜拙蝗层哗液巩档瞅饮猪赔越四章数组与

28、指针ppt课件四章数组与指针ppt课件23uangXi University C/C+ C/C+程序设计4.3字符串字符串注意不要出现下面的错误注意不要出现下面的错误: char s10=“This is a book”;/长度超过了长度超过了 char s10; s = “I am fine”;/不能将字符串常量赋给地址不能将字符串常量赋给地址常量常量 char s10; s = I, , a, m, , f, i, n, e;/同样同样不能将一系列字符赋给地址常量不能将一系列字符赋给地址常量 char s34; s7=c;/不能将二维数组当成一维数组访问不能将二维数组当成一维数组访问铰卜百

29、祁涧尉肠柞盈乌要陕缆舌妖呕笼炽丧掣糖笑凌响注张约练啼艳拄桌四章数组与指针ppt课件四章数组与指针ppt课件24uangXi University C/C+ C/C+程序设计4.3字符串字符串(3)字符数组的输入字符数组的输入/输出输出逐个数组元素的输入逐个数组元素的输入/输出输出char s110;for (i = 0; is1i; /s1中是字符,不是字符串中是字符,不是字符串 /C:scanf(“%c”,&s1i) /for (i=0;i10;i+) couts1; cout s1; gets(s1);/C:scanf(%s,s1);scanf(%s,s1); puts(s1);/C:pr

30、intf(%s,s1);printf(%s,s1); for( int i=0; i2;i+) for( i=0; is1;cins1;语句,字符串中不能有空格。这与语句,字符串中不能有空格。这与scanfscanf一样。一样。gets()gets()和和puts()puts()是是对字符串整体输入对字符串整体输入/ /输出输出 ,应加,应加#include #include “stdio.hstdio.h”命令。并且允许字符串中的空格,命令。并且允许字符串中的空格,gets()gets()以回车符以回车符rr结结束。束。gets(gets(字符数组名或字符指针变量名字符数组名或字符指针变量名

31、););puts(puts(字符数组名或字符指针变量名字符数组名或字符指针变量名) )。恭鳖产硝剥贷喧驮责触警啥董勋翠谰落犊汁绸啦党忱票埃杆蛔龚另树催匣四章数组与指针ppt课件四章数组与指针ppt课件26uangXi University C/C+ C/C+程序设计4.3字符串字符串字符串输入函数字符串输入函数gets()gets() 没有提供限制输入字符串长度的方法,容易引起缓没有提供限制输入字符串长度的方法,容易引起缓冲区溢出,给黑客攻击以可乘之机。冲区溢出,给黑客攻击以可乘之机。 对输入字符串长度有限制的函数调用对输入字符串长度有限制的函数调用 fgets(buf, fgets(buf,

32、 sizeofsizeof (buf), stdin); (buf), stdin);对于对于scanfscanf,当用户的输入多于定义时,当用户的输入多于定义时,strstr数组将越界。所以数组将越界。所以scanfscanf被公认被公认为最易遭到黑客攻击的函数之一。为最易遭到黑客攻击的函数之一。getline(cin,str, getline(cin,str, 定界符定界符););从输入流读入一串字符,直到出现下列情况:从输入流读入一串字符,直到出现下列情况:(1)(1)到达文件尾,这样,输入流的到达文件尾,这样,输入流的edfbitedfbit被设置,调用方法被设置,调用方法file()

33、file()或或eof()eof()都将返回都将返回true;true;(2)(2)遇到分界字符,默认为遇到分界字符,默认为n,n,这种情况下,将把分界字符从输入流中这种情况下,将把分界字符从输入流中删除,而且不存储她;删除,而且不存储她;(3)(3)读取的字符到达最大的允许值,它将设置输入流的读取的字符到达最大的允许值,它将设置输入流的failbit,failbit,这意味着这意味着failfail()()方法返回方法返回true; /Attention !true; /Attention !实际上,实际上,cincin类中也有类中也有getlinegetline、getget成员函数,详细

34、地说明将在成员函数,详细地说明将在I/OI/O流那一流那一章给出。章给出。栖捶油沉永骨脐碑揣锭赵苹疥科尺胚秋邓独刘腿缀钉串琶青枢汀诧垣斥憾四章数组与指针ppt课件四章数组与指针ppt课件27uangXi University C/C+ C/C+程序设计4.3字符串字符串(4)字符串处理函数字符串处理函数 在标准在标准C+中使用下面函数时,应加中使用下面函数时,应加#includestring.h命令。命令。a.strlen(str)功能:求功能:求str所指向的字符串长度。不包括字符串结束标志所指向的字符串长度。不包括字符串结束标志0。说明:说明:str可为字符串常量、字符数组名或字符指针。可

35、为字符串常量、字符数组名或字符指针。b.strlwr(str)功能:将字符串中的大写字母转换成小写字母。功能:将字符串中的大写字母转换成小写字母。说明:说明:str为字符字符串常量、数组名或字符指针。为字符字符串常量、数组名或字符指针。c.strupr(str)功能:将字符串中的小写字母转换成大写字母。功能:将字符串中的小写字母转换成大写字母。说明:说明:str为字符字符串常量、数组名或字符指针。为字符字符串常量、数组名或字符指针。请锚先情胃刹笔碉妻畅柠濒茅迎掳玩筐燃淹抠潦摔咋炳暑咎柒诬钨柔盘钾四章数组与指针ppt课件四章数组与指针ppt课件28uangXi University C/C+ C

36、/C+程序设计4.3字符串字符串d.strcpy(str1,str2)功能:将功能:将str2所指的字符串复制到所指的字符串复制到str1中。中。说明:说明:str1和和str2为字符数组名或字符指针为字符数组名或字符指针,str2还可以是字符还可以是字符串常量。串常量。str1要有足够大的空要有足够大的空间。间。e.strcat(str1,str2)功能:将功能:将str2字符串内容连接到字符串内容连接到str1字符串内容的后面字符串内容的后面说明:说明:str1要有足够大的空间。要有足够大的空间。例如:例如:chars120=abcd;coutstrcat(s1,kkk)endl;/s1中

37、的内容变为中的内容变为abcdk设:设:char str210= aaa,str110; strcpy(str1,str2); str1=bb; str1=str2; 啮媳疡皑何失湖智濒螺泻垛滁哦意颤氮牛惑俄鸦珐便捐纱奢综隙通绸介怪四章数组与指针ppt课件四章数组与指针ppt课件29uangXi University C/C+ C/C+程序设计4.3字符串字符串f.strcmp(str1,str2)功能:比较字符串功能:比较字符串str1和和str2的大小。的大小。说明:从左至右逐个字符进行比较说明:从左至右逐个字符进行比较ASCII码值,直到出现不相码值,直到出现不相同字符或遇到同字符或遇到

38、0为止。为止。str1小于小于str2 返回返回-1str1等于等于str2返回返回0str1大于大于str2返回返回1例例4.8字符串处理函数示例字符串处理函数示例strcmp(strcmp(ABCDABCD, ,BDBD; ; / 结果为:结果为:-1 #include stdio.h#include string.hvoid main( ) char s80; while(1) gets(s); if(strcmp(s,pass) puts(Invalid password.n); else break; puts(passn);泪毡蛮当剔幸厂誓辱禽采姿冀怀谓氓臂寺尾汇餐岳压多铃怪坟凝趟

39、野戍咳四章数组与指针ppt课件四章数组与指针ppt课件30uangXi University C/C+ C/C+程序设计4.3字符串字符串4.3.2CString类类( (补充补充) )对字符串的存取及有关操作,在对字符串的存取及有关操作,在VC开发平台下还可通过开发平台下还可通过MFC中的中的CString类。类。(1)定义定义CString类对象类对象CString类的定义在类的定义在“afx.h”头文件中头文件中形式:形式:CString对象名;对象名;CString对象名对象名=字符串常量字符串常量 ;CString对象名对象名(字符串常量字符串常量);CString对象名对象名(字符

40、字符,intn);/重复产生重复产生n个相同的个相同的字符字符如:如:CStrings1=C/C+程序设计程序设计;CStrings(d,5);couts;/s获得字符串获得字符串ddddd/CString类中有多个构造函数类中有多个构造函数(多态多态)疯盟拷热麦亲妮搔蒂违馋姨粹示江爆承订吴滑殿纯谤忙鸯哀妨竟裕锯苫忱四章数组与指针ppt课件四章数组与指针ppt课件31uangXi University C/C+ C/C+程序设计4.3字符串字符串(2)输入输入/输出输出例例4.补补1示例示例#includeiostream.h#includeafx.hvoidmain()charc80;CSt

41、ringst1;coutc;st1=c;cout输出结果输出结果:;coutst1 、 =、=、!=!=关系运算关系运算st1=ASDFst1st3falsetrue 取取指指定定位位置置的的字字符符 , ,将将 CString CString 对象看成数组对象看成数组st10st10st13st13A/第一个字符位置为第一个字符位置为0F定磨濒体贝坝骨互令懂呈舶泡策墅拯隆苛乔尖描柏裴醛秒队钧射傲钠靴波四章数组与指针ppt课件四章数组与指针ppt课件33uangXi University C/C+ C/C+程序设计4.3字符串字符串(4)成员函数成员函数形式:函数值类型形式:函数值类型CStr

42、ing对象对象.成员函数名成员函数名(参数列表参数列表)a.取子串取子串形式:形式:CStringMid(intnFirst,intnCount)/取字符串中取字符串中nFirst位置开始的位置开始的nCount个字符个字符CStringLeft(intnCount)/取字符串的左边取字符串的左边nCount个字符个字符CStringRight(intnCount)/取字符串的右边取字符串的右边nCount个字符个字符有定义:有定义:CString s(12345 );则:则:s.Mid(2,2)的值为的值为34 s.Left(3)的值为的值为123害车冰拢猛士撂绅胞否掀窍具礁喻疑锁嘉绕灿江滨

43、豢赫踢框业或仑衣却底四章数组与指针ppt课件四章数组与指针ppt课件34uangXi University C/C+ C/C+程序设计4.3字符串字符串例例4.补补2 利用利用Left函数,输出如图所示的结果。函数,输出如图所示的结果。分分析析: 确确定定每每行行显显示示字字符符的的起起始始位位,通通过过setw(n)setw(n)显显示示一一个个空空格格的的位位数数来来实实现现,也也可可通通过过产产生生一一个个有有若若干干个个空空格格的的字字符符串串后后left(n) left(n) 显显示示n n个个空空格来实现。格来实现。显示可变的,利用显示可变的,利用left(n)left(n)。如果

44、不利用如果不利用left函数,你如函数,你如何输出如图所示的结果?何输出如图所示的结果? CStringst1(,30);/产生产生30个空个空CStringst2(ABCDEFGHIJKLMNOPQRS);for(inti=1;i=10;i+)coutst1.Left(10-i)st2.Left(2*i-1)endl;确裳动观愚倪锯筏块欧拧仆墒阿陪原八沪髓勒黎执粟蔫李竹术辟石毅刀巢四章数组与指针ppt课件四章数组与指针ppt课件35uangXi University C/C+ C/C+程序设计4.3字符串字符串b.查看字符串信息查看字符串信息intFind(TCHARch);/返回指定字符在

45、串中的位置返回指定字符在串中的位置intFind(LPCTSTRlpszSub);/返回指定子字符串在串中的位置返回指定子字符串在串中的位置intGetLength();/返回字符串的字符数返回字符串的字符数有定义:有定义:CString s (ABCDEF); 则:则:s.Find(C)的值为的值为2 s.Find(BCD)的值为的值为1 s.GetLength()的值为的值为6兄墟勺祖晒叫坪到史毅绸昨超烤辆肖惰秘概铭快鼻蕉岭藤榴颜碟砌梢愤纠四章数组与指针ppt课件四章数组与指针ppt课件36uangXi University C/C+ C/C+程序设计4.3字符串字符串例例4.补补3程序输

46、入程序输入5个单词,显示最长的单词及长度。个单词,显示最长的单词及长度。#include stdio.h“ #include iostream.h“ #include afx.hvoid main() CString st1,maxst; char s80; int maxlen(0),len,i; cout输入入单词 :endl; for(i=1;imaxlen) maxlen=len; /找找最长的单词最长的单词长度长度 maxst=st1; /找找最长的单词最长的单词 coutmaxstmaxlenendl;录眷嫌郴枉胶沿乞素蕊寅纲妊敖忘武菱枝虞装陌傣贵迭借奄惨滦崇坊碾抨四章数组与指针p

47、pt课件四章数组与指针ppt课件37uangXi University C/C+ C/C+程序设计4.3字符串字符串c.字符串修改字符串修改voidSetAt(intnIndex,TCHARch)/用字符替换指定位置的字符用字符替换指定位置的字符intInsert(intnIndex,TCHARch)/将字符插入到指定位置前将字符插入到指定位置前intDelete(intnIndex,intnCount=1)/从指定位置开始删除一个或多个字符从指定位置开始删除一个或多个字符intReplace(TCHARchOld,TCHARchNew)/将新字符替换字符串中的老字符将新字符替换字符串中的老字

48、符intReplace(LPCTSTRlpszOld,LPCTSTRlpszNew)/同上,区别替换的是子字符串同上,区别替换的是子字符串有定义:有定义:CString s (ABCDEF); 则:则:s.SetAt(1, b); couts; /输出输出AbCDEF s.Insert(1, b); couts; / 输出输出AbBCDEF s.Replace(g,k);couts; /输出输出ABCDEF s.Replace(BCD,bc); couts; /输出输出AbcEF思考:思考: 如何删如何删除字符串除字符串中任意子中任意子字符串?字符串? 囤循尚驻仁解呀炬骏铸弹树故赚裸抒煽哇薄斤

49、戊棕疯书渴油言盛嘱映朋启四章数组与指针ppt课件四章数组与指针ppt课件38uangXi University C/C+ C/C+程序设计4.3字符串字符串例例4.补补4对已知输入的字符串,用对已知输入的字符串,用定冠词定冠词替换替换The。#includeiostream.h#includeafx.hvoidmain()CStringst1(TheThereThenTheThara);cout替换前替换前st1=st1endl;st1.Replace(The,定冠词定冠词);cout替换后替换后st1=st1endl;羡惭歧伺太缚钉掏洗廷驯药虽虱喘减公炎睡港拖五嚼姻啡揽翟糙吸佯痴蛔四章数组与

50、指针ppt课件四章数组与指针ppt课件39uangXi University C/C+ C/C+程序设计4.3字符串字符串d.转换字符串转换字符串voidMakeUpper()/将字符串中的所有字符转换成大写将字符串中的所有字符转换成大写voidMakeLower()/将字符串中的所有字符转换成小写将字符串中的所有字符转换成小写voidMakeReverse()/将字符串中各字符的顺序倒转将字符串中各字符的顺序倒转voidEmpty()/将字符串中的所有字符删除将字符串中的所有字符删除有定义:有定义:CString s (ABCabc); 则:则:s. MakeUpper()MakeUpper

51、(); couts; 输出输出:ABCABC s. MakeReverse()MakeReverse(); couts; 输出输出:cbaCBA s. Empty()Empty();couts; 输出输出: (空)(空)团述凯杰君嘘甭悉展茹挺芦棱恳逾啦赎陆肇竞美冕澈蔷款误扰玲哉你晚瓦四章数组与指针ppt课件四章数组与指针ppt课件40uangXi University C/C+ C/C+程序设计4.3字符串字符串e.格式化输出格式化输出形式:形式:viodFormat(格式字符串,输出参数列表格式字符串,输出参数列表);功能:构造一个输出的字符串功能:构造一个输出的字符串,类似于类似于C中的中

52、的printf。其中:其中:“格式字符串格式字符串”由输出的文字和数据格式说明符组成,文字由输出的文字和数据格式说明符组成,文字可以是直接键入的各种字符,还可以是转义符;数据格式可以是直接键入的各种字符,还可以是转义符;数据格式说明符形式:说明符形式:%输出宽度输出宽度格式字符格式字符-常用格式常用格式d/c/s/f/lf“输出参数列表输出参数列表”表示要输出的数据,其个数与类型必须表示要输出的数据,其个数与类型必须与格式说明符依次对应。与格式说明符依次对应。有定义:有定义:CString s; 则:则:s.Format(a1=%d,a2=%5.2f,a3=%s,123,12.3,abc);

53、couts;输出:输出:a1=123,a2=12.30,a3=abc锌长府诬撰豪拉瘟宴蔗听吾钡绣济挪覆浴诡苔申健绘粉赶拙荣翌魄座渐架四章数组与指针ppt课件四章数组与指针ppt课件41uangXi University C/C+ C/C+程序设计4.3字符串字符串例例4.补补5利用利用Format函数显示函数显示10o180o之间每隔之间每隔10o对应对应的弧度、的弧度、sin、cos、平方根和、平方根和e指数的函数值。要求:指数的函数值。要求:除第一项是角度占除第一项是角度占3位整数外,其余各项宽度为位整数外,其余各项宽度为10、小、小数占数占5位。位。#includeiostream.h“

54、#includemath.h#includeafx.hvoidmain()CStrings,sl(-,55);inti;floatx;cout数学函数表数学函数表endl;coutslendl;/显示显示55个个-字符字符coutixsin(x)cos(x)sqr(i)exp(x)endl;for(i=10;i=180;i=i+10)x=i*3.14259/180;s.Format(%3d%10.5lf%10.5lf%10.5lf%10.5lf%10.5lfn,i,x,sin(x),cos(x),sqrt(x),exp(x);couts;迁炊歌尝搀兵设拷俺捻境期吉溜雁唾裸莱赛朗魁绘气峨扳赚男号

55、难垣脊妨四章数组与指针ppt课件四章数组与指针ppt课件42uangXi University C/C+ C/C+程序设计4.3字符串字符串例例4.补补6使用使用CString类对象数组存放若干个字符串,采用选类对象数组存放若干个字符串,采用选择法排序,实现对字符串数组的排序。择法排序,实现对字符串数组的排序。#includeiostream.h#includeafx.hvoidmain()CStrings4=Fortran,C/c+,Pascal,VisualBasic,t;inti,j,m;for(i=0;i3;i+)/选择法排序选择法排序m=i;for(j=i+1;j4;j+)if(sj

56、sm)m=j;t=si;si=sm;sm=t;for(i=0;i4;i+)coutisiendl;C/c+FortranPascalVisualBasic渡满匠衰熄琅灶迸辙循唾锄粒霜步淡嚣乾碌领左绞臭骡卵哆力日狙木呢姿四章数组与指针ppt课件四章数组与指针ppt课件43uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组4.4.1指针和一维数组指针和一维数组4.4.2指针和二维数组指针和二维数组4.4.3指针和字符串指针和字符串4.4.4指针的补充说明指针的补充说明指针可以指向基本数据类型变量指针可以指向基本数据类型变量(第二章第二章),也可以指向数组或数组

57、元素。实际上数组名,也可以指向数组或数组元素。实际上数组名就是起始地址。就是起始地址。栈驱棍浙福奠管以讫稍低体激晰汰磺镇捻幌略翘缕皂间甥我质就乞什迭哀四章数组与指针ppt课件四章数组与指针ppt课件44uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组4.4.1指针和一维数组指针和一维数组设有定义:设有定义:inta6=10,20,30,40,50,60,*p=a;下面是引用数组元素的三种方式。下面是引用数组元素的三种方式。1.下标方式下标方式形式:形式:数组名数组名下标下标2.地址方式地址方式 形式:形式:*(地址常量)(地址常量)3.指针方式指针方式形

58、式:形式:*指针变量名指针变量名假设有定义假设有定义float a10, *p = a;则如下在值上的关系成立:则如下在值上的关系成立:(1) p a &a0(2) p+i &ai(3) *(p+i) *(a+i) ai(4) 指针可以作数组名用指针可以作数组名用 即:即:piai湾夷单骇末诌敖醒挺肩胯孪模股押口屡什狰琴提榜冕鹿碑漏使它幻耀酗垢四章数组与指针ppt课件四章数组与指针ppt课件45uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组例例4.9 (1)四种方式输入数据四种方式输入数据设有:设有:int a10; p = a; for(i = 0;

59、 iai;则等价于:则等价于:p = a;for (i = 0; i*p+;p = a;for (i = 0; i*p;p = a;for (i = 0; i*(p+i);/cinpi思考:思考:第三种方法与其它二种区别第三种方法与其它二种区别何在?何在?P指针变量的值不变指针变量的值不变肆岗绍旗骡贬钨邦讫酷薪沾题宰餐序络董灭惹寝赛浮膏兢彭略僚俐扎威威四章数组与指针ppt课件四章数组与指针ppt课件46uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组例例4.9(2)分别用三种方式访问并显示数组中的所有元素。分别用三种方式访问并显示数组中的所有元素。#in

60、clude“iostream.h”voidmain()inta6=10,20,30,40,50,60,*p=a,i;cout“n下标方式下标方式:”;for(i=0;i6;i+)coutai“”;/coutflush;cout“n地址方式地址方式:”;for(i=0;i6;i+)cout*(a+i)“”;cout“n指针方式指针方式:”;for(i=0;i6;i+)cout*(p+i)“”;coutendl;思考:按思考:按(1)的思路,还的思路,还可以写成什么形式?可以写成什么形式?员埂馏姐军窗它走枚福正丽奸臀锗俗咱播未雇孙挛梁巳暗孪武谗尉宿雕吴四章数组与指针ppt课件四章数组与指针ppt课

61、件47uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组分析下列程序分析下列程序,思考思考:数组元素能否正确输出?:数组元素能否正确输出?#include void main( ) int a10, i, *p; p = a; for (i = 0; i*p+; for (i = 0; i10; i+,p+) cout*p;否否挥害赠蘸足僵霹氓尘娩覆谐飘凰咆斤茶孵败魔怀模葵宽衍秋喀锚抬描释推四章数组与指针ppt课件四章数组与指针ppt课件48uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组说明说明:(1)三种引用方式

62、比较三种引用方式比较引用方式引用方式数组元素地址数组元素地址数组元素值数组元素值特点特点下标下标&aiai引用速度慢,要先计算地址引用速度慢,要先计算地址a+i的值,指的值,指向该元素后存取,比较直观。向该元素后存取,比较直观。地址地址a+i*(a+i)指针指针p+i*(p+i)指针变量所指地址不变指针变量所指地址不变速度快,不直速度快,不直观。观。p+*p指针变量所指地址改变指针变量所指地址改变(2)p与与a的区别的区别:p是地址变量,而是地址变量,而a是地址常量。是地址常量。 p+ 、p- 、p=p+2 a+、a=a+2佬遍拓笔锨立赎匈瓮弱跋隆憨幅电理连润遮哺黔秉韧柳乎氨荫亏并霓扩激四章数

63、组与指针ppt课件四章数组与指针ppt课件49uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组(3)*p+与与(*p)+区别区别:*p+的的+运算符作用于指针变量运算符作用于指针变量;(*p)+的的+运算符作用于指针变量所指对象。运算符作用于指针变量所指对象。cout*p+;/输出?输出?cout*p;/输出?输出?cout(*p)+;/输出?输出?cout*p;/输出?输出?Thefisrt:TheSecond:30403031设有定义:设有定义:inta6=10,20,30,40,50,60,*p=a+2;分别执行下面两段代码分别执行下面两段代码,思

64、考每行代码的输出:思考每行代码的输出:鬃普辐十烂俭峦侩史朔畏仲歪痒辞严选注泽慰柜挝叛轮射氨捆昏甥邢寸炳四章数组与指针ppt课件四章数组与指针ppt课件50uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组4.4.2指针和二维数组指针和二维数组(若干个一维数组组成若干个一维数组组成)定义二维数组:定义二维数组:intanm;则则a 代表二维数组的首地址,第代表二维数组的首地址,第0行的地址行的地址a+i 代表第代表第i行的地址行的地址*(a+i) 即即 ai 代表第代表第i行第行第0列的地址列的地址*(a+i)+j 即即 ai+j 代表第代表第i行第行第j列

65、的地址列的地址*(*(a+i)+j ) 即即 aij 代表第代表第i行第行第j列的元素列的元素元素元素元素元素aijaij的地址的几种等价的引用方式的地址的几种等价的引用方式的地址的几种等价的引用方式的地址的几种等价的引用方式&a&aijijai+jai+j *(a+i)+j*(a+i)+j &(*(a+i)j&(*(a+i)j元素元素元素元素aijaij的几种等价的引用方式的几种等价的引用方式的几种等价的引用方式的几种等价的引用方式aijaij*(ai+j)*(ai+j) *(*(a+i)+j)*(*(a+i)+j) (*(a+i)j(*(a+i)j堰旷愤姬双旬妙褪硕宫昨林何哇譬盏愈鲤鸯肆壁

66、贞祥霜骄撵乡网轨摄这内四章数组与指针ppt课件四章数组与指针ppt课件51uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组如设有定义如设有定义: int a23; int a23; 数组名数组名a可以解释为指向可以解释为指向int类型的类型的二级指针常量二级指针常量;a可以看可以看成是由两个元素成是由两个元素a0、a1构成的一维数组。构成的一维数组。a0可以看成是由可以看成是由a00、a01、a023个整型变量组个整型变量组成的一维数组,可将成的一维数组,可将a0解释为指向解释为指向int类型的类型的一级指针常量一级指针常量;a1具有具有a0相同的性质。

67、相同的性质。指针方式引用二维数组元素的两种方式:指针方式引用二维数组元素的两种方式:指针变量引用数组指针变量引用数组元素、指针数组元素引用数组元素元素、指针数组元素引用数组元素。澎彼哪雨妹磅梦钡父慌肋抽痰菌补肝虚宙谩补讯耍迸话再获螺球坦突傍潭四章数组与指针ppt课件四章数组与指针ppt课件52uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组(1)(1)指针变量引用数组元素指针变量引用数组元素 a.采用列指针采用列指针(一级指针一级指针)设有定义:设有定义:int a23,*p=a0;int a23,*p=a0; /或用或用p=*a初始化初始化通过通过p

68、p指指针显示二示二维数数组的各元素:的各元素:for(i=0;i6;p+,i+)for(i=0;i6;p+,i+) cout*p ; cout*p ; if(i%3=0)coutendl; if(i%3=0)coutendl; 注意:注意:在在C+C+中二级指针地址中二级指针地址不能赋值给一级指针变量不能赋值给一级指针变量:如:如:int a23,int a23,*p=a*p=a; ;在标准在标准C C中是允许的,但在中是允许的,但在C+C+中就不允许中就不允许。p+1兑炽啪痛发撇爪屠粘彼琢氨珐贝弘忽奶已贾哨咬怂称虞牌届雍闺啮纳灰漳四章数组与指针ppt课件四章数组与指针ppt课件53uangX

69、i University C/C+ C/C+程序设计4.4指针与数组指针与数组b.采用行指针采用行指针(二级指针二级指针)-数组指针数组指针设有定义:设有定义:inta23,(*p)3=a;/或或p=a初始化初始化;通过通过p指针显示二维数组的各元素:指针显示二维数组的各元素:p+1for(inti=0;i2;i+)for(inti=0;i2;i+)for(intj=0;j3;j+)for(intj=0;j3;j+)cout(*p)j;cout(*p)j;p+;p+;coutendl;coutendl; p等效于二维数组名等效于二维数组名a,但没有指出其边界,即第一维的,但没有指出其边界,即第

70、一维的元素数量,但是它的较低维数的元素数量必须要指定。元素数量,但是它的较低维数的元素数量必须要指定。for(inti=0;i2;i+)for(intj=0;j3;j+)cout*(*p)+j);p+;coutendl;掣吓榆柴樟梦赣企枝平浊忙灸谢绷垫属可其渤四盅粕川由诞并窟武靶嘘凶四章数组与指针ppt课件四章数组与指针ppt课件54uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组(2)(2)指针数组引用数组元素指针数组引用数组元素 指针数组的形式:指针数组的形式:数据类型数据类型 *标识符标识符整型常量表达式整型常量表达式;即:即:数组中每个元素是指针

71、数组中每个元素是指针。 设有定义:设有定义: int a23,*p2 =a0,a1; 要引用要引用aijaij元素,可用指针数组表示如下:元素,可用指针数组表示如下: *(pi+j) *(pi+j) 或或 *(*(p+i)+j)*(*(p+i)+j)注意:注意:指指针数数组名名p p与与二维二维数数组名名a a都是二级指针的概念,都是二级指针的概念,区区别在于:在于: aiai是地址常量,是地址常量,pipi是地址是地址变量。量。屋艘反泵迫泅酥酬改黍滤胺辅芭贝嚼导怂搪吕军雇死殆宴辊咬跃墒极杠悸四章数组与指针ppt课件四章数组与指针ppt课件55uangXi University C/C+ C/

72、C+程序设计4.4指针与数组指针与数组例例4.10数组指针与指针数组示例数组指针与指针数组示例#include iostream.hvoid main()int a34=1,2,3,4,5,6,7,8,9,10,11,12;int i,j;/列指针示例int *p=a0;for(i=0;i12;p+,i+) cout*p ; if(i+1)%4=0) coutendl; coutendl;/数组指针(二级指针-行指针)示例int (*p0)4=a; /的优先级高于*, p0是一个指针变量/第一种方式输出for(i=0;i12;i+) cout(*p0)i ; if(i+1)%4=0) cout

73、endl; coutendl;/第二种方式输出for(i=0;i3;i+)for (j=0;j4;j+) cout*(*p0)+j) ; p0+; coutendl;coutendl; /第三种方式输出p0=a;/重新指向afor(i=0;i3;i+)for (j=0;j4;j+) cout(*p0)j ; p0+; coutendl; coutendl; /第四种方式输出p0=a; /重新指向afor(i=0;i3;i+)for (j=0;j4;j+) coutp0ij ; coutendl; coutendl;/指针数组示例 /对一维数组int c4=1,2,3,4;int *p14=&c

74、0,&c1,&c2,&c3; /p1是四个指针,这四个指针组成一个数组for(int k=0;k4;k+) cout*p1kendl; coutendl; /对二维数组int b23=1,2,3,4,5,6,*p22=b0,b1,kk,jj;for(kk=0;kk2;kk+)for(jj=0;jj3;jj+)cout*(p2kk+jj) ;coutendl;couts; gets(s); p=china; /指向字符串常量的首地址 p=new char6; 或 p=s; /应使字符指针有确定指向后才能从键盘进行输入操作 cinp; 或 gets(p);运算字符数组名s不能进行自增或自减运算 p

75、是指针变量,可以进行自增或自减运算 走抱枢酵汹没邀圭酿融冀哪专唐资驾俱蹄彤对伍宏霜凯枝舟淫滇忿沧柱昧四章数组与指针ppt课件四章数组与指针ppt课件57uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组例例4.114.11输输入入一一串串字字符符存存储储在在字字符符数数组组中中,用用指指针针方方式式逐逐一一显显示示字字符符,并求其长度。并求其长度。#include iostream.h#include stdio.hvoid main() char s80,*p; gets(s); p=s; /p指向数指向数组的第一个元素的第一个元素 cout输出每个字符

76、:出每个字符:; while(*p!=0) cout*p+ ; /指指针下移,直到下移,直到p指向字符串指向字符串结束符束符 coutn 字符串字符串长度度 : p-sendl; 捡债阂奥帅矣辩唆俗六拟先疲浓匙琼祸灭贩邮辟针池缮直幽挠掩残贫左猾四章数组与指针ppt课件四章数组与指针ppt课件58uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组(2)(2)字符指针数组字符指针数组, ,常用于处理若干字符串。常用于处理若干字符串。设有定义:设有定义:char *bookchar *book=Fortran, C/c+, Pascal, Visual Basi

77、c; 按字符串的实际长度存储,以按字符串的实际长度存储,以00表示每个字符串的结束。表示每个字符串的结束。 采用采用交换指针值交换指针值的方法改变指针的指向。的方法改变指针的指向。即:即:数组数组bookbook中每个元素是指向字符串的指针中每个元素是指向字符串的指针。 盲弓吼烫听喻牺近开歹檀艰豺梧瘦连碱讥拘冬氯艘慎穴敦氧心阑臀财菠夕四章数组与指针ppt课件四章数组与指针ppt课件59uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组例例4.12 4.12 对对4 4个字符串,按字典顺序将它们排序输出。个字符串,按字典顺序将它们排序输出。#include

78、iostream.h#include string.hvoid main() char *book=Fortran,C/c+,Pascal,Basic,*p; int i,j,k; for(i=0;i3;i+) k=i; for(j=i+1;j0) k=j; if(i!=k) p=booki;booki=bookk; bookk=p; for(i=0;i4;i+)coutbookiendl;注意元素的比注意元素的比较较汾乖荔若鹏趁宗衔休桓乾喇肝龋洱览纯劝怒怂疼忽拭兆隘蛹栏宝藩践贺驼四章数组与指针ppt课件四章数组与指针ppt课件60uangXi University C/C+ C/C+程序设计

79、4.4指针与数组指针与数组4.4.4指针的补充说明指针的补充说明指针学习不好关键是概念不清造成的,说的指针学习不好关键是概念不清造成的,说的简单点就是书没有认真看,指针的学习犹如人在简单点就是书没有认真看,指针的学习犹如人在学习饶口令不多看多学多练是不行的。学习饶口令不多看多学多练是不行的。学习原则学习原则一定要学会其实通常的应用很简单,与使用变量几乎无异仔细琢磨使用原则使用原则永远要清楚每个指针指向了哪里永远要清楚指针指向的位置是什么我们还是给几个例子来说明。我们还是给几个例子来说明。绰瓶牡了编昼货比忙邑脑淌夜哺碎夷奎艘猾沽酉厅咙代巳混哪爸色路挡魏四章数组与指针ppt课件四章数组与指针ppt

80、课件61uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组例:用变量例:用变量a给出下面的定义给出下面的定义一个整型数一个整型数一个指向整型数的指针一个指向整型数的指针一个指向指针的指针,它指向的指针是指向一个一个指向指针的指针,它指向的指针是指向一个整型数整型数一个有一个有10个整型数的数组个整型数的数组一个有一个有10个指针的数组,该指针是指向一个整型个指针的数组,该指针是指向一个整型数的数的一个指向有一个指向有10个整型数数组的指针个整型数数组的指针a)inta;b)int*a;c)int*a;d)inta10;e)int*a10;f)int(*a)

81、10;凶揪秆得幸蹋焰磅但坪忙选脂颖漱枫蜕恶褥捅祸座庶汪凑长上翔吐建甥添四章数组与指针ppt课件四章数组与指针ppt课件62uangXi University C/C+ C/C+程序设计4.4指针与数组指针与数组例:分析下面程序的功能例:分析下面程序的功能#includemain()inta,b;int*point_1,*point_2,*temp_point;scanf(%d,%d,&a,&b);point_1=&a;point_2=&b;if(ab)temp_point=point_1;point_1=point_2;point_2=temp_point;printf(%d,%d,*poin

82、t_1,*point_2);此题并没有改变变量此题并没有改变变量a,b的值,利用指针的值,利用指针变量分别存储变量分别存储a和和b的的地址地址,然后若然后若ab,把那两个指针变量的把那两个指针变量的值对换一下,再利用值对换一下,再利用*point_1和和*point_2的方式把调换后的值的方式把调换后的值显示出来。利用指针显示出来。利用指针进行地址交换达到大进行地址交换达到大小排序的目的小排序的目的.健磺钳焕九自柴浸傀勃园卜膳锤逻趴繁蔬丝畸鸿史拇唆傲塑盂员咋未堡毅四章数组与指针ppt课件四章数组与指针ppt课件63uangXi University C/C+ C/C+程序设计4.5动态数组动态

83、数组在在和和中均定义了下面中均定义了下面的函数的函数void* malloc(unsigned int size);向系统申请大小为size的内存块,把首地址返回。如果申请不成功,返回NULLvoid *calloc(unsigned int num, unsigned int size);向系统申请num个size大小的内存块,把首地址返回。如果申请不成功,返回NULLvoid free(void* p);释放由malloc()和calloc()申请的内存块。p是指向此块的指针哪纫戴废谣渣羡鳃镑蝶跋亨波佑沧虚搂报擂词转沽秒炔选儿济校殆陇陛梁四章数组与指针ppt课件四章数组与指针ppt课件64

84、uangXi University C/C+ C/C+程序设计4.5动态数组动态数组一维动态数组一维动态数组#include main()int *p = NULL, n, i, sum;printf(Please enter array size:);scanf(%d, &n); p = (int *) malloc(n * sizeof (int); if (p = NULL) printf(No enough memory!n); exit(0); printf(Please enter the score:);for (i=0; in; i+) scanf(%d, p + i); su

85、m = 0; for (i=0; in; i+) sum = sum + *(p + i); printf(aver = %dn, sum/n); free(p); 府匿且怕嗅尊滚饭裸衰荔陋湖痔法览它绰霍蔷蚂帝况系未凭张蚜似沦僻跺四章数组与指针ppt课件四章数组与指针ppt课件65uangXi University C/C+ C/C+程序设计4.5动态数组动态数组二维动态数组二维动态数组#include main()int *pScore = NULL, i, j, m, n, maxScore, row, col; printf(Please enter array size m,n:);s

86、canf(%d,%d, &m, &n); pScore = (int *) calloc(m*n, sizeof (int); if (p = NULL) printf(No enough memory!n); exit(0); printf(Please enter the score:);for (i=0; im; i+)for (j = 0; jn; j+) scanf(%d, &pScore i*n+j); maxScore = FindMax(pScore, 3, 4, &row, &col); printf(maxScore = %d, class = %d, number = %

87、dn, maxScore, row+1, col+1); free(pScore); 惠负巷自茨芹皖塘告听末考搓属笼纹汕芥诵流裹分卸邱霜宽境覆锅盯订诞四章数组与指针ppt课件四章数组与指针ppt课件66uangXi University C/C+ C/C+程序设计 1 4 7 10 13 16 19 22 25 14 k x 4.6应用举例应用举例1.1.插入数据插入数据基本思想:基本思想: 1 1)首先要查找待插入数据在数组中的位置)首先要查找待插入数据在数组中的位置k k;2 2)然然后后从从最最后后一一个个元元素素开开始始往往前前直直到到下下标标为为k k的的元元素素依依次次往往后后移移

88、动动一个位置;一个位置;3) 3) 第第k k个元素的位置空出,将欲插入的数据插入。个元素的位置空出,将欲插入的数据插入。例例4.13 在有序数组在有序数组a中插入数值中插入数值x for(k=0;k9;k+) if (x=k;i-) ai + 1 = ai; /从最后元素开始往后移,从最后元素开始往后移,腾出位置出位置 ak = x;抨腮嘶润正粱砰疮扁猫嫌践溃俭灵踩邵醉荐眶贮诸宅嘻决灸赔骸逻倪昼涟四章数组与指针ppt课件四章数组与指针ppt课件67uangXi University C/C+ C/C+程序设计4.5应用举例应用举例 删除操作首先也是要找到欲删除的元素的位置删除操作首先也是要找

89、到欲删除的元素的位置k k;然后从;然后从k+1k+1到到n n个位置开始向前移动;最后将数组元素减个位置开始向前移动;最后将数组元素减1 1。 例例4.14 4.14 从数组中删除某数。从数组中删除某数。for(i=0;i10;i+) if(key=ai)break;for(j=i;jamidxamid,则继续查找的范找的范围应为amidamid后面的元素,修改后面的元素,修改查找区找区间的下界的下界low = mid+1low = mid+1;若;若xamidxhighlowhigh无无查找区域,找不到。找区域,找不到。唆奸迁猩非廉腮靳破篆娇鬃陛舞济辊南衡崔镭历李论纱矩和焚沽遭往讥搭四章数

90、组与指针ppt课件四章数组与指针ppt课件69uangXi University C/C+ C/C+程序设计4.5应用举例应用举例对色宿絮啄膛园登子垮撮琐忽仙蕴幻沿树仔配温渺茵伶瓶真势唐义谚移盅四章数组与指针ppt课件四章数组与指针ppt课件70uangXi University C/C+ C/C+程序设计4.5应用举例应用举例其中,第其中,第3 3步可用如下程序段步可用如下程序段实现:if (x=amid)if (x=amid) break; break;else if (xamid)else if (xamid) low=mid+1; low=mid+1;elseelse high=mid

91、-1; high=mid-1;请编出完整的程序。请编出完整的程序。络恨避粥诸批已民扭剥抄振辉稚绣番逾瘤醇拍傅钾台丰忍蓝擎吕衅拘室曳四章数组与指针ppt课件四章数组与指针ppt课件71uangXi University C/C+ C/C+程序设计4.5应用举例应用举例4. 分类统计分类统计 例例4.15 统计一串字符中各字母出现的次数统计一串字符中各字母出现的次数(大小写字母不区分大小写字母不区分),并,并对出现的字母显示其出现的个数和总字母数。对出现的字母显示其出现的个数和总字母数。 分析分析: 声声明明一一个个具具有有2626个个元元素素的的数数组组,每每个个元元素素的的下下标标表表示示对对

92、应应的的字字母,元素的值表示对应字母出现的次数。母,元素的值表示对应字母出现的次数。 从从输输入入的的字字符符串串中中逐逐一一取取出出字字符符,转转换换成成大大写写字字符符( (使使得得大大小小写写不区分不区分) ),进行判断。,进行判断。扇舶仓头能向欣档净辛键暖公炽栅锑京旨阿趣贪铁召盼寒的绦赃遇怔茫纪四章数组与指针ppt课件四章数组与指针ppt课件72uangXi University C/C+ C/C+程序设计4.5应用举例应用举例#includeiostream.h“#includestdio.h“#includeafx.hvoidmain()CStringst1;chars256,c;

93、inta26=0,i,j,le,sumc(0);gets(s);st1=s;le=st1.GetLength();/求字符串的长度求字符串的长度st1.MakeUpper();/转换成大写转换成大写for(i=0;i=A&c=Z)j=c-A;aj+;for(j=0;j=25;j+)/输出字母及其出现的次数输出字母及其出现的次数if(aj)sumc=sumc+aj;st1.Format(%c=%d,j+65,aj);coutst1;cout共有共有sumc个字母个字母mr;while(m0|r16);while(m!=0)mr0=m%r;/取余数取余数if(mr09)c=mr0-10+A;elsec=mr0+0;s=c+s;m=m/r;cout结果为结果为sendl;猖镍健帐垃扳阶劝馁同梧阀植滴促禽愁裸注歪鸽釉拢范警泉科闻兴职沂柬四章数组与指针ppt课件四章数组与指针ppt课件75uangXi University C/C+ C/C+程序设计小结小结回忆一下,本章你学习了些什么?回忆一下,本章你学习了些什么?回忆一下,本章你学习了些什么?回忆一下,本章你学习了些什么?回忆一下,本章你学习了些什么?回忆一下,本章你学习了些什么?卧颈拜锐屠氰若话裸筋炒波提泪流副托讽灌珠硷蓉眨舷谍询例墩没驴棍令四章数组与指针ppt课件四章数组与指针ppt课件76uangXi University

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号