1、0第4章 数组和字符串4.1 数组数组4.2 字符串处理字符串处理4.3 字符串类字符串类 1教学目标(1)掌握数组的定义、初始化和引用方法掌握数组的定义、初始化和引用方法;(2)了解数组在数值计算、数据统计、排序和数据了解数组在数值计算、数据统计、排序和数据检索方面的应用;检索方面的应用;(3)了解字符串与字符数组的概念,会对于字符串了解字符串与字符数组的概念,会对于字符串进行整体输入输出进行整体输入输出。24.1 数组一、概念一、概念1.构造数据类型构造数据类型由基本类型数据按一定规则组成,也称由基本类型数据按一定规则组成,也称“导出类型导出类型”例如:数组、结构体、共用体例如:数组、结构
2、体、共用体2、数组、数组1)具有相同数据类型的变量集合;)具有相同数据类型的变量集合;2)每个变量名相同,通过下标表达位置;)每个变量名相同,通过下标表达位置;3)每个变量称为数组元素;)每个变量称为数组元素;4)下标的个数:数组的维数)下标的个数:数组的维数3二、一维数组1、定义格式、定义格式:类型名类型名 数组名数组名长度长度 例如:例如:int a10;表示一维数组名为表示一维数组名为a,共有,共有10个元素个元素2、说明、说明(1)数组名命名规则和变量名相同数组名命名规则和变量名相同(2)方括号中的长度为常量表达式方括号中的长度为常量表达式(3)在内存中按下标递增的顺序连续存储各元素的
3、值。在内存中按下标递增的顺序连续存储各元素的值。(4)下标从下标从0开始,开始,10个元素分别个元素分别是是a0a9a0a1a2a3a4a5a6a7a8a943、一维数组的初始化初始化:定义数组时对数组元素赋初值。初始化:定义数组时对数组元素赋初值。(1)全部元素赋初值全部元素赋初值int a10=0,1,2,3,4,5,6,7,8,9;可以省略数组长度可以省略数组长度int a=0,1,2,3,4,5,6,7,8,9;(2)部分元素赋值,未被赋值元素值为部分元素赋值,未被赋值元素值为0int a10=0,1,2,3,4;int a10=0;结果如何?结果如何?54、数组元素的引用引用格式:引
4、用格式:数组名数组名下标下标引用原则:引用原则:1)分别引用每个元素)分别引用每个元素2)下标从)下标从0开始,必须是整型变量或常量。开始,必须是整型变量或常量。3)配合循环,下标与循环变量结合,引用所有的元素)配合循环,下标与循环变量结合,引用所有的元素6例1:显示数组中的每个元素#include using namespace std;void main()int i,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i=9;i+)cout ai;C+不检查下标是否出界不检查下标是否出界7例例2:给一维数组输入:给一维数组输入10个整数,找出其中的最大个整数,找出其中的最大
5、数和最小数。数和最小数。#include using namespace std;void main()int array10,big,small;for(int i=0;iarrayi;big=small=array0;8for(int j=0;jbig)big=arrayj;if(arrayjsmall)small=arrayj;coutmax=bigendl;coutmin=smallA(I+1),则交换它们的位置则交换它们的位置 A(I)A(I+1);(2)对剩下的对剩下的N-1个元素个元素,再两两进行比较再两两进行比较,按同样规则交按同样规则交换它们的位置换它们的位置,经过经过N-2
6、次比较次比较,将次最大值交换到将次最大值交换到A(N-1)的位置的位置;(3)同样同样,经过经过N-1趟的趟的“冒泡处理冒泡处理”,每趟进行每趟进行N-i次的比次的比较较,全部数列有序。全部数列有序。11冒泡排序法示意图12冒泡排序法程序#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 排序后
7、的整数数列为:排序后的整数数列为:;for(i=0;i10;i+)cout listi ;coutendl;return 0;13例 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;14三、二维数组二维数组用来存放具有行列关系的数据二维数组用来存放具有行列关系的数据例如,三个学生四门
8、课程成绩例如,三个学生四门课程成绩:85 87 93 88 86 90 95 89 78 91 82 951、定义、定义格式:格式:;例如:例如:int matrix34;152、二维数组初始化(1)全部赋值)全部赋值int score34=85,87,93,88,86,90,95,89,78,91,82,95;(2)按行赋值)按行赋值 int score34=85,87,93,88 ,86,90,95,89 ,78,91,82,95 ;(3)部分元素赋初值)部分元素赋初值float matrix23=1.0,3.0;float matrix23=1.0,0,3.0;163、二维数组元素的引用
9、引用方法:结合循环嵌套引用方法:结合循环嵌套外循环变量与第一个下标配合,对应行外循环变量与第一个下标配合,对应行内循环变量与第二个下标配合,对应列内循环变量与第二个下标配合,对应列17例:按行列输出二维数组元素#include using namespace std;void main()int i,j,a34=1,2,3,4,5,6,7,8,9,10,11,12;for(i=0;i3;i+)for(j=0;j4;j+)coutaij ;coutendl;18求4矩阵最大元素及所在的行、列号(最大元素可能出现不止一次最大元素可能出现不止一次)#include using namespace s
10、td;main()int i,j,max;int a34=1,2,3,4,9,10,7,6,10,-10,6,3;max=a00;for(i=0;i=2;i+)for(j=0;jmax)max=aij;coutmax;19for(i=0;i=2;i+)for(j=0;j=3;j+)if(max=aij)coutrow=“i“column=“jendl;20例 4-7:计算两个矩阵差12963118521074112111098765432121#include using namespace std;int main()const int M=3;const int N=4;double aM
11、N=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;22double cMN;/结果矩阵结果矩阵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 name;格式格式2:cin.get(name,n);/读入读入n-1个字符个字符2、输出、输出格式:格式:coutname;26例题:字符
12、串输入#include using namespace std;void main()char name120,name220;cin.get(name1,20);coutname1name2;coutname2endl;274.2.2 字符串处理库函数C+提供了许多字符串处理函数提供了许多字符串处理函数,这些函数的说明都这些函数的说明都包含在包含在“cstring”头文件中头文件中#include 28三、字符串处理函数1、复制、复制 strcpy(新串新串,旧串旧串)#include#include using namespace std;void main()char str120,st
13、r220;cinstr1;strcpy(str2,str1);coutstr1endl;coutstr2endl;292、连接 strcat()#include#include using namespace std;void main()char str120,str220;cinstr1;cinstr2;strcat(str1,str2);coutstr1endl;30例4-2:字符串复制和连接函数用法#include#include using namespace std;int main()char s80;strcpy(s,Hello world from );strcat(s,st
14、rcpy );strcat(s,and );strcat(s,strcat!);coutsendl;return 0;31例4-3:简单的口令验证系统#include#include using namespace std;int main()char pwd50;32while(1)coutpwd;if(strcmp(pwd,welcome)cout口令不正确,请重新输入!口令不正确,请重新输入!endl;elsebreak;cout口令正确,欢迎使用,再见。口令正确,欢迎使用,再见。endl;return 0;333、求字符串长度 strlen()#include#include usin
15、g namespace std;void main()char str20;strcpy(str,Zhang);coutstrlen(str)endl;34例题 求字符串的长度#include using namespace std;void main()char string100;int len=0;coutinput a string:string;while(stringlen!=0)len=len+1;coutlength=lenendl;354、字符串比较int strcmp(串串1,串串2)比较方法和结果比较方法和结果例:例:coutstrcmp(acd,aaa)endl;/1c
16、outstrcmp(abc,abc)endl;/0coutstrcmp(abc,abcd)endl;/-1365、大小写转换转小写:转小写:strlwr()转大写:转大写:strupr()#include#include using namespace std;void main()char str120=aBCDe,str220=ABcdE;coutstrlwr(str1)endl;coutstrupr(str2)大写大写 c=c-a+A;或或 c=c-3238例:将小写字母转换为大写字母#include using namespace std;void main()char str=Thi
17、s is a sample;coutThe original string is:str=a&stri=z)stri=stri-a+A;i=i+1;coutAfter transform:strendl;394.3 字符串类字符串类隶属于标准字符串类隶属于标准C+语言类库,若要在程序中语言类库,若要在程序中使用字符串类,必须在源程序最前面包含标准类使用字符串类,必须在源程序最前面包含标准类库的头文件库的头文件定义格式:定义格式:string 对象对象1,对象对象2,;例如:例如:string s1,s2;/定义对象定义对象s1和和s2 string s3(Monday);/定义定义s3同时初始
18、化同时初始化40例 4-4 字符串类的运算符操作#include#include using namespace std;int main()string str1(Zhang3);string str2(Li4);string str3=Wang5;string str4;41/字符串赋值字符串赋值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;部分输出:str3 str1请输入一个字符串:MondayMonday43阅读教材程序例例4-8 字符串连接字符串连接例例4-9 恺撒(替换)加密法恺撒(替换)加密法 思考思考:编写解密程序编写解密程序