109-4-1计算机程序计-数组与字符串(赵老师).ppt_第1页
109-4-1计算机程序计-数组与字符串(赵老师).ppt_第2页
109-4-1计算机程序计-数组与字符串(赵老师).ppt_第3页
109-4-1计算机程序计-数组与字符串(赵老师).ppt_第4页
109-4-1计算机程序计-数组与字符串(赵老师).ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章数组与字符串 西安交通大学计算机教学实验中心 计算机程序设计C 0 第4章数组与字符串 4 1数组1 一维数组2 二维数组3 多维数组4 2字符型数组和字符串处理库函数1 字符型数组的定义和初始化2 字符串的输入与输出3 字符串处理库函数 1 4 1数组 求三个数的和 平均 为长度4单词加密 求100个数的和 平均 对任意单词加密 对句子加密 数组 具有相同类型的数据的序列 它的名字称为数组名 每个数据称为一个数据元素或数组元素数组元素通过数组名和它在数组中的序号访问 如a 1 a 12 下标 一维数组 二维数组B 1 1 数组在c 中是一种构造类型 由基本类型数据按一定规则组成的数据和程序集合 包括数组 结构体 共用体 2 4 1 1一维数组 1 一维数组的定义格式 2 说明 1 数组名命名规则和变量名相同 2 数组名后用方括弧括起来的常量表达式表示下标长度 数组的大小 3 C语言的下标从0开始 必须是整型变量或常量 4 数组在内存中存储时 按下标递增的顺序连续存储各元素例如 intarray 10 表示数组名为array 有10个元素array 0 2 array 1 4 array 9 20 i 5 cout a i cout a j 3 3 一维数组的初始化 1 定义数组时顺序对各元素赋以初值例如 inta 10 0 1 2 3 4 5 6 7 8 9 2 可以只给一部分元素赋值 例如 inta 10 0 1 2 3 4 前面5个元素赋初值 后5个元素值为0 3 全部元素赋初值时 可以不指定数组长度例如 inta 5 1 2 3 4 5 可以写成inta 1 2 3 4 5 4 例4 1 给一维数组a输入10个整数 找出a数组中的最大数和最小数 算法分析 1 假设数组中第1个元素最大 令max a 0 2 将a i 0max 令max a i i i 1 转23 循环结束 求出最大元素并输出max 输入21731249输出max 12 5 Example4 1 includeintmain intarray 20 intN 10 cout array i intbig array 0 for intj 0 jbig big array j cout max big endl return0 6 二维数组 定义格式 例如 三个学生的四门课程成绩数据如下 858793888690958978918295利用二维数组存放这些数据更能表现数据之间相互联系的特征 每一行数据表示该学生的各门课程的成绩 而每一列数据表示该门课程各学生的成绩 该数组定义为 intmatrix 3 4 intstudent 100 8 7 数组按行存放 存贮结构 二维数组在内存中按一维数组存放 占据一片连续的存贮单元 是 按行顺序 在内存中分配存贮单元 intM 3 4 二维数组的使用 doubleA M N A i j 4 cout A i j 8 二维数组初始化 1 按照二维数组元素的物理存储次序给所有或部分数组元素提供数据值intscore 3 4 85 87 93 88 86 90 95 89 78 91 82 95 给数组stu score每个元素都提供初值floatmatrix 2 3 1 0 3 0 仅为数组matrix的前 个元素提供初值2 以行结构方式提供各数据值intscore 3 4 85 87 93 88 86 90 95 89 78 91 82 95 9 例4 2将矩阵M置成单位阵 includeusingnamespacestd intmain intM 5 5 inti j 初始化数组for i 0 i 5 i for j 0 j 5 j M i j 0 M i i 1 输出整个数组元素for i 0 i 5 i for j 0 j 5 j cout M i j t cout endl return0 10 用一维数组存放二维矩阵 111213142122232461626364intA 3 4 N 3 M 4 intB N M A i j B i M j 11 三维数组intA 4 4 5 12 数组不能整体输入也不能整体输出通常使用循环 13 4 2字符型数组和字符串处理库函数 字符串 由N个字符组成的序列 N 0 字符串常量 由双引号括起来的字符序列 Hello C 12 34 56 78 Iamsimple 字符串结束标志符 0 0C 规定 字符串常量存储时 在内存占用的实际存储字节数比字符串的长度值多一个字节 用于存放ASCII码为0的字符 即 0 该字符作为字符串的结束标志符 H e l l o 0 14 字符串长度 指字符串中包含字符的个数字符串常量 C 长度为1字符串常量 x d y d n 长度为10注意 n 转义字符 只能算作一个字符 strlen x d y d n 字符数组字符类型的组 定义格式 char 如 charstr 100 存放字符串 charname1 41 zhangwei 15 字符型数组的定义和初始化 charname 20 charstr 6 H E L L O 0 charstr 6 HELLO charstr 6 HELLO charstr HELLO charweekday 7 MONDAY charweekday 7 MONDAY 16 字符型数组的输入和输出 字符串的整体输入与输出charname 20 cin name cin getline name n 第一个是字符数组变量 第二个指定向这个变量 中读入几个字符cout name name zhangtong charstr 6 H E L L O 0 注意 第2行最后一个元素 0 的作用 17 字符串的 赋值 includeusingnamespacestd voidmystrcpy chars1 chars2 voidmain void inti 0 chars1 100 s2 Droughtparalyzespowersupply s3 100 i 0 cout s1 s1 endl while s2 i 0 s1 i s2 i i s1 i 0 cout s1 s1 endl cout s3 s3 endl mystrcpy s3 s2 cout s3 s3 endl 18 字符串的 赋值 函数 voidmystrcpy chars1 chars2 inti 0 while s2 i 0 s1 i s2 i i s1 i 0 19 二维字符串数组 用二维字符数组表示charweekday 7 20 Sunday Monday Tuesday Wednesday Thursday Friday Saturday cout weekday 5 可以吗 有一组字符串SundayMondayTuesdayWednesdayThursdayFridaySaturday 20 字符串输入输出举例 includeintmain charname1 20 name2 20 cout name2 cout Usingfunctionget thenamestoringinthevariableis name1 endl cout Usingoperater thenamestoringinthevariableis name2 endl return0 输入Pleaseinputanamewithblank within19characters CongZhenPleaseinputthenameagainCongZhen 输出 21 字符串输入输出举例 输入和输出Pleaseinputanamewithblank within19characters CongZhenPleaseinputthenameagainCongZhen Usingfunctionget thenamestoringinthevariableis CongZhenUsingoperater thenamestoringinthevariableis Cong 22 4 2 3字符串处理库函数 C 提供一组用于处理字符串的库函数需要添加头文件 includestpcpy 字符串拷贝 strcat 字符串连接 strchr 在字符串中查找字符 strcmp 字符串比较 strlen 求字符串长度 strlwr 将字符串中的大写字母转换为小写字母 strrev 反转字符串 strstr 在字符串中查找另一个字符串 strupr 将字符串中的小写字母转换为大写字母 使用方法可以通过MSDN获得 23 常用字符串操作函数的用法 求字符串的长度intstrlen char s chars 50 tsunami intlen strlen str len strlen 20090317 复制字符串strcpy char destin char source charweekday 20 strcpy weekday Tuesday coutB 1 A B 1 A B 0大小写转换 24 例4 3编写函数求字符串的长度 编写求字符串长度的函数mystrlen 算法分析 1 设一个计数器变量len 0 初始下标i 02 从数组第一个元素s i 开始进行处理3 若当前的元素值s i 非空 0 则len i 继续执行3 否则 退出循环 4 打印结果len 25 程序逻辑功能框图 len 0str n i 0 len len 1i 打印结果len str i 0 是 否 26 Example4 3 求字符串的长度 includeusingnamespacestd 计算字符串的长度的函数 函数定义 intmystrlen charstring intlen 0 i 0 while string i 0 len len 1 i returnlen includeusingnamespacestd 计算字符串的长度的函数intmystrlen charstring intlen 0 while string len 0 len len 1 returnlen 27 数组作参数 1 一维数组作参数 可以不写名元素的个数intmymax doublea intN 2 二维数组作参数 仅可省略第1维的长度intset empty doublea 10 intM 28 测试计算字符串长度的主函数 intmain charstring 100 intlen 0 cout string cout Thelengthofthestringis mystrlen string endl return0 输入china输出Thelengthofthestringis 5 29 4 3C 的string类 字符数组操作的缺点不能整体赋值不能使用 比较运算符容易越界C 提供string类包含头文件 include声明格式 string strings1 s2 s3 world 声明时同时初始化 30 C 的string类的运算 31 例4 4string类的运算符操作 输入与输出结果 AlphaAlphaAlphaBetaAlphatoOmegastr3 str1ThisisaNULL terminatedstring ThisisaNULL terminatedstring Enterastring Hello stringHello string 32 程序设计举例 例4 5计算两个矩阵之和例4 6对整型数组进行排序的程序 排序方法使用简单的交换排序法 例4 7计算50 例4 8将一个字符串之中的所有小写字母转换为相应的大写字母例4 9字符串连接 33 例4 5计算矩阵的和 A 123456789101112 B 147102581136912 A B 1 12 43 74 105 26 57 88 119 310 611 912 12 C 34 例4 5计算矩阵的和 算法 1 输入两个M N的矩阵A B 2 fori 0 i M i forj 0 j N j cij aij bij 3 输出矩阵C 35 矩阵加法算法一 使用二维矩阵 doublea M N 1 2 3 4 5 6 7 8 9 10 11 12 doubleb M N 1 4 7 10 2 5 8 11 3 6 9 12 doublec M N 结果矩阵 36 矩阵加法算法二 使用一维矩阵 constintM 3 constintN 4 定义三个一维数组 其元素数与矩阵元素数相同doublea M N 1 2 3 4 5 6 7 8 9 10 11 12 doubleb M N 1 4 7 10 2 5 8 11 3 6 9 12 doublec M N 结果矩阵 A 12 A M N A 3 4 A M N A 0 A 0 4 0 A 0 0 A 1 A 0 4 1 A 0 1 A 5 A 1 4 1 A 1 1 A i N j A i j 37 数组按行存放 0 0 4 01 0 4 14 1 4 05 1 4 18 2 4 09 2 4 1M行 N列 M N矩阵L i N ji 0 M 1 j 0 N 1 A 38 p83 求和的循环中 c i N j a i N j b i N j 相当于c i j a i j b i j N 每行的列数 39 扩展 矩阵乘法算法 算法 设矩阵AM K BK N 它们的乘积为CM N对i 0 M 1 重复 j从0 到N 1重复计算 40 A 3 4 123456789101112 C 3 2 4612182030 A 4 2 11011100 41 矩阵乘法 C M N A M K B K N Zhao2010 3 24 includeusingnamespacestd includevoidmain void constintM 3 K 4 N 2 doubleA M K 1 2 3 4 5 6 7 8 9 10 11 12 doubleB K N 1 1 0 1 1 1 0 0 doubleC M N inti j k for i 0 i M i for j 0 j N j C i N j 0 0 for k 0 k K k C i N j C i N j A i K k B k N j 42 输出部分 for i 0 i M i for j 0 j N j cout C i N j t cout endl 43 例4 6 冒泡排序算法分析 结果从小到大 0 输入数组A M N M 1 N 1 时转 4 否则比较相邻元素A I 和A I 1 I 1 2 N 1 如果A I A I 1 则交换它们的位置A I A I 1 2 对剩下的N 1个元素 再两两进行比较 按同样规则交换它们的位置 经过N 2次比较 将次最大值交换到A N 1 的位置 3 N N 1 转 1 4 输出数组A 44 冒泡排序1 includeusingnamespacestd defineN5intmain doublea N 12 56 3 17 9 doubletmp inti j M M N 1 45 冒泡排序1 for j 1 ja i 1 tmp a i a i a i 1 a i 1 tmp 46 冒泡排序1 for i 0 i N i cout a i t cout endl return0 47 Example4 6 冒泡排序2 intmain constintCOUNT 16 intlist COUNT 503 87 512 61 908 170 897 275 653 426 154 509 612 677 765 703 for inti 0 ii j j 1 if list j 1 list j inttmp list j 1 list j 1 list j list j tmp cout Theresultis endl for intk 0 k 16 k cout list k cout endl return0 48 例4 7计算50 9 sc 进位sum 和 去掉输出结果前面的0 A A 49 例4 8编写一个字符串处理程序将小写字母转换为大写字母 算法分析 将大写字符转换为小写 用到转换公式 str i str i A a 将小写字符转换为大写 用下列公式 str i str i a A 输入与输出 Theoriginalstringis ThisisasampleAftertransform THISISASAMPLE 50 4 8 将小写字母转换为大写字母 intmain charstr Thisisasample cout a 51 例4 9字符串连接 intmain chardestination 81 abcdefghijklmnopqrstuvwxyz charsource ABCDEFGHIJKLMNOPQRSTUVWXYZ inti strlen destination 不使用该函数如何 intj 0 while source j 0 destination i source j destination i 0 cout Theresultis destination endl return0 52 不使用strlen 的程序 includeusingnamespacestd intmain chardestination 81 abcdefghijklmnopqrstuvwxyz charsource ABCDEFGHIJKLMNOPQRSTU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论