《数组和字符串.pptx》由会员分享,可在线阅读,更多相关《数组和字符串.pptx(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第四章第四章 数组和字符串数组和字符串第1页/共42页2教学目标(1)掌握数组的定义、初始化和引用方法;(2)了解数组在数值计算、数据统计、排序和数据检索方面的应用;(3)了解字符串与字符数组的概念,会对于字符串进行整体输入输出。第2页/共42页3基本内容 4.1 数组4.1.1 一维数组4.1.2 二维数组4.2 字符数组4.2.1 字符数组的定义、初始化和输入与输出4.2.2 字符串处理函数第3页/共42页4构造数据类型构造数据类型问题的引出:实际应用的程序设计中,只用几个变量的情况是极少的;更多的情况是处理大批量的相同类型或不同类型的数据。相同类型数据举例:统计全校15,000学生英语4
2、级统考成绩;不同类型数据举例:管理全校15,000学生学籍信息记录,每条记录信息包括:姓名、学号、出生日期、班级、各科成绩等。用什么样的数据结构来描述这类应用更简洁?第4页/共42页54.1 数组数组:具有相同类型的数据的集合。数组用数组名来标识。其中的每个变量(数组元素)通过该变量在数组中的相对位置(下标)来引用。特点:常用于处理大批量数据;数据特点:存在内在联系;数组具有相同数据类型的变量集合;这些变量都有相同名字,但下标不同;称这些变量为数组元素;只有一个下标一维数组;有两个下标二维数组。第5页/共42页6数组说明与变量相同。数据类型 数组名整型常数表达式,.例:int array10;
3、/说明了一个有10个元素的整型数组double matrix2020;/说明了一个20行20列的浮点型矩阵特点:数组名定名规则和变量名相同,遵循标识符定名规则。数组名后是用方括号起来的常量表达式,不能用圆括号错误用法:int a(10);方括号中的下标表示元素在数组中的位置。下标从0开始,必须是整型常量。第6页/共42页7(1)一维数组存储结构一维数组存储结构逻辑结构:由一串数据构成的向量表,每个元素的下标值确定了各元素在此数据表中的位置。A5排序次序为:A0,A1,A2,A3,A4存贮结构:数组元素存放为一片连续的存储单元,其元素在内存中的存放顺序与逻辑结构是一致的;即所谓“逻辑上相邻,物理
4、上也相邻”。A5的存储结构为:A0A1A2A3 A4第7页/共42页8一维数组的初始化一维数组的初始化 在定义数组时对数组元素赋以初值。例如:int a10=0,1,2,3,4,5,6,7,8,9;如果想使一个数组中全部元素值为0,可以写成int a10=0,0,0,0,0,0,0,0,0,0;不能写成 int a10=0*10;即不能给数组整体赋初值(C+不允许对一个数组进行聚集操作)。在对全部数组元素赋初值时,可以不指定数组长度。例如:int a5=1,2,3,4,5;可以写成 int a=1,2,3,4,5;在第二种写法中,花括号中有5个数,系统会据此自动定义a数组的长度为5。第8页/共
5、42页9例:找出一维数组中的最大数。例:找出一维数组中的最大数。算法分析:1.假设数组中第1个元素最大,令big=array02.将array i(0=i n)与big进行比较,若array i big,i=i+1,再执行2否则,令big=array i,i=i+1,再执行23.循环结束,求出最大元素并输出big。第9页/共42页/找出一维数组中的最大数#include using namespace std;int main()int array7;coutPlease input an array with seven elements:endl;for(int i=0;iarrayi;i
6、nt big=array0;for(int j=0;jbig)big=arrayj;coutmax=bigmaxaijmax第13页/共42页#include using namespace std;int main()int i,j,row=0,colum=0,max;int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a00;for(i=0;i=2;i+)for(j=0;jmax)max=aij;row=i;colum=j;coutmax=max,row=row,colum=columname;字符串的输出coutname;第18页/共42页194.2.2 字符
7、串处理库函数字符串处理库函数C/C+提供了许多字符串处理函数。使用这些函数,可以提高字符处理的效率。字符串处理函数的说明都包含在“cstring”头文件中,所以使用时需要添加#include stpcpy():字符串拷贝;strcat():字符串连接;strchr():在字符串中查找字符;strcmp():字符串比较;strlen():求字符串长度;strlwr():将字符串中的大写字母转换为小写字母;strrev():反转字符串;strstr():在字符串中查找另一个字符串;strupr():将字符串中的小写字母转换为大写字母;第19页/共42页20字符串处理函数字符串处理函数(1)求字符串
8、的长度:int strlen(char s);例如:len=strlen(This is a sample.);执行后,变量len会被赋值17。(2)字符串连接函数 strcat(char destin,char source);(3)复制字符串strcpy(char destin,char source);例如:char weekday11;strcpy(weekday,MONDAY);(4)字符串比较int strcmp(char string1,char string2);第20页/共42页21例4-2:字符串复制函数和连接函数的用法#include#include using name
9、space std;int main()char s80;strcpy(s,Hello world from );strcat(s,strcpy );strcat(s,and );strcat(s,strcat!);coutsendl;return 0;第21页/共42页22例4-3:简单的口令验证系统#include#include using namespace std;int main()char pwd50;while(1)coutpwd;if(strcmp(pwd,welcome)cout口令不正确,请重新输入!endl;elsebreak;cout口令正确,欢迎使用,再见。endl
10、;return 0;第22页/共42页23扩展阅读4.3 字符串类字符串类隶属于标准C+语言类库,若要在程序中使用字符串类,必须在源程序最前面包含标准C+语言类库的头文件。使用与基本数据类型int、char等类似,定义格式为:string 对象1,对象2,;例如:string s1,s2;/定义对象s1和s2 string s3(Monday);/定义s3同时初始化第23页/共42页/例 4-4 字符串类的运算符操作#include#include using namespace std;int main()string str1(Zhang3);string str2(Li4);string
11、 str3=Wang5;string str4;/字符串赋值str4=str1;cout str1 endl str4 endl;/字符串连接str4=str2+str3;cout str4 endl;str4=str2+and +str3;cout str4=str1)cout=str1 endl;elsecout str3 str1 endl;/输入字符串cout str5;cout str5 endl;return 0;运行结果:Zhang3Zhang3Li4Wang5Li4 and Wang5str3 str1请输入一个字符串:MondayMonday第24页/共42页25上机指导4.
12、4 基本调试方法标准数据检验:用若干组已知结果的标准数据对程序进行检验标准数据:要有代表性,接近实际数据;比较简洁,容易对其结果的正确性进行分析;对重要的临界数据也必须进行检验。程序跟踪:让程序逐句执行,通过观察和分析执行过程中数据和流程变化来查找错误采用跟踪调试工具传统的方法:在程序中直接设置断点、打印重要变量内容等来掌握程序的运行情况。边界检查:重点检查边界和特殊情况如果程序中有由if-else语句、switch语句等组成的分支结构,应该设计相应的数据,使得分支中的每一条路径都要通过检验例如,while(count1000)就应该检验count等于999、1000、0 或负数等情况。简化:
13、在调试时,有时可以通过对程序进行某种简化来加快调试速度。例如减少循环次数、缩小数组规模、屏蔽次要程序段等。要注意简化不能太过分,以致于无法代表原程序的真实情况。第25页/共42页26应用举例例 4-5:使用数组方法计算斐波那挈数列问题#include using namespace std;int main()int i,f24;f0=1;f1=1;/构造斐波那契数列for(i=2;i24;i+)fi=fi-1+fi-2;/输出斐波那契数列for(i=0;i24;i+)coutfit;coutendl;return 0;第26页/共42页27例4-6:使用冒泡排序法编写程序,可以对任意输入的1
14、0个整数进行从小到大的排序 算法分析:1.两两比较相邻元素Ai和Ai-1(i=N-1,N-2,2,1,0),如果AiAi-1,则交换它们的位置 AiAi-1;经过N-1次比较,将最小值交换到A0的位置;2.对剩下的N-1个元素,再两两进行比较,按同样规则交换它们的位置,经过N-2次比较,将次最小值交换到A1的位置;3.如法炮制,经过N-1趟的“冒泡处理”,每趟进行N-i次的比较,全部数列有序。第27页/共42页#include using namespace std;int main()int i,j,tmp;int list10;cout 请输入待排序的整数数列:;for(i=0;ilist
15、i;for(i=0;ii;j-)/每次都从最后一个元素开始比较if(listj-1listj)/如果前后顺序不符,则交换位置tmp=listj-1;listj-1=listj;listj=tmp;/输出排序后的数组cout 排序后的整数数列为:;for(i=0;i10;i+)cout listi ;coutendl;return 0;第28页/共42页29应用举例例 4-7:编写程序,计算两个矩阵差。第29页/共42页#include using namespace std;int main()const int M=3;const int N=4;double aMN=1,2,3,4,5,6
16、,7,8,9,10,11,12;double bMN=1,4,7,10,2,5,8,11,3,6,9,12;double cMN;/结果矩阵cout 矩阵a和矩阵b的差的矩阵c为:endl;/两个矩阵的加减是对应矩阵元素的加减for(int i=0;iM;i=i+1)for(int j=0;jN;j=j+1)ci j=ai j-bi j;cout ci j t;cout endl;/每输出完成一行中所有元素后换行return 0;第30页/共42页31应用举例例4-8字符串连接。/方法0,直接调用字符串连接函数#include#include using namespace std;int m
17、ain()char destination81=abcdefghijklmnopqrstuvwxyz;char source=ABCDEFGHIJKLMNOPQRSTUVWXYZ;strcat(destination,source);/直接调用字符串连接函数cout连接后的字符串为:destinationendl;return 0;第31页/共42页32应用举例例4-8字符串连接。/方法1,利用字符数组的结构特点#include#include using namespace std;int main()char destination81=abcdefghijklmnopqrstuvwxyz
18、;char source=ABCDEFGHIJKLMNOPQRSTUVWXYZ;int i=strlen(destination);/求出目标字符串长度,以确定复制位置int j=0;while(sourcej!=0)/在未达到源字符串尾部前逐个字符复制destinationi+=sourcej+;destinationi=0;/在目标字符串的结尾处添加结束标志cout连接后的字符串为:destinationendl;return 0;第32页/共42页33应用举例例4-9 恺撒(替换)加密法加密规则:将每个字母用字母表中排在其后面的第3个字母的大写形式来替换(如字母d或D就用G来替换),对于
19、字母表中最后的三个字母,可将字母表看成是首尾衔接的(如字母y或Y用B来替换);字符串中其他非字母符号不做改变。使用该方法编写一个字符串加密程序。第33页/共42页/例4-9:恺撒(替换)加密#include#include using namespace std;int main()char str50=I love you;cout加密前的字符串是:str=a&stri=A&stri=Z)stri=(stri+3-A)%26+A;/按凯撒加密法替换字母i+;cout加密后的字符串是:strendl;return 0;第34页/共42页35学好程序设计语言的唯一途径是 你的编程能力与你在计算机上投入的时间成 结结束束语语第35页/共42页42谢谢您的观看!第42页/共42页