《(中职)Visual C++程序设计基础(中职)Flash 8.0基础第4章 数组与指针ppt课件.ppt》由会员分享,可在线阅读,更多相关《(中职)Visual C++程序设计基础(中职)Flash 8.0基础第4章 数组与指针ppt课件.ppt(112页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、(中职)Visual C+程序设计基础(中职)Flash 8.0基础第4章 数组与指针ppt课件_ 4.2 指针_ 4.4 引用_ 4.5 内存管理_ 4.3 指针与数组_ 4.1 数组构造类型构造类型构造类型构造类型基本类型基本类型基本类型基本类型空类型空类型空类型空类型(void)(void)类类类类(class)(class)(class)(class)指针类型指针类型指针类型指针类型*数据类型数据类型C+中中除除了了基基本本数数据据类类型型,还还有有将将基基本本数数据据类类型型的的一一组组数数据据按按一一定定的的规规则则组组成成的的构构造造类类型型。构构造造类类型型的的每每一一个个分分
2、量量可可以以是是一一个个基基本本数数据据类类型型的的变变量量(象象简简单单变变量量一一样样使使用用),也也可可以以又又是是一一个个构构造造类型的变量。类型的变量。C+构造类型有:数组、结构体、共用体等。构造类型有:数组、结构体、共用体等。数组数组数组数组结构体结构体结构体结构体(union)(union)共用体共用体共用体共用体(struct)(struct)整型整型整型整型字符型字符型字符型字符型实型实型实型实型枚举型枚举型枚举型枚举型4.1.1 4.1.1 数组概念的引出数组概念的引出数组概念的引出数组概念的引出例例例例:输入输入输入输入2020个成绩,求平均分,并输出高于平均分的成绩个成
3、绩,求平均分,并输出高于平均分的成绩个成绩,求平均分,并输出高于平均分的成绩个成绩,求平均分,并输出高于平均分的成绩#includevoid main()int sc,i;double aver=0.0;for(i=0;isc;aver+=sc;aver/=20;coutaver;?20个个 变变 量量?:a,b,c,d,t或或x0,x1,x2,x3,x19?编程编程?循环循环存存放放的的是是一一组组相相关关的的数数据据,用用同同名名和和 不不 同同 的的 下下 标标 来来 区区 分分:a0,a1,a2,a19for(i=0;iai;if(avarn;int an;.#includeconst
4、 int N=10;void main().int aN;/符号常量符号常量 float bN*2,x30,yN*3+6;._常量表达式常量表达式的值为元素的个数的值为元素的个数_一一般般是是整整型型的的常常数数、符符号号常常量量或宏定义的整数或宏定义的整数_常常量量表表达达式式中中只只能能包包含含常常数数、符号常量,符号常量,不能有变量不能有变量。(在编译时确定元素个数在编译时确定元素个数在编译时确定元素个数在编译时确定元素个数)数据类型数据类型 数组名数组名常量表达式常量表达式;错误错误一维数组的存储结构一维数组的存储结构a数组首地址数组首地址a9a8a7a1a0_ 一个数组的所有元素都是
5、连续存储的一个数组的所有元素都是连续存储的_ 数组元素为数组元素为:a0,a1,a2.a9int a10;_ 所占空间为所占空间为:类型空间类型空间*元素个数元素个数2一维数组元素的使用一维数组元素的使用 在一维数组中,各元素在内存中所占的存储单元在一维数组中,各元素在内存中所占的存储单元按下标序号顺序存放。按下标序号顺序存放。C+语言规定只能使用数组中语言规定只能使用数组中的某个数组元素,而不能对数组进行整体访问。数的某个数组元素,而不能对数组进行整体访问。数组元素的使用格式为:组元素的使用格式为:数组名数组名下标下标 每一个数组元素相当于一个变量,因此可以被赋每一个数组元素相当于一个变量,
6、因此可以被赋值,也可以参加运算。我们对数组的使用实际上是值,也可以参加运算。我们对数组的使用实际上是对数组元素的使用。对数组元素的使用。例如:例如:a0=a1+a2*2-a3;下面用法是错误的:下面用法是错误的:int a5,b5;a=b;/错误错误2一维数组元素的使用一维数组元素的使用#include void main()int a10;for(int i=0;i=0;i-)coutait;coutai;/i为整型变量,其值可为为整型变量,其值可为04中任意一个中任意一个coutai;/i的含义同上的含义同上当对数组中的全部数组元素进行输入、输出时,则应使用循当对数组中的全部数组元素进行输
7、入、输出时,则应使用循环语句进行,如:环语句进行,如:for(i=0;iai;for(i=0;i5;i+)/输出输出coutai;输入所有数组元素输入所有数组元素:for(i=0;iai;输出方法:输出方法:输出第i个数组元素:coutai;输出所有数组元素:输出所有数组元素:for(i=0;i10;i+)coutaiendl;循环控制循环控制变量变量i兼作下标兼作下标例例:输入输入n个成绩,求平均分个成绩,求平均分 (书P73页,例4.1)#includevoid main()int sc,n,i;double aver=0.0;cinn;for(i=0;isc;aver+=sc;aver/
8、=n;coutsci;aver+=sci;aver/=n;for(i=0;iaver)coutsc i);高于平均分的人数高于平均分的人数?注:定义了注:定义了注:定义了注:定义了5050个元素的个元素的个元素的个元素的数组,每次运行程序实数组,每次运行程序实数组,每次运行程序实数组,每次运行程序实际使用了际使用了际使用了际使用了n n 个元素个元素个元素个元素4.一维数组的初始化一维数组的初始化数组的初始化数组的初始化数组的初始化数组的初始化:定义定义定义定义数组的数组的数组的数组的同时同时同时同时给数组元素给数组元素给数组元素给数组元素赋值赋值赋值赋值int a5=1,2,3,4,5;在定
9、义数组时对数组的全部元素赋初值。在定义数组时对数组的全部元素赋初值。int a10=0,1,2,3,4,5,6,7,8,9;可以只给一部分数组元素赋初值。可以只给一部分数组元素赋初值。int a10=0,1,2,3,4;当对全部数组元素赋初值时,可以省略数组长度。当对全部数组元素赋初值时,可以省略数组长度。int a=0,1,2,3,4,5,6,7,8,9;如果想使一个数组中的全部数组元素都为如果想使一个数组中的全部数组元素都为0,可以将数组定义为,可以将数组定义为static型数组(代表该数组为静态存储类型)。型数组(代表该数组为静态存储类型)。static int a10;则表示则表示a0
10、a9全部都被赋初值全部都被赋初值0。或:。或:int a10=0;1.求最大值(最小值)及下标求最大值(最小值)及下标例例 编写程序求整型数编写程序求整型数组组a中的最大值及其下中的最大值及其下标,假定数组长度为标,假定数组长度为5。分析:设置变量分析:设置变量k表示表示最大值的下标,首先最大值的下标,首先将数组中的第一个数将数组中的第一个数组元素作为最大值,组元素作为最大值,即即k=0,然后将,然后将ak依依次与其他数组元素进次与其他数组元素进行比较,若该元素大行比较,若该元素大于于ak,则将其下标,则将其下标赋给赋给k。#include const int N=5;/定义符号常量N,代表数
11、组长度void main()int aN,k;/定义整型数组a,长度为N coutplease input N numbers:;for(int i=0;iai;/输入数组元素 k=0;for(i=0;iN;i+)if(akai)k=i;coutmax=ak tIndex=k;coutendl;一维数组程序设计举例(算法)一维数组程序设计举例(算法)2.排序排序(1)冒泡法排序冒泡法排序输入输入5 5个数个数,9 8 5 4 29 8 5 4 2由小到大排序后输出由小到大排序后输出:2 4 5 8 9 2 4 5 8 9算法:两两比较,大数向后移,找到最大数放在最后,再在剩余的的4个数中进行两
12、两比较,找到最大数,以次类推.最后,小数排在开始,相当于浮起,故称之为:冒泡法冒泡法一维数组程序设计举例(算法)一维数组程序设计举例(算法)85429542842524比较4次第一轮比较3次第二轮比较2次第三轮比较1次第四轮9854289542859428549285425842548254242452对对 n n 个数,则要进行个数,则要进行n-1n-1趟扫描,在第趟扫描,在第 i i 趟趟扫描中要进行扫描中要进行 n-in-i 次比较。次比较。可以推知:a0a0 a1a1 a2a2 a3a3 a4a4“211”:两重循环,一次比较,一次互换两重循环,一次比较,一次互换10个数:个数:a0a
13、9要循环进行要循环进行9 轮操作:轮操作:i=08第第1轮:轮:i=0:a0a9:10个数个数 j=08(9次比较)次比较)第第2轮:轮:i=1:a0a8:9个数个数 j=07(8次比较)次比较)第第3轮:轮:i=2:a0a7:8个数个数 j=06(7次比较)次比较)第第8轮:轮:i=7:a0a2 3个数个数 j=01(2次比较)次比较)第第9轮:轮:i=8:a0a1 j=0(1次比较)次比较)在每轮中:在每轮中:j=08-i对对aj 与与aj+1进行比较、互换进行比较、互换for(i=0;i=8;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;若为aj与aj-1的比
14、较互换,则j的变化范围为?若按从大到小的顺序排列?/i9/j9-i#includevoid main()int i,j,a10,t;for(i=0;iai;for(i=0;i9;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i10;i+)coutai;coutendl;#includevoid main()int i,j,a10,t;for(i=0;iai;for(i=0;i=8;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i=9;i+)coutai;coutendl;“211”:两重循环,一次比较,一次
15、互换两重循环,一次比较,一次互换n个数要循环比较个数要循环比较n-1 轮;轮;在每轮中在每轮中aj 与与aj+1进行比较互换进行比较互换(数组元素的下标从数组元素的下标从0n-1)第第1轮:轮:i=0:a0an-1:n个数个数 j=0n-2(即即n-2-i)第第2轮:轮:i=1:a0an-2:n-1个数个数 j=0n-3(即即n-2-i)第第3轮:轮:i=2:a0an-3:n-2个数个数 j=0n-4(即即n-2-i)第第n-2轮:轮:i=n-3:a0an-1 j=0 1(即即n-2-i)第第n-1轮:轮:i=n-2:a0a1 j=0(即即n-2-i)for(i=0;i=n-2;i+)/in-
16、1 for(j=0;j=n-2-i;j+)/jaj+1)t=aj;aj=aj+1;aj+1=t;若为aj与aj-1的比较互换,则j的变化范围为?若按从大到小的顺序排列?#includevoid main()const int N=10;int i,j,aN,t;for(i=0;iai;for(i=0;iN-1;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;iN;i+)coutai;coutendl;#includevoid main()int i,j,a10,t;for(i=0;iai;for(i=0;i9;i+)for(j=0;jaj+1)t=aj
17、;aj=aj+1;aj+1=t;for(i=0;i10;i+)coutai;coutendl;(2)(2)选择法排序选择法排序从前向后排从前向后排:从从ai到到aN-1找最大值的下标找最大值的下标k,而后将最大值而后将最大值akai特点:特点:比较后不立即互换元素,而是记下其位置并在每比较后不立即互换元素,而是记下其位置并在每一轮比较完毕后互换一轮比较完毕后互换举例举例:原始数据:原始数据:3,5,7,9,4 要求:降序要求:降序第一轮第一轮第一轮第一轮:初始化设最大元素下标为初始化设最大元素下标为初始化设最大元素下标为初始化设最大元素下标为 k k0 03 35 57 79 9k=0(ak
18、k=0(ak 与与与与aj aj 比较比较比较比较,j,j的变化范围的变化范围的变化范围的变化范围:14):14)3 35 57 79 9 k=1 k=13 35 57 79 9 k=2 k=23 35 57 79 9k=3k=3k=3k=3ai ai 与与与与 ak ak交换交换交换交换的结果的结果的结果的结果:9 95 57 73 3/选择排序选择排序for(i=0;iN-1;i+)k=i;for(j=i+1;jak)k=j;t=ai;ai=ak;ak=t;3.在在有序有序数组中数组中插入插入一个数后使数组仍然有序一个数后使数组仍然有序例如:例如:3 5 7 12 18,将将b=10插入插
19、入步骤:步骤:(1)要找到要找到b在数组中的位置在数组中的位置 (2)给给b让位置让位置 (3)将将b放到该位置上放到该位置上#include void main()int a50=3,5,7,12,18,n=5,i,number;cinnumber;b=10b=103571218(2)357121218(3)for(i=n-1;i=0;i-)if(ainumber)ai+1=ai;/后移后移 elsebreak;ai+1=number;n+;121810(1)3571218a0a1a2a3a4a5#include void main()int a50=3,5,7,12,18,n=5,i,nu
20、mber;cinnumber;4.在在有序有序数组中数组中删除删除一个数一个数,例如例如:3 5 7 10 12 18,将将b=10删除删除步骤:步骤:(1)要找到要找到b在数组中的位置在数组中的位置(2)后面的数组元素依次前移后面的数组元素依次前移,覆盖该位覆盖该位置上的数组元素即可实现删除置上的数组元素即可实现删除357101218(1)357101218(2)357121218for(i=0;in;i+)if(ai=b)break;101218for(;ix;for(top=0,bottom=N-1;top=bottom;)middle=(top+bottom)/2;if(x=amidd
21、le)break;else if(xamiddle)bottom=middle-1;else top=middle+1;if(x=amiddle)coutamiddle=xendl;else coutNot foundaij;输入整个数组元素:输入整个数组元素:for(i=0;i2;i+)for(j=0;jaij;输出方法:输出方法:输出第输出第i行第行第j列元素:列元素:coutaij;输出整个数组元素:输出整个数组元素:for(i=0;i2;i+)for(j=0;j3;j+)coutaijt;coutendl;4.二维数组的初始化二维数组的初始化int a34=1,2,3,4,5,6,7,
22、8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;与下面的定义等价:int a4=1,2,3,4,5,6,7,8,9,10,11,12;或int a4=1,2,3,4,5,6,7,8,9,10,11,12;系统会自动确定该数组的第一维长度为3。_按行为二维数组赋初值按行为二维数组赋初值_按数组元素的在内存中的存储顺序赋初值按数组元素的在内存中的存储顺序赋初值 _当对二维数组的全部元素赋初值时,定义数组时第一当对二维数组的全部元素赋初值时,定义数组时第一维的长度可省略,但第二维的长
23、度必须给定,系统会维的长度可省略,但第二维的长度必须给定,系统会根据数据的总个数分配存储空间根据数据的总个数分配存储空间只对各行第一列元素赋初值,如:只对各行第一列元素赋初值,如:int a34=1,3,5;作用是只对各行第一列的元素赋初值,其余元素值为作用是只对各行第一列的元素赋初值,其余元素值为0。int b;int b=1,2,3,4,5,6;int bnm;错错!_给部分元素赋初值给部分元素赋初值 对各行中的某一元素赋初值,如:对各行中的某一元素赋初值,如:int a34=1,0,3,0,0,5;只对某几行的部分元素赋初值,如:只对某几行的部分元素赋初值,如:int a34=1,3,5
24、;即对第三行不赋初值。也可以不对第二行赋初值,但花括号不即对第三行不赋初值。也可以不对第二行赋初值,但花括号不可以省略,即:可以省略,即:int a34=1,3,5;二维数组程序设计举例二维数组程序设计举例2*42*4的矩阵,求出其中的最大值及其所在的行号和列号。的矩阵,求出其中的最大值及其所在的行号和列号。#includevoid main()int i,j,row=0,column=0;/将第一个数组元素做为最大值将第一个数组元素做为最大值 int a24=1,2,3,4,5,6,7,8;/应应输入输入 for(i=0;i2;i+)for(j=0;jarowcolumn)row=i;col
25、umn=j;cout“max=“arowcolumn“trow=“row “tcolumn=“column“n”;33矩阵,求两条对角线元素之和#includevoid main()int a33,i,j,sum1=0,sum2=0;for(i=0;i3;i+)for(j=0;jaij;for(i=0;i3;i+)sum1+=aii;sum2+=ai2-i;/a02+a11+a20coutsum1tsum2endl;4.1.4 字符数组字符数组 字符型数组是数据类型为字符型数组是数据类型为char的数组。因的数组。因此前面介绍的数组的定义、存储形式和使用等此前面介绍的数组的定义、存储形式和使用
26、等也都适用于字符型数组。字符数组用于存放字也都适用于字符型数组。字符数组用于存放字符常量或字符串,每一个数组元素存放一个字符常量或字符串,每一个数组元素存放一个字符常量,它在内存中占用一个字节。符常量,它在内存中占用一个字节。一般字符数组有两种形式:一维字符数组一般字符数组有两种形式:一维字符数组和二维字符数组。一维字符数组用来存放一个和二维字符数组。一维字符数组用来存放一个字符串,而二维字符数组用来存放几个字符串。字符串,而二维字符数组用来存放几个字符串。1.字符数组的定义字符数组定义的一般形式为:字符数组定义的一般形式为:char 数组名数组名常量表达式常量表达式;/定义一维字符数组定义一
27、维字符数组char 数组名数组名常量表达式常量表达式1常量表达式常量表达式2;/定义二维字符数定义二维字符数组组 字符数组的每个数组元素可存放一个西文字符,若要存放字符数组的每个数组元素可存放一个西文字符,若要存放一个中文字符,则需要一个中文字符,则需要2个字节。个字节。在处理几个字符串时,为了处理上的方便,通常将它们存在处理几个字符串时,为了处理上的方便,通常将它们存放在一个二维字符数组中。放在一个二维字符数组中。char c10;定义了一个字符数组定义了一个字符数组c,包含,包含10个数组元素。在内存中为个数组元素。在内存中为数组数组c分配分配10个字节的存储空间。个字节的存储空间。cha
28、r n1020;定义了一个可存储定义了一个可存储10个字符串的二维字符数组个字符串的二维字符数组n,每个字,每个字符串中最多存放符串中最多存放20个字符。个字符。说明:说明:一维字符数组的例子一维字符数组的例子char c10;c0=d;for(i=1;i10;i+)ci=ci-1+2;coutcendl;dh jln p r t vf2.字符数组的初始化对字符数组的初始化可以在定义时进行,用对字符数组的初始化可以在定义时进行,用字符常量字符常量对字符数组对字符数组进行初始化,即逐个把字符赋给数组中各元素,初始化的数据用进行初始化,即逐个把字符赋给数组中各元素,初始化的数据用花括弧括起来。例:
29、花括弧括起来。例:char c10=I,a,m,h,a,p,p,y;cp rogr a m 0 0 0长度可省略(长度可省略(char c=a,b,c,d,e,f,g,h,i,j;)如果初值个数小于数组长度,则只将这些字符赋给数组中前面如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余元素由系统自动定为空字符(即那些元素,其余元素由系统自动定为空字符(即0:字符:字符串结束标志)。串结束标志)。如果花括弧中提供的初值个数(即字符个数)大于数组长度,如果花括弧中提供的初值个数(即字符个数)大于数组长度,则在编译时系统会提示为语法错误。则在编译时系统会提示为语法错误。char c
30、12=c,p,r,o,g,r,a,m;字符串结束标志字符串结束标志0:写在程序中的字符串:写在程序中的字符串(常量常量),系统会自动将,系统会自动将0加到字符串尾,把加到字符串尾,把0作作为判断字符串是否结束的标志。为判断字符串是否结束的标志。3.字符串和字符串结束标志字符串和字符串结束标志字符串“I am happy”的长度为10,占用11个字节,数组c包含有11个数组元素:c0,c1,c10。char c11=I am happy;也可以给定元素个数:也可以给定元素个数:char c30=I am happy;一个字符串中的字符是连续存储的,要用一个字符串中的字符是连续存储的,要用字符数字
31、符数组来处理字符串组来处理字符串。注意:字符常量或字符串常量初始化字符数组,数组中的值可能不同。两个数组中存储的内容都可看作字符串。两个数组中存储的内容都可看作字符串。区分区分字符串长度字符串长度与与数组长度数组长度:字符串长度指的是字符串中字符的个数,不包括字符串结束标志字符串长度指的是字符串中字符的个数,不包括字符串结束标志0。数组长度可在定义时确定,也可由初始化数据个数来决定。数组长度可在定义时确定,也可由初始化数据个数来决定。初始化指定数组元素个数时,数组长度应不小于初始化数据个数。初始化指定数组元素个数时,数组长度应不小于初始化数据个数。当当用用字字符符串串来来初初始始化化字字符符数
32、数组组时时,数数组组长长度度应应不不小小于于字字符符串串长长度度。(否否则编译出错则编译出错)char s1=h,a,p,p,e,n;char c1=happen;字符常量初始化数组,数组长度为字符个数,数组长度为字符常量初始化数组,数组长度为字符个数,数组长度为6。字符串初始化数组,结束标志字符串初始化数组,结束标志0占一个字节,数组长度为占一个字节,数组长度为7。char s230=h,a,p,p,e,n;char c220=happen;4.字符数组的输入和输出字字符符数数组组逐逐个个元元素素的的输输入入输输出出和和普普通通数数组组元元素素的的输输入入输输出出没没有有区区别别,通通常常我
33、我们们总总是是用用字字符符数数组组来来处处理理字字符符串串,因因此此其其输输入入输输出可以一次性整体进行。出可以一次性整体进行。字符数组的输出字符数组的输出 格式为:格式为:cout字符数组名字符数组名;#include void main()char str20=C+Programming;coutstr;另外,也可以直接输出字符串,如:另外,也可以直接输出字符串,如:cout”C+Programming”;#include void main()char str320=Monica,Rebecca,Rachel;for(int i=0;i3;i+)coutstriendl;运行结果为:运行
34、结果为:MonicaRebecca Rachel 字符数组的输入字符数组的输入 除了可以在程序中利用字符数组初始化的方法将字符串除了可以在程序中利用字符数组初始化的方法将字符串存放到字符数组中外,还可以采用以下方法输入字符串。但存放到字符数组中外,还可以采用以下方法输入字符串。但是要注意,只能用字符数组接收输入的字符串。是要注意,只能用字符数组接收输入的字符串。#include void main()char str20;cinstr;cout字符数组名字符数组名;cin只能接收空格符之前的部分。也就是说,当字符串中有空格时,用这种方法无法接收字符串的全部内容。#include void ma
35、in()char str20;cin.getline(str,20);coutstr;输入:输入:C+Programming则输出结果为:则输出结果为:C+Programming由此可见,该种方法可以接收由此可见,该种方法可以接收含有空格的字符串。含有空格的字符串。用用cin流对象的流对象的getline方法。方法。格式为:格式为:cin.getline(字符数组名,字符串长度字符数组名,字符串长度n,规定的结束符,规定的结束符);作用是输入一系列字符,直到输入流中出现规定的结束符或作用是输入一系列字符,直到输入流中出现规定的结束符或所读字符个数已达到字符数组的长度。所读字符个数已达到字符数组
36、的长度。#include void main()char str20;cin.getline(str,4);coutstr;输入:输入:C+Programming则输出结果为:则输出结果为:C+所读字符个数已达到字符数组所读字符个数已达到字符数组的长度的长度#include void main()char str20;cin.get(str,20);coutstr;输入:输入:C+Programming则输出结果为:则输出结果为:C+Programming这种方法也可以接收含有空格这种方法也可以接收含有空格的字符串的字符串 用用cin流对象的流对象的get方法。方法。格式为:格式为:cin.g
37、et(字符数组名,字符串长度字符数组名,字符串长度n,规定的结束符,规定的结束符);使用与使用与getline方法类似方法类似#include void main()char str120,str220;cin.get(str1,20);coutstr1;cin.get(str2,20);coutstr2;输入:输入:C+Programming则输出结果为:则输出结果为:C+Programming无法对无法对str2数组进行输入,这正是数组进行输入,这正是cin.get方法与方法与cin.getline方法的区别。方法的区别。因此当对多个字符数组输入时,应因此当对多个字符数组输入时,应使用使用
38、cin.getline方法完成。方法完成。例:对二维数组的输入例:对二维数组的输入#include void main()char str320;for(int i=0;i3;i+)cin.getline(stri,20);for(i=0;i3;i+)coutstris2,则返回一正数;若则返回一正数;若s1=s2,则返回则返回0;若若s1s2,则返回一负数则返回一负数 参数:提供字符串的参数可为字符数组名,也可为字符串常量。参数:提供字符串的参数可为字符数组名,也可为字符串常量。被赋新值的参数必须为字符数组被赋新值的参数必须为字符数组(不能为字符串常量)不能为字符串常量)#include C
39、+语言中提供了许多用于对字符串进行处理的函数,它们语言中提供了许多用于对字符串进行处理的函数,它们的说明都在头文件的说明都在头文件string.h中,因此使用这些字符串处理函数时必中,因此使用这些字符串处理函数时必须首先将该头文件包含到程序中。须首先将该头文件包含到程序中。#include#include void main()char st130,st240,st370;int l1,l2,a;cinst1st2;/*INPUT*/l1=strlen(st1);/*strlen*/l2=strlen(st2);coutl1=l1t“l2=l2n;a=strcmp(st1,st2);/*str
40、cmp*/couta0)coutst1st2n;else if(a=0)coutst1=st2;else coutst1st2n;strcat(st1,st2);/*strcat*/coutst1endl;cout(strcat(st1,st2)endl;strcpy(st3,st2);/*strcpy*/coutst3endl;字符串函数的使用字符串函数的使用字符数组程序应用字符数组程序应用v 字符串的长度字符串的长度v 逆序逆序v 字符串函数字符串函数_ 求字符串长度求字符串长度源程序源程序:#includevoid main()int i;char s50;cins;for(i=0;i5
41、0&si!=0;i+);cout“Lengh of“s“is”i;acd0bii=0统统计计个个数数:扫扫描描数数组组,只只要要不是不是0,计数器就加,计数器就加1。#include#includevoid main()int i,j=0;char c10,t;cinc;int l=strlen(c);for(i=0,j=l-1;ij;i+,j-)t=ci;ci=cj;cj=t;coutc;_将输入字符串中的字符逆序输出将输入字符串中的字符逆序输出:方法:方法1ABCDEFG0c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c j=6l7j=5j=4ABCEFGi=0i=1i=2i
42、ji=3输入输入:ABCDEFG输出输出:GFEDCBAj=3#include#includevoid main()char c10,t;cinc;int l=strlen(c);for(int i=0;il/2;i+)t=ci;ci=cl-1-i;cl-1-i=t;coutc;求字符串的逆序:方法2/*STRCPY*/#include void main()char p180,p280;int i;cinp2;for(i=0;p2i!=0;i+)p1i=p2i;p1i=0;cout“p1=“p1“np2=“p2“n”;_ 字符串函数字符串函数_ 字符串函数字符串函数/*STRCAT*/#in
43、clude#includevoid main()int i,j;char s140,s250;cins1s2;i=strlen(s1);for(j=0;j50&s2j=0;i+,j+)s1i=s2 j;s1i=0;/s1i=s2j;couts1;s1s2acd0beg0facdebfg0s1/*STRCMP*/#include void main()char p180,p280;int i;cinp1p2;for(i=0;p2i!=0&p1i!=0;i+)if(p1i!=p2i)break;if(p1ip2i)coutp1”p2“n;else if(p1ip2i)coutp1“p2“n”;el
44、secoutp1“=“p2“n”;多个字符串_一个字符串中的字符是连续存储的,要用一个字符串中的字符是连续存储的,要用字字符数组来处理字符串符数组来处理字符串。_多个字符串可用二维数组来存储。多个字符串可用二维数组来存储。char name310=Monica,Rebecca,Rachel;图图4-74-7用二维数组存放多个字符串用二维数组存放多个字符串ni ic ca a00000000o oM Mb be ec cc ca a000000e eR Rc ch he el l00000000a aR Rname0name0name1name1name2name2_C+将将二维数组看作一维数组
45、二维数组看作一维数组,其每个数组元素又是一个,其每个数组元素又是一个一维数组一维数组例:例:10个同学的姓名,按升序排序个同学的姓名,按升序排序_多个字符串可用二维数组来存储。多个字符串可用二维数组来存储。char name310=Monica,Rebecca,Rachel;ni ic ca a00000000o oM Mb be ec cc ca a000000e eR Rc ch he el l00000000a aR Rname0name0name1name1name2name2#include#include#include#include void main()void main()
46、char name1016,t16;char name1016,t16;int i,j,n=10;int i,j,n=10;for(i=0;in;i+)for(i=0;in;i+)cin.getline(namei,16);cin.getline(namei,16);for(i=0;in-1;i+)for(i=0;in-1;i+)for(j=0;jn-i-1;j+)for(j=0;j0)if(strcmp(namej,namej+1)0)strcpy(t,namej);strcpy(t,namej);strcpy(namej,namej+1);strcpy(namej,namej+1);str
47、cpy(namej+1,t);strcpy(namej+1,t);for(i=0;in;i+)for(i=0;in;i+)coutnamei;coutnamei;输入冒泡法排序 C+语言有在程序运行时获得变量的地址和操语言有在程序运行时获得变量的地址和操纵地址的能力,这种用来操纵地址的特殊类型变量纵地址的能力,这种用来操纵地址的特殊类型变量就是指针。就是指针。C+语言的高度灵活性和表达能力在一语言的高度灵活性和表达能力在一定程度上来自于巧妙而恰当地使用指针,指针也是定程度上来自于巧妙而恰当地使用指针,指针也是C+语言区别于其他程序设计语言的主要特征。正语言区别于其他程序设计语言的主要特征。正确
48、灵活地运用指针,可以有效地表示和使用复杂的确灵活地运用指针,可以有效地表示和使用复杂的数据结构(如数组),可以有效地对内存中各种不数据结构(如数组),可以有效地对内存中各种不同数据进行快速处理,能方便地使用字符串并为函同数据进行快速处理,能方便地使用字符串并为函数间各类数据的传递提供便利的方法。指针对于成数间各类数据的传递提供便利的方法。指针对于成功地进行功地进行C+语言程序设计是至关重要的。语言程序设计是至关重要的。4.2 指针指针4.2.1 指针的概念指针的概念int i;float f;地址地址:2000地址地址:2005指针指针地址地址内存被划分为一个个的内存被划分为一个个的存储单元存
49、储单元(字节)。内存的(字节)。内存的存取以存取以字节字节为单位。每个字节都有编号为单位。每个字节都有编号-地址地址2000 2001 2002 2003 2004 2005 2006 2007 2008i if f变量的地址变量的地址:变量的存储空间的首地址:变量的存储空间的首地址变量内容变量内容:变量的变量的值,用变量名直接引用值,用变量名直接引用1.1.取地址运算符取地址运算符&:由变量名可求其地址由变量名可求其地址.&变量名变量名*&i *a *&a2*&i *a *&a2 优先级和结合性优先级和结合性:单目单目,右结合性右结合性2.2.取内容运算符取内容运算符 *(指针运算符指针运算
50、符):由地址可求内容由地址可求内容(值值)*变量的地址变量的地址int i=2,a10=0;int i=2,a10=0;&i&a2&i&a2值=?变量的地址和变量的内容变量的地址和变量的内容2 2i ii i的地址的地址的地址的地址数据类型数据类型*变量名变量名;v 定义的一般形式:定义的一般形式:v 指针变量指针变量用于存放用于存放 地址(指针)地址(指针)的变量的变量int *p;double *q;注意:注意:v*表示该变量是指针变量,表示该变量是指针变量,p 和和q是指针变量是指针变量v 数据类型规定的是指针变量指向的存储单元的数据的数据类型数据类型规定的是指针变量指向的存储单元的数据