版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章第四章 数组和字符串数组和字符串3教学目标l(1) 掌握数组的定义、初始化和引用方法掌握数组的定义、初始化和引用方法;l(2) 了解数组在数值计算、数据统计、排序和数了解数组在数值计算、数据统计、排序和数据检索方面的应用据检索方面的应用;l(3) 了解字符串与字符数组的概念,会对于字符了解字符串与字符数组的概念,会对于字符串进行整体输入输出串进行整体输入输出。4基本内容 l4.1 数组数组l4.1.1 一维数组l4.1.2 二维数组l4.2 字符数组字符数组l4.2.1 字符数组的定义、初始化和输入与输出l4.2.2 字符串处理函数5构造数据类型构造数据类型l问题的引出:问题的引出:l实
2、际应用的程序设计中,只用几个变量的情况是极少的;实际应用的程序设计中,只用几个变量的情况是极少的;更多的情况是处理大批量的相同类型或不同类型的数据。更多的情况是处理大批量的相同类型或不同类型的数据。相同类型数据举例:统计全校相同类型数据举例:统计全校15,000学生英语学生英语4级统考成绩;级统考成绩;不同类型数据举例:管理全校不同类型数据举例:管理全校15,000学生学籍信息记录,每学生学籍信息记录,每条记录信息包括:姓名、学号、出生日期、班级、各科成绩等。条记录信息包括:姓名、学号、出生日期、班级、各科成绩等。l用什么样的数据结构来描述这类应用更简洁?用什么样的数据结构来描述这类应用更简洁
3、?64.1 数组l数组:数组: 具有相同类型的数据的集合。具有相同类型的数据的集合。l数组用数组名来标识。数组用数组名来标识。l其中的每个变量其中的每个变量(数组元素数组元素)通过该变量在数组中的相对位置通过该变量在数组中的相对位置(下标下标)来引用。来引用。l特点:特点:l常用于处理大批量数据;常用于处理大批量数据;l数据特点:存在内在联系;数据特点:存在内在联系;l数组数组具有相同数据类型的变量集合;具有相同数据类型的变量集合;l这些变量都有相同名字,但下标不同;这些变量都有相同名字,但下标不同;l称这些变量为数组元素;称这些变量为数组元素;l只有一个下标只有一个下标一维数组;一维数组;l
4、有两个下标有两个下标二维数组。二维数组。7数组说明l与变量相同。与变量相同。数据类型数据类型 数组名数组名整型常数表达式整型常数表达式,.l例:例:lint array10; / 说明了一个有说明了一个有10个元素的整型数组个元素的整型数组ldouble matrix2020; / 说明了一个说明了一个20行行20列的浮点型矩阵列的浮点型矩阵l特点:特点:l数组名定名规则和变量名相同,遵循标识符定名规则。数组名定名规则和变量名相同,遵循标识符定名规则。l数组名后是用方括号起来的常量表达式,不能用圆括号数组名后是用方括号起来的常量表达式,不能用圆括号l错误用法:错误用法:int a(10);l方
5、括号中的下标表示元素在数组中的位置。下标从方括号中的下标表示元素在数组中的位置。下标从0开始,开始,必必须须是整型常量。是整型常量。8(1)一维数组存储结构l逻辑结构:逻辑结构:l由一串数据构成的向量表,每个元素的下标值确定了各元素在此由一串数据构成的向量表,每个元素的下标值确定了各元素在此数据表中的位置。数据表中的位置。lA5排序次序为:排序次序为: A0,A1,A2,A3,A4l存贮结构:存贮结构:l数组元素存放为一片连续的存储单元,其元素在内存中的存放顺数组元素存放为一片连续的存储单元,其元素在内存中的存放顺序与逻辑结构是一致的;即所谓序与逻辑结构是一致的;即所谓“逻辑上相邻,物理上也相
6、邻逻辑上相邻,物理上也相邻”。lA5的存储结构为:的存储结构为:A0A1A2A3 A49一维数组的初始化一维数组的初始化l 在定义数组时对数组元素赋以初值。在定义数组时对数组元素赋以初值。l例如例如:int a10=0,1,2,3,4,5,6,7,8,9;l如果想使一个数组中全部元素值为如果想使一个数组中全部元素值为0,可以写成,可以写成int a10=0,0,0,0,0,0,0,0,0,0;l不能写成不能写成 int a10=0*10;即不能给数组整体赋初值(即不能给数组整体赋初值(C+不允许对一个数组进行聚集操作不允许对一个数组进行聚集操作 )。)。l 在对全部数组元素赋初值时,可以不指定
7、数组长度。在对全部数组元素赋初值时,可以不指定数组长度。l例如例如:int a5=1,2,3,4,5;l可以写成可以写成 int a=1,2,3,4,5;l在第二种写法中,花括号中有在第二种写法中,花括号中有5个数,系统会据此自动定义个数,系统会据此自动定义a数组的长数组的长度为度为5。10例:找出一维数组中的最大数。l算法分析:算法分析:1.假设数组中第假设数组中第1个元素最大,令个元素最大,令big =array02.将将array i(0= i n)与与big进行比较,进行比较,若若array i big ,i=i+1,再执行再执行2否则,令否则,令big =array i,i=i+1,
8、再执行再执行23.循环结束,求出最大元素并输出循环结束,求出最大元素并输出big。/ 找出一维数组中的最大数找出一维数组中的最大数#include using namespace std; int main() int array7;coutPlease input an array with seven elements: endl;for(int i=0; iarrayi;int big = array0;for(int j=0; jbig)big = arrayj;coutmax=bigmaxaijmax#include using namespace std; int main()in
9、t 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;l字符串的输出字符串的输出coutname; 204.2.2 字符串处理库函数lC/C+提供了许多字符串处理函数。使用这些函数,可提供了许多字符串处理函数。使用这些函数,可以提高字符处理的效率。以提高字符处理的效率。l字符串处理函数的说明都包含在字符串处理函数的说
10、明都包含在“cstring”头文件中头文件中,所以使用时需要添加所以使用时需要添加#include lstpcpy(): 字符串拷贝字符串拷贝;lstrcat(): 字符串连接字符串连接;lstrchr(): 在字符串中查找字符在字符串中查找字符;lstrcmp(): 字符串比较字符串比较;lstrlen(): 求字符串长度求字符串长度;lstrlwr(): 将字符串中的大写字母转换为小写字母将字符串中的大写字母转换为小写字母;lstrrev(): 反转字符串反转字符串;lstrstr(): 在字符串中查找另一个字符串在字符串中查找另一个字符串;lstrupr(): 将字符串中的小写字母转换为
11、大写字母将字符串中的小写字母转换为大写字母;l 21字符串处理函数l(1) 求字符串的长度求字符串的长度:int strlen(char s );例如例如:len = strlen(This is a sample.);执行后,变量执行后,变量len会被赋值会被赋值17。l(2) 字符串连接函数字符串连接函数 strcat(char destin , char source );l(3) 复制字符串复制字符串strcpy(char destin , char source );例如例如:char weekday11;strcpy(weekday, MONDAY);l(4) 字符串字符串比较比较
12、int strcmp(char string1 , char string2 );22例4-2:字符串复制函数和连接函数的用法#include #include using namespace std;int main()char s80;strcpy( s, Hello world from );strcat( s, strcpy );strcat( s, and );strcat( s, strcat! );coutsendl;return 0;23例4-3:简单的口令验证系统#include #include using namespace std;int main()char pwd5
13、0;while(1)coutpwd;if(strcmp(pwd, welcome)cout口令不正确,请重新输入!口令不正确,请重新输入!endl;elsebreak;cout口令正确,欢迎使用,再见。口令正确,欢迎使用,再见。endl;return 0;24扩展阅读l4.3 字符串类字符串类l字符串类隶属于标准字符串类隶属于标准C+语言类库,若要在程序中使语言类库,若要在程序中使用字符串类,必须在源程序最前面包含标准用字符串类,必须在源程序最前面包含标准C+语言语言类库的头文件类库的头文件。l使用与基本数据类型使用与基本数据类型int、char等类似,定义格式为:等类似,定义格式为:stri
14、ng 对象对象1, 对象对象2, ;l例如:例如: string s1, s2;/定义对象定义对象s1和和s2 string s3(Monday);/定义定义s3同时初始化同时初始化/ 例例 4-4 字符串类的运算符操作字符串类的运算符操作#include #include using namespace std;int main()string str1(Zhang3);string str2(Li4);string str3=Wang5;string str4;/ 字符串赋值字符串赋值str4 = str1; cout str1 endl str4 endl;/ 字符串连接字符串连接str
15、4 = 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请输入一个字符串: MondayMonday26上机指导l4.4 基本调试方法基本调试方法l标准数据检验标准数据检验:用若干组已知结果的标准数据对程序进行检验用若干组已知结果的标准数
16、据对程序进行检验l标准数据:要有代表性标准数据:要有代表性, 接近实际数据接近实际数据;比较简洁比较简洁, 容易对其结果的正确性进行容易对其结果的正确性进行分析;对重要的临界数据也必须进行检验。分析;对重要的临界数据也必须进行检验。 l程序跟踪程序跟踪:让程序逐句执行让程序逐句执行, 通过观察和分析执行过程中数据和流程变化来查找错误通过观察和分析执行过程中数据和流程变化来查找错误l采用跟踪调试工具采用跟踪调试工具l传统的方法:传统的方法: 在程序中直接设置断点、打印重要变量内容等来掌握程序的运在程序中直接设置断点、打印重要变量内容等来掌握程序的运行情况。行情况。l边界检查边界检查:重点检查边界
17、和特殊情况重点检查边界和特殊情况l如果程序中有由如果程序中有由if-else语句、语句、switch语句等组成的分支结构语句等组成的分支结构, 应该设计相应的数应该设计相应的数据,使得分支中的每一条路径都要通过检验据,使得分支中的每一条路径都要通过检验例如例如, while(count1000) 就应该检验就应该检验count等于等于999、1000、0 或负数等情况。或负数等情况。l简化简化:在调试时在调试时, 有时可以通过对程序进行某种简化来加快调试速度。有时可以通过对程序进行某种简化来加快调试速度。l例如减少循环次数、缩小数组规模、屏蔽次要程序段等。例如减少循环次数、缩小数组规模、屏蔽次
18、要程序段等。l 要注意简化不能太过分要注意简化不能太过分, 以致于无法代表原程序的真实情况。以致于无法代表原程序的真实情况。27应用举例l例例 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;28例4-6:使用冒泡排序法编写程序,可以对
19、任意输入的10个整数进行从小到大的排序 l算法分析:算法分析: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次
20、的比较次的比较,全部数全部数列有序。列有序。#include using namespace std;int main()int i, j, tmp;int list10;cout 请输入待排序的整数数列:请输入待排序的整数数列:;for(i=0; ilisti;for(i=0; ii; j-)/ 每次都从最后一个元素开始比较每次都从最后一个元素开始比较if(listj-1listj)/ 如果前后顺序不符,则交如果前后顺序不符,则交换位置换位置tmp = listj-1;listj-1 = listj;listj = tmp;/ 输出排序后的数组输出排序后的数组cout 排序后的整数数列为:排
21、序后的整数数列为:;for(i=0; i10; i+)cout listi ;coutendl;return 0;30应用举例l例例 4-7:编写程序,计算两个矩阵差。:编写程序,计算两个矩阵差。129631185210741121110987654321#include using namespace std;int main()const int M=3;const int N=4;double aMN=1, 2, 3, 4,5, 6, 7, 8,9, 10, 11,12;double bMN=1, 4, 7,10,2, 5, 8, 11,3, 6, 9,12;double cMN;/ 结
22、果矩阵结果矩阵cout 矩阵矩阵a和矩阵和矩阵b的差的矩阵的差的矩阵c为为: endl;/ 两个矩阵的加减是对应矩阵元素的加减两个矩阵的加减是对应矩阵元素的加减for(int i=0; iM; i=i+1)for(int j=0; jN; j=j+1)cij=aij-bij;cout cij t;cout endl;/ 每输出完成一行中所有元素后换行每输出完成一行中所有元素后换行return 0; 32应用举例l例例4-8字符串连接。字符串连接。/ 方法方法0,直接调用字符串连接函数直接调用字符串连接函数#include #include using namespace std;int mai
23、n()char destination81 = abcdefghijklmnopqrstuvwxyz;char source = ABCDEFGHIJKLMNOPQRSTUVWXYZ;strcat(destination, source); / 直接调用字符串连接函数直接调用字符串连接函数cout连接后的字符串为:连接后的字符串为:destinationendl;return 0;33应用举例l例例4-8字符串连接。字符串连接。/ 方法方法1,利用字符数组的结构特点利用字符数组的结构特点#include #include using namespace std;int main()char destination81 = abcdefghijklmnopqrstuvwxyz;char source = ABCDEFGHIJKLMNOPQRSTUVWXYZ;int i = strlen(destination);/ 求出目标字符串长度,以确定复制位置求出目标字符串长度,以确定复制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美容院二零二五年度员工保密及竞业禁止合同范本4篇
- 2025年度绿色建筑抹灰分包劳务合同4篇
- 个人信用融资合同2024标准版版B版
- 2025年铁矿石交易平台会员服务合同标准版3篇
- 2025年绿色生态园区项目工程施工聘用合同2篇
- 二零二五年度智能医疗系统IT外包服务协议2篇
- 二零二四年农村电商贷款担保合同范本3篇
- 二零二五年度国际美食厨师聘用及文化交流合同4篇
- 标题18:2025年度网络安全风险评估与整改服务合同2篇
- 二零二五版钢管出租与绿色制造合同3篇
- 中外美术史试题及答案
- 工会换届公示文件模板
- 江苏省南京市协同体七校2024-2025学年高三上学期期中联合考试英语试题答案
- 青岛版二年级下册三位数加减三位数竖式计算题200道及答案
- GB/T 12723-2024单位产品能源消耗限额编制通则
- GB/T 16288-2024塑料制品的标志
- 麻风病防治知识课件
- 干部职级晋升积分制管理办法
- TSG ZF003-2011《爆破片装置安全技术监察规程》
- 2024年代理记账工作总结6篇
- 电气工程预算实例:清单与计价样本
评论
0/150
提交评论