《c语言程序设计基础》4数组.ppt_第1页
《c语言程序设计基础》4数组.ppt_第2页
《c语言程序设计基础》4数组.ppt_第3页
《c语言程序设计基础》4数组.ppt_第4页
《c语言程序设计基础》4数组.ppt_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

第4章数组和字符串 第4章数组 4 1一维数组 4 2二维数组 4 3字符数组 4 4数组元素的查找和排序 本章内容 第4章数组 构造类型数据是由一些基本类型数据按照一定的规则组成 数组类型是构造类型数据的一种 数组是有序数据的集合 数组中的每一个元素都属于同一个数据类型 用一个统一的数组名和下标来唯一地确定数组中的元素 例如 intsum 3 说明一个整型数组 数组名称sum 共有3个int型变量元素 sum 0 sum 1 sum 2 注意 数组名代表该数组在内存中的首地址 第4章数组 数组的基本概念 所谓数组 是若干个相同类型数据元素的有序集合 所起的名字称为数组名 用对应的序号来区分这个集合中的一个个元素 序号称为数组元素的下标用一个下标来区分其元素的数组 称为一维数组 用两个或多个下标来区分其元素的数组 称为二维数组或多维数组 4 1一维数组 本节内容 4 1 2一维数组的初始化 4 1 3一维数组元素的引用 4 1 4一维数组的应用举例 4 1 1一维数组的定义 4 1一维数组 只有一个下标变量的数组叫做一维数组 数组是一组变量 这组变量具有相同的名字 相同的数据类型 并且在存储器中连续存放 每一个变量称为数组的一个 数组单元 保存在其中的数据值称为 数组元素 用 下标变量 来标识 区分数组中的各数组元素 数组按下标个数分类有一维 二维 三维数组等 一维数组的数组名后只有一对方括号 而二维数组的数组名后面有两对方括号 4 1 1一维数组的定义 一维数组的定义方式为 类型说明符数组名 常量表达式 例如 inta 6 如图 编译时分配连续内存单元 注意事项 数组名的命名遵循标识符命名规则 类型说明符说明该数组中数组元素的数据类型 数组名后是用方括号括起来的常量表达式 方括号中的常量表达式表示数组中元素的个数 C语言规定数组元素的下标从0开始 因此在inta 10 中的10个元素 分别为a 0 a 9 不能使用a 10 方括号中的常量表达式可以是常量或者符号常量 但不能包含变量 4 1 2一维数组的初始化 数组的初始化即为数组元素赋初始值 用赋值语句为数组元素赋初值 例如 inta 10 a 0 0 a 1 1 a 2 2 在定义数组时对数组全部元素赋初值 例如 inta 10 0 1 2 3 4 5 6 7 8 9 在定义数组时对数组中一部分元素赋值 例如 inta 10 0 1 2 3 4 在定义数组时给数组全部元素赋值为0 为全部数组元素赋初值时 可以不指定数组长度 例如 inta 0 1 2 3 4 4 1 3一维数组元素的引用 数组元素引用的一般形式为 数组名 下标 引用数组元素的几点说明 下标可以是整型常量或整型表达式 例如 a 0 a 1 a 2 a 3 a 5 2 C语言中数组元素的下标从0开始 并且数组元素的下标一定要小于数组的长度 C语言规定只能逐个引用数组元素 而不能一次引用整个数组 C语言规定 数组名就是分配给该数组存储区的首地址 即数组第一个元素存放的地址 4 1 3一维数组元素的引用 inta 10 inti max min printf Pleaseinput for i 0 imax max a i elseif a i min min a i printf max d min d max min 4 1 4一维数组的应用举例 includemain intscore 10 10个评委的评分floatmark 记录最后得分inti intmax 1 最高分intmin 101 最低分intsum 0 10个评委评分的总和for i 0 i 10 i 输入10个分数 printf PleaseEntertheScoreofNo d i 1 scanf d 4 1 4一维数组的应用举例 for i 0 imax max score i for i 0 i 10 i 遍历数组 找最低分 if score i min min score i mark sum max min 8 0 求平均printf Themarkofthissingeris 4 2f n mark 4 1 4一维数组的应用举例 4 1 4一维数组的应用举例 利用数组计算Fibonacci数列的前10个数 并按每行打印5个数的格式输出 其中 Fibonacci数列计算公式如下 F1 1 F2 1 F3 F1 F2 Fn Fn 2 Fn 1 includevoidmain inti intf 10 1 1 用数组存储Fibonacci数列 并赋初值 f 0 1 f 1 1 f 2 f 3 f 9 0for i 2 i 10 i 为f 2 f 9 按计算公式重新赋值f i f i 2 f i 1 4 1 4一维数组的应用举例 for i 0 i 10 i 输出10个Fibonacci数 printf d t f i if i 1 5 0 i 1为当前输出的Fibonacci数的序号printf n 每输出五个数换行 4 1二维数组 本节内容 4 2 2二维数组的初始化 4 2 3二维数组元素的引用 4 2 4二维数组的应用举例 4 2 1二维数组的定义 4 2 1二维数组的定义 二维数组定义的一般形式为 类型说明符数组名 常量表达式1 常量表达式2 例如 inta 2 3 注意 不能写成 inta 2 3 定义了数组a 数组a为3行4列的整型数组 即数组元素为 a 0 0 a 0 1 a 0 2 a 1 0 a 1 1 a 1 2 4 2 1二维数组的定义 二维数组可以看作是由一维数组嵌套构成的 我们可以把二维数组看作是一种特殊的一维数组 它的元素又是一个一维数组 例如 可以把数组a看作一个一维数组 它有三个元素 a 0 a 1 每一个元素又是一个包含3个元素的一维数组 4 2 2二维数组的初始化 按行分段整体初始化 inta 3 4 1 4 6 6 4 6 7 1 8 4 1 0 按行连续整体初始化 inta 3 4 1 4 6 6 4 6 7 1 8 4 1 0 按行分段部分初始化 inta 3 4 5 7 1 8 5 2 5 6 按行连续部分初始化 inta 3 4 2 5 8 6 2 4 7 2 1 如果提供全部的初始值 在定义时可不指明第一维的长度 int 4 4 5 0 1 3 5 7 6 1 0 2 3 4 2 3二维数组元素的引用 维数组元素的表示形式为 数组名 下标1 下标2 下标可以是整型常量或整型表达式 要严格区分定义数组时的inta 3 4 和引用元素时的a 3 4 定义时 a 3 4 用来定义数组的维数和各维的大小 引用时 a 3 4 中的3和4是下标值 显然引用数组a中第4行第5列位置上的的元素a 3 4 是错误的 因为二维数组的下标和一维数组一样都是从0开始 即数组a的下标1的范围是0 2 下标2的范围是0 3 4 2 4二维数组的应用举例 include defineN3main inti j n inta N N b N N printf pleaseinput n for i 0 i N 1 i 循环输入for j 0 j N 1 j printf a d d i j scanf d 4 2 4二维数组的应用举例 for i 0 i N 1 i 输出两个矩阵 for j 0 j N 1 j 输出数组a的第i 1行 printf 2d a i j printf t 矩阵的间隔for j 0 j N 1 j 出数组b的第i 1行 printf 2d b i j printf n 4 2 4二维数组的应用举例 4 3字符数组 本节内容 4 3 2字符串与字符数组 4 3 3字符数组的初始化 4 3 4字符数组的引用 4 3 1字符数组的定义 4 3字符数组 本节内容 4 3 6常用字符串处理函数 4 3 7综合应用举例 4 3 5字符数组的应用举例 4 3 1字符数组的定义 用来存放字符数据的数组是字符数组 字符数组中的一个数组元素存放一个字符 字符数组的定义一般形式如下 char数组名 常量表达式 例如 charc 10 定义了一个一维字符数组c 它的长度为10 可以存放10个字符或一个长度不大于9的字符串 又如 charc 3 5 定义了一个二维字符数组c 它可以存放15个字符或3个长度不大于4的字符串 4 3 2字符串与字符数组 C语言中有字符串常量 却没有字符串变量 通常用字符数组来存放字符串 字符串是以 0 作为结束符的字符序列 当一个字符串存入字符数组时 C编译系统会自动将结束符 0 存入数组 以此作为该字符串结束的标志 这要比用字符逐个的给字符数组赋值多占一个字节来存放字符串结束标志 0 如 charc 8 LiChen 4 3 2字符串与字符数组 采用 0 标志作为字符串的结束标志后 在用字符串赋初值时无需指定数组的长度 可以由编译系统自动处理 如 charc LiChen 在内存中占8个字节 分别存储 L i C h e n 和 0 字符串常量 LiChen 代表字符串所在内存的首地址 而不是字符串序列本身 所以只能在定义数组时用字符串常量初始化 不能给已经定义好的数组赋字符串常量 如不能 charc 10 C 10 LiChen 4 3 3字符数组的初始化 对字符数组初始化 最容易理解的方式是用字符常量初始化字符数组 如 charc1 10 I a m h a p p y 用字符串常量初始化字符数组 如 charc4 Iamhappy charc5 11 Iamhappy 总之 对字符数组赋值可以有以下几种形式 charc6 8 LiChen charc7 LiChen charc8 L i C h e n 4 3 3字符数组的初始化 区分 0 与 0 4 3 3字符数组的初始化 区分 A 与 A A A 1 占1个字节 2 是数值 3 格式符 c 4 赋值方式 charch ch A 或charch A 1 占2个字节 2 是地址 3 格式符 s 4 赋值方式 chars 2 strcpy s A 或chars 2 A 4 3 4字符数组的引用 字符数组的引用和前边介绍过的数组的引用是一样的 只不过引用字符数组中的一个元素 我们得到的是一个字符 charc LiChen charf c 3 f的内容为 C 4 3 5字符数组的应用举例 includemain charc 10 I a m a b o y inti for i 0 i 10 i printf c c i printf n 4 3 5字符数组的应用举例 includemain chardiamond 5 inti j for i 0 i 5 i for j 0 j 5 j printf c diamond i j printf n 4 3 5字符数组的应用举例 可以用printf 函数和scanf 函数一次性输入输出一个字符串 而不必使用循环语句逐个地输入输出每个字符 includemain charc 10 scanf s c printf s n c 4 3 5字符数组的应用举例 includemain charnum 4 name 20 sex male inti printf PleaseinputNum for i 0 i 4 i scanf c 4 3 5字符数组的应用举例 4 3 6常用字符串处理函数 C语言标准库提供了丰富的字符串处理的函数 大致可分为字符串基本处理函数和字符串与数值数据的转换函数两类 字符串基本处理函数包含在头文件string h中 字符串与数值数据的转换函数包含在头文件stdlib h中 使用这类函数可以大大减轻编程量 下面介绍几个最常用的字符串函数 4 3 6常用字符串处理函数 4 3 6 1gets 函数格式 char gets char string 功能 从标准输入流中取一个字符串 4 3 6 2puts 函数格式 intputs char string 功能 拷贝以空字符 0 终结的字符串到标准输出流 4 3 6常用字符串处理函数 includeintmain void charstring 80 printf Inputastring gets string printf Thestringinputwas puts string return0 4 3 6常用字符串处理函数 如果用scanf函数输入字符串时 空白符用于分隔字符串 所以输入的字符串中不能包含空格 如果用gets函数输入字符串 当输入的字符串中含有空格时 空格是字符串中的有效字符 输出中包含空格 表示gets函数并不以空格作为字符串输入结束的标志 而只以回车作为输入结束 并把回车转换为 0 建议用gets函数输入字符串 4 3 6常用字符串处理函数 gets 函数和scanf 函数的区别 4 3 6常用字符串处理函数 4 3 6 3strcat 函数格式 strcat 字符数组名1 字符数组名2 功能 字符串连接函数 把字符数组2中的字符串连接到字符数组1中字符串的后面 并删去字符串1后的串标志 0 要注意的是 字符数组1应定义足够的长度 否则不能全部装入被连接的字符串 本函数返回值是字符数组1的首地址 4 3 6常用字符串处理函数 include include string h main staticcharst1 30 Mynameis charst2 10 printf inputyourname n gets st2 strcat st1 st2 puts st1 4 3 6常用字符串处理函数 4 3 6 4strcpy 函数格式 strcpy 字符数组名1 字符数组名2 功能 把字符数组2中的字符串拷贝到字符数组1中 串结束标志 0 也一同拷贝 字符数组名2 也可以是一个字符串常量 这时相当于把一个字符串赋给一个字符数组 前面讲过 字符串常量是个地址 不能直接赋给一个字符数组 要给一个字符数组赋一个字符串常量只能用strcpy 函数 4 3 6常用字符串处理函数 include include string h main staticcharst1 15 st2 CLanguage strcpy st1 st2 或 strcpy st1 CLanguage puts st1 printf n 4 3 6常用字符串处理函数 4 3 6 5strcmp 函数格式 strcmp 字符数组名1 字符数组名2 功能 字符串比较函数 按照ASCII码逐位比较两个数组中字符串的对应位 并由函数返回值返回比较结果 字符串1 字符串2 返回值 0 字符串1 字符串2 返回值 0 字符串1 字符串2 返回值 0 本函数也可用于比较两个字符串常量 或比较数组和字符串常量 4 3 6常用字符串处理函数 include include string h main intk staticcharst1 15 st2 CLanguage printf inputastring n gets st1 k strcmp st1 st2 if k 0 printf st1 st2 n if k 0 printf st1 st2 n if k 0 printf st1 st2 n 4 3 6常用字符串处理函数 4 3 6 6strlen 函数格式 strlen 字符数组名 功能 测字符串长度函数 测字符串的实际长度 不含字符串结束标志 0 并作为函数返回值 4 3 6常用字符串处理函数 include include string h main intk staticcharst Clanguage k strlen st printf Thelenthofthestringis d n k 4 3 7综合应用举例 defineN100 includemain chari len charstring N c printf pleaseinputastring n gets string printf pleaseinputachar n scanf c 4 3 7综合应用举例 for i 0 string i 0 i 在字符串中查找变量c中所存字符if string i c break 若找到 则退出循环if i 1 len printf found d n i 1 i从0开始若找到则字符的位置应为i 1elseprintf notfound n 4 3 7综合应用举例 include includemain charpassword tcass charp 80 inttime 0 do printf Enterpassword gets p if strcmp p password 0 printf OK welcome n break elsetime while time 3 4 3 7综合应用举例 if time 3 printf Youareillegaluser n 4 4数组元素的查找和排序 本节内容 4 4 2数组元素的排序 4 4 1字符元素的查找 4 4 1字符元素的查找 includevoidmain inta 10 inti max min printf Pleaseinput for i 0 imax max a i 若a i max 则修改max的值elseif a i min min a i 若a i min 则修改min的值printf max d min d max min 4 4 2数组元素的排序 所谓排序 sorting 就是把数组中的元素按其值递增或递减的次序排列 排序算法 冒泡排序法 选择排序法 4 4 2数组元素的排序 4 4 2 1冒泡排序法1 第一趟冒泡排序 比较第1个数与第2个数 若为逆序a 0 a 1 则交换 然后比较第2个数与第3个数 依次类推 直至第n 1个数和第n个数比较为止 结果最大的数被安置在最后一个元素位置上 2 第二趟冒泡排序 对前n 1个数进行冒泡排序 结果使次大的数被安置在第n 1个元素位置 3 重复上述过程 经过n 1趟冒泡排序后结束 4 在第j趟比较中 要进行n j次两两比较 4 4 2数组元素的排序 4 4 2数组元素的排序 38 49 76 97 13 97 27 97 30 97 13 76 76 76 27 30 13 65 27 65 30 65 13 13 49 49 30 49 27 38 27 38 30 38 每趟结束时 不仅能挤出一个最大值到最后面位置 还能同时部分理顺其它元素 数组元素的排序和查找 例4 13 将10个整数按照从小到大的顺序排序 include defineNUM10voidmain inta NUM i j temp printf input dnumbers n NUM for i 0 ia j 1 交换a j 和a j 1 temp a j a j a j 1 a j 1 temp printf thesortednumbers n for i 0 i NUM i

温馨提示

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

评论

0/150

提交评论