《C++程序设计__第4章_数组(1).ppt》由会员分享,可在线阅读,更多相关《C++程序设计__第4章_数组(1).ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+程序设计程序设计_第第4章章_数组数组(1)2008-2009-2 C+程序设计2本章内容提示:本章内容提示:数组概述数组概述 一维数组一维数组 二维数组二维数组 字符数组字符数组 C+C+语言程序设计语言程序设计2008-2009-2 C+程序设计34.1数组概述数组概述数组数组数组是由若干相同数据类型的数据所组成的有序集合。数组是由若干相同数据类型的数据所组成的有序集合。数组中每一个数据又称为数组中每一个数据又称为数组元素数组元素,它们之间具有固定的,它们之间具有固定的先后顺序。先后顺序。用一个统一的用一个统一的数组名数组名和和下标下标来唯一地确定数组中的元素。来唯一地确定数组中的元素
2、。凡是具有一个下标的数组称为凡是具有一个下标的数组称为一维数组一维数组,具有两个或两个,具有两个或两个以上下标的数组称为以上下标的数组称为多维数组多维数组。构造数据类型构造数据类型a0 a1 a20 1 20 1 201 20 1 201 20122008-2009-2 C+程序设计44.2一维数组一维数组一维数组的定义一维数组的定义一维数组定义的一般格式为:一维数组定义的一般格式为:类型说明标识符类型说明标识符 数组名数组名常量表达式常量表达式;如如: int a5;对定义作几点说明对定义作几点说明:数组名的命名遵循数组名的命名遵循C+语言标识符的命名规则;语言标识符的命名规则;数组名后边是
3、用数组名后边是用 括起来的常量表达式,而不能用圆括号。括起来的常量表达式,而不能用圆括号。常量表达式表明该数组的长度,即数组中元素的个数。常量表达式表明该数组的长度,即数组中元素的个数。 b数组中共有数组中共有5个元素。个元素。 常量表达式中可以包括常量和符号常量,不能包括变量,即不允许常量表达式中可以包括常量和符号常量,不能包括变量,即不允许对数组的大小作动态定义。对数组的大小作动态定义。int n;scanf(%d,&n); int an; /错误错误const int n=5;int an; /正确正确构造数据类型构造数据类型a00145a1a2a3a4a523a2008-2009-2
4、C+程序设计54.2一维数组一维数组一维数组元素的引用一维数组元素的引用一维数组中各元素在内存中所占的存储单元按下标序号顺一维数组中各元素在内存中所占的存储单元按下标序号顺序存放。序存放。C+语言规定:只能逐个引用数组中的元素,而不能一次语言规定:只能逐个引用数组中的元素,而不能一次引用整个数组,而数组元素的表示形式为:引用整个数组,而数组元素的表示形式为:数组名数组名下标下标 例:把一个一维数组的各元素值清例:把一个一维数组的各元素值清0,并输出各元素值。,并输出各元素值。#include void main() int I, b5; for(i=0;i=0;i-) coutbi2)#inc
5、lude void main()int i,f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)coutendl;couttfi;coutendl;例题例题2008-2009-2 C+程序设计9例例4.3问题:问题:把有把有10个元素的数组用冒泡排序法按升序排列。个元素的数组用冒泡排序法按升序排列。分析:分析:冒泡发排序方法:冒泡发排序方法:使较小的值像空气泡一样逐渐使较小的值像空气泡一样逐渐“上浮上浮”到数组的顶部,而较大的数到数组的顶部,而较大的数值逐渐值逐渐“下沉下沉”到数组的底部。这种排序技术要排好几轮,每一轮到数组的
6、底部。这种排序技术要排好几轮,每一轮都要比较相邻的数组元素。如果这两个数组元素是按升序排列的,都要比较相邻的数组元素。如果这两个数组元素是按升序排列的,那就保持原样。如果按降序排列,就交换它们的值。那就保持原样。如果按降序排列,就交换它们的值。 #include void main()int a10=53,37,89,3,46,78,321,64,5,32;cout排序前原始数据:排序前原始数据:endl;for(int i=0;i9;i+)for(int j=0;jaj+1)int t;t=aj;aj=aj+1;aj+1=t;coutendl;cout第第i+1次排序后数据的结果:次排序后数
7、据的结果:endl;for(j=0;j=9;j+)coutaj ; coutendl;例题例题2008-2009-2 C+程序设计104.3二维数组二维数组二维数组的定义二维数组的定义二维数组定义的一般形式为二维数组定义的一般形式为: 类型说明符号类型说明符号 数组名数组名常量表达式常量表达式常量表达式常量表达式如如: int a32; 这就定义了一个这就定义了一个3*2(3行行2列列)的数组。的数组。注意:注意:不能写成不能写成 int a3,2;的形式。的形式。二维数组元素的引用二维数组元素的引用二维数组元素的表示方式为:二维数组元素的表示方式为: 数组名数组名下标下标下标下标注意:注意:
8、下标不要超过各维的下标值范围。下标不要超过各维的下标值范围。构造数据类型构造数据类型int a32a01a10a11a20a21014523a00a00 a01a10 a11a20 a21a0a1a22008-2009-2 C+程序设计114.3二维数组二维数组二维数组的定义二维数组的定义可以把二维数组看成元素是一维数组的一维数组。可以把二维数组看成元素是一维数组的一维数组。int a32;可以把它看作是一个一维数组可以把它看作是一个一维数组,它有它有3个元素个元素a0,a1,a2,这每个元这每个元素又是一个分别含素又是一个分别含2个元素的一维数组:个元素的一维数组: a0 a00,a01a
9、a1 a10,a11 a2 a20,a21C+语言中,二维数组中元素在计算机内存中的存放顺序语言中,二维数组中元素在计算机内存中的存放顺序是:按行存放,即先在内存中存放第一行的元素,再放第是:按行存放,即先在内存中存放第一行的元素,再放第二行的元素,二行的元素,a00,a01,10,a11,a20,a21构造数据类型构造数据类型2008-2009-2 C+程序设计124.3二维数组二维数组二维数组的初始化二维数组的初始化分行给二维数组赋初值。分行给二维数组赋初值。int a32=1,2,5,6,9,10;这种赋值方法比较直观,把第一对括号内的数值赋给第一行的元这种赋值方法比较直观,把第一对括号
10、内的数值赋给第一行的元素,第二括号内的数值赋给第二行的元素,依此类推。素,第二括号内的数值赋给第二行的元素,依此类推。可以将所有数据写在一个花括号内,这时,计算机自动可以将所有数据写在一个花括号内,这时,计算机自动按数组元素在内存中的排列顺序对各元素赋初值。按数组元素在内存中的排列顺序对各元素赋初值。int a32=1,2,3,4,5,6;可以只对数组中部分元素初始化。可以只对数组中部分元素初始化。int a32=1,5,9;此处的作用表示:此处的作用表示:a00元素被赋成元素被赋成1,a10元素被赋成元素被赋成5,a20元素被赋成元素被赋成9,而数组中的其他元素被初始化为,而数组中的其他元素
11、被初始化为0。构造数据类型构造数据类型2008-2009-2 C+程序设计134.3二维数组二维数组二维数组的初始化二维数组的初始化如果对二维数组的全部元素初始化,则定义数组时第一维如果对二维数组的全部元素初始化,则定义数组时第一维长度可以省略,但第二维长度不能省。长度可以省略,但第二维长度不能省。int a32=1,2,3,4,5,6;可写成:可写成:int a 2=1,2,3,4,5,6;也可以只对部分元素初始化而省略第一维的长度,但应分也可以只对部分元素初始化而省略第一维的长度,但应分行进行初始化。行进行初始化。int a 2=0,3,10; 构造数据类型构造数据类型2008-2009-
12、2 C+程序设计14例例4.5 问题问题初始化二维数组,并按行求元素之和,按列求元素之和及初始化二维数组,并按行求元素之和,按列求元素之和及所有元素之和。所有元素之和。 分析分析利用二维数组存储数据。利用二维数组存储数据。#include #define M 4void main()int xMM=1,2,3,4,5,6,7,8,9;int i,j;cout输出运算前的数组数据内容输出运算前的数组数据内容:endl;for(i=0;iM;i+)for(j=0;jM;j+)coutxijt; coutendl; for(i=0;iM-1;i+) for(j=0;jM-1;j+)xiM-1+=xi
13、j;xM-1j+=xij;xM-1M-1+=xij; cout输出运算后的数组数据内容输出运算后的数组数据内容:endl;for(i=0;iM;i+) for(j=0;jM;j+) coutxijt; coutendl;例题例题2008-2009-2 C+程序设计15例例4.6问题问题输入四个学生、五门功能的成绩,分别存在二维数组中的输入四个学生、五门功能的成绩,分别存在二维数组中的前前5列上,计算每个学生的平均成绩后,存放在该数组最后列上,计算每个学生的平均成绩后,存放在该数组最后一列的对应行上。一列的对应行上。 分析分析利用二维数组保存数据利用二维数组保存数据4X6的二维数组,最后保存平均
14、值的二维数组,最后保存平均值例题例题2008-2009-2 C+程序设计16例例4.6实现实现程序代码程序代码#include void main()float a46,isum;int i,j;cout请输入四个学生五门课程的成绩:请输入四个学生五门课程的成绩:endl;for(i=0;i4;i+) for(j=0;j5;j+) cout“请输入第请输入第”i+1“同学第同学第j+1门课程成绩门课程成绩aij; 例题例题2008-2009-2 C+程序设计17例例4.6实现实现程序代码(续上)程序代码(续上) for(i=0;i4;i+) isum=0;for(j=0;j5;j+)isum+
15、=aij;ai5=isum/5; cout输出四个学生五门课程的成绩和平均分:输出四个学生五门课程的成绩和平均分:endl; for(i=0;i4;i+) for(j=0;j6;j+)coutaijt;coutendl; coutendl;例题例题2008-2009-2 C+程序设计184.4字符数组字符数组字符数组的定义字符数组的定义用来存放字符型数据的数组为字符数组。用来存放字符型数据的数组为字符数组。数组中的一个元素中只能存放一个字符,整个数组可以存数组中的一个元素中只能存放一个字符,整个数组可以存放一个字符串。放一个字符串。char c5;字符数组的初始化字符数组的初始化逐个为数组中的
16、各元素赋初值逐个为数组中的各元素赋初值char c5=a,b,c,d,e;用字符串直接给字符数组赋初值用字符串直接给字符数组赋初值char str12=C+ program;char str12= C+ program;char str=C+ program;构造数据类型构造数据类型2008-2009-2 C+程序设计19字符串字符串字符串字符串字符串是以字符串是以0作为结束标志的一个字符序列。作为结束标志的一个字符序列。字符串字符串“C.program”包括包括9个字符,但在内存中占个字符,但在内存中占10个字节,最后个字节,最后一个字节存放一个字节存放 0。注意:注意:字符串只能用字符数组
17、来保存,不能用一个简单的字符变量保存。字符串只能用字符数组来保存,不能用一个简单的字符变量保存。字符数组的特殊初始化方式字符数组的特殊初始化方式可以用一个字符串常量中的字符为字符数组进行初始化。可以用一个字符串常量中的字符为字符数组进行初始化。char c10=“C.program”;此种方式把一个字符串保存到字符数组此种方式把一个字符串保存到字符数组c中了,中了,包括包括0字符字符。构造数据类型构造数据类型2008-2009-2 C+程序设计20典型字符串函数典型字符串函数提供了一系列字符串操作函数,这些函数都包含在头提供了一系列字符串操作函数,这些函数都包含在头文件文件string.h中,
18、要调用字符串处理函数时,要包含中,要调用字符串处理函数时,要包含string.h文件。文件。其中经常会用到的字符函数包括:其中经常会用到的字符函数包括:strcpystrcatstrcmpstrlenstrstr2008-2009-2 C+程序设计21strcpy函数函数strcpy()函数原型说明如下:函数原型说明如下:char *strcpy(char *to,const char *from);功能:功能:该函数将该函数将from字符串中的内容复制到字符串中的内容复制到to字符串中,其中字符串中,其中s2的字符串是已知的。的字符串是已知的。注意:注意:构成构成to的字符串必须足够大,以便
19、保存包含在的字符串必须足够大,以便保存包含在from中的字中的字符串。否则,符串。否则,to字符串将会溢出,这很可能会导致系统崩字符串将会溢出,这很可能会导致系统崩溃。溃。例例4.9 :使用字符串拷贝函数将一个已知字符串赋值给一个字符数使用字符串拷贝函数将一个已知字符串赋值给一个字符数组。组。#include #include void main()char s130=first;char s220=second;char s310=third;char s430;strcpy(s4,s1);strcat(s4,s2);strcat(s4,s3);couts4:s4endl;coutstrca
20、t(s1,strncat(s2,s3,3)endl;例题例题2008-2009-2 C+程序设计22strcat函数函数 strcat()函数的原型说明如下:函数的原型说明如下:char *strcat (char *s1,char *s2);功能:功能:将字符串将字符串s2添加到字符串添加到字符串s1的末端,形成一个包含了两个的末端,形成一个包含了两个字符串的新字符串;但并不修改字符串字符串的新字符串;但并不修改字符串s2。注意:注意:必须确字符串必须确字符串s1足够大,以便保存它自己的内容和字符串足够大,以便保存它自己的内容和字符串s2中的内容。一般要求,中的内容。一般要求,s1所指对象的
21、大小不小于所指对象的大小不小于strlen(s1)+stlen(s2)+1。例例4.7 :使用字符串连接函数连接字符串。使用字符串连接函数连接字符串。#include #include void main()char s130=first;char s220=second;char s310=third;char s430;strcpy(s4,s1);strcat(s4,s2);strcat(s4,s3);couts4:s4endl;coutstrcat(s1,strncat(s2,s3,3)endl;例题例题2008-2009-2 C+程序设计23strcmp函数函数strcmp()函数的原
22、型说明如下:函数的原型说明如下:int strcmp (char *s1,char *s2);功能:功能:比较两个字符串是否相等。如果两个字符串相等,返回比较两个字符串是否相等。如果两个字符串相等,返回0。如果字符串如果字符串s1在字典顺序上比字符串在字典顺序上比字符串s2大,则返回一个正大,则返回一个正数;如果比字符串数;如果比字符串s2小,则返回一个负数。小,则返回一个负数。注意:注意:函数函数strncmp比较两个字符串时比较对应比较两个字符串时比较对应ASCII值。值。如比较如比较strcmp(A,a)的结果就为的结果就为1int strncmp(char *s1,char *s2,i
23、nt n); 例例4.8 :使用字符串比较函数比较两个字符串的大小。使用字符串比较函数比较两个字符串的大小。 #include #include void main()int result,n;char s180,s280;couts1;couts2;coutn;result=strncmp(s1,s2,n);if(result=0) couts1 is equal to s2endl; else if(result0) couts1 is less than s2endl;else cout s1 is greater than s2endl;例题例题2008-2009-2 C+程序设计24
24、strlen函数函数strlen()函数的原型说明如下:函数的原型说明如下:int strlen(const char *s);功能:功能:返回一个字符串的长度,即字符串中字符的个数返回一个字符串的长度,即字符串中字符的个数注意:注意:长度不包括字符串结尾的长度不包括字符串结尾的0。例例4.10计算已知字符串的长度。计算已知字符串的长度。#include #include void main()char s1=abc ef;char *s2=hello;char s380;couts3;couts1:strlen(s1)endl;couts2:strlen(s2)endl;couts3:str
25、len(s3)endl;coutstrlen(iostream.h);例题例题2008-2009-2 C+程序设计25字符数组的应用字符数组的应用 例例4.11 问题问题输入长度不超过输入长度不超过50的字符中,计算并输出该字符串的长度。的字符中,计算并输出该字符串的长度。分析分析利用利用strlen()函数函数#include void main()char str50;int ilength=0,i=0;cout请输入一个字符串:请输入一个字符串:str;while(stri!=0&i50)ilength+;i+;cout字符串的长度为:字符串的长度为:ilengthendl;例题例题20
26、08-2009-2 C+程序设计26字符数组的应用字符数组的应用 例例4.12 问题问题缩写程序将字符数组缩写程序将字符数组str2中的字符全部复制到字符数组中的字符全部复制到字符数组str1中,要求不用中,要求不用strcpy函数。函数。分析分析利用利用strcpy()函数函数#include void main()int i;char str120,str220;coutstr2;for(i=0;str2i!=0&i20;i+)str1i=str2i;str1i=0;cout输出拷贝后的字符串:输出拷贝后的字符串:nstr1endl;例题例题2008-2009-2 C+程序设计27字符数组
27、的应用字符数组的应用 例例4.13 问题问题从键盘上输入从键盘上输入4个字符串,输出其中最大者。个字符串,输出其中最大者。分析分析利用利用strcmp()函数函数#include #include void main()int i;char max15= ,str415;cout请输入请输入4个字符串:个字符串:n;for(i=0;i4;i+)cin.getline(stri,15);if(strcmp(max,stri)0)strcpy(max,stri); cout最大的字符串是:最大的字符串是:maxendl;例题例题2008-2009-2 C+程序设计28字符串字符串字符串的输出字符串
28、的输出用用coutcout字符串或字符数组名;字符串或字符数组名;char s20=This is a string.;则则couts;的输出结果为的输出结果为This is a string.。也可直接输出字符串常量:也可直接输出字符串常量:coutThis is a string.构造数据类型构造数据类型2008-2009-2 C+程序设计29字符串字符串字符串的输出字符串的输出用用cout流对象的流对象的put方法方法cout.put(字符或字符变量字符或字符变量);利用这种方法,每次只能输出一个字符,所以要输出整个字符串,利用这种方法,每次只能输出一个字符,所以要输出整个字符串,应采用
29、循环的方法。应采用循环的方法。#include void main() char s20=This is a string.; int i=0; while (si!=0) cout.put(si); i+; 构造数据类型构造数据类型2008-2009-2 C+程序设计30字符串字符串字符串的输出字符串的输出用用cout流对象的流对象的write方法方法cout.write(字符串或字符数组名,字符个数字符串或字符数组名,字符个数n);其作用是输出字符串中的前其作用是输出字符串中的前n个字符。个字符。#include void main() char s20=This is a string.
30、; cout.write(s, 4); coutendl; cout.write(s, sizeof(s); cout字符数组名;字符数组名;这种方式只能接收空白符之前的部分,无法完全接收包含空白符的这种方式只能接收空白符之前的部分,无法完全接收包含空白符的字符串。字符串。#include void main() char s20; cins; coutsendl;abcdeabcdeab cdeab构造数据类型构造数据类型2008-2009-2 C+程序设计32字符串字符串字符串的输入字符串的输入利用利用cin流对象的流对象的getline方法。方法。cin.getline(字符数组名字符数
31、组名, 输入字符串的最大长度输入字符串的最大长度n);其中:其中: 参数参数“字符数组名字符数组名”是存放字符串的数组名称;是存放字符串的数组名称; 参数参数“输入字符串的最大长度输入字符串的最大长度n”包括字符串结束标记包括字符串结束标记0在内。在内。该种方法可以接收含有空格符、制表符的字符串。该种方法可以接收含有空格符、制表符的字符串。#include void main() char s20; cin.getline(s, 20); coutsendl;ab c deab c de构造数据类型构造数据类型2008-2009-2 C+程序设计33字符串字符串字符串的输入字符串的输入利用利用
32、cin流对象的流对象的get方法。方法。cin.get(字符数组名,输入字符串的最大长度字符数组名,输入字符串的最大长度n);字符变量名字符变量名=cin.get();说明:说明: 格式格式1中的两参数的含义同中的两参数的含义同getline方法。方法。 格式格式2表示输入一个字符,如果要保存该字符,则在其左边写上被表示输入一个字符,如果要保存该字符,则在其左边写上被赋值的变量名和赋值号,如果不保存该字符,则可写为赋值的变量名和赋值号,如果不保存该字符,则可写为cin.get();构造数据类型构造数据类型2008-2009-2 C+程序设计34字符串字符串字符串的输入字符串的输入利用利用cin
33、流对象的流对象的get方法。方法。#include void main() char s20; char c; cin.get(s,10); couts: (s)n; c=cin.get(); coutc: (c)n;ab c des: (ab c de)c: ()输入过程中的换行符输入过程中的换行符n并未接收,而还留在输并未接收,而还留在输入缓冲区中。入缓冲区中。这一点也是这一点也是cin.get与与cin.getline间的区别。间的区别。构造数据类型构造数据类型2008-2009-2 C+程序设计35小结小结本章主要介绍了数组的概念以及一维数组、二维数组本章主要介绍了数组的概念以及一维数组、二维数组的定义和使用方法的定义和使用方法其中要重点掌握一维数组和二维数组的使用方法。其中要重点掌握一维数组和二维数组的使用方法。构造数据类型构造数据类型