《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章数组 前面所讲的分散的变量对处理大量的有组织的数据 如 多个学生多门课的成绩处理 就显得无能为力 需要一种有组织的变量的集合来处理这类问题 这个集合需要用一个统一的名称来命名 而集合中的每一个元素需要用序号来唯一地确定 并且集合中的每一个元素都属于同一种数据类型 这种变量的集合就是数组 数组类型是构造类型数据的一种 构造类型数据是由一些基本类型数据按照一定的规则组成 第4章数组 数组的基本概念 所谓数组 是若干个相同类型数据元素的有序集合 所起的名字称为数组名 例如 intjsj 30 用对应的序号来区分这个集合中的一个个元素 序号称为数组元素的下标 例如 sjs 0 jsj 1 jsj 2 jsj 29 用一个下标来区分其元素的数组 称为一维数组 用两个或多个下标来区分其元素的数组 称为二维数组 例如 a 2 3 或多维数组 例如 a 2 3 3 4 1一维数组 本节内容 4 1 2一维数组的初始化 4 1 3一维数组元素的引用 4 1 4一维数组的应用举例 4 1 1一维数组的定义 4 1一维数组 只有一个下标的数组叫做一维数组 例如 sum 3 数组是一组变量 这组变量具有相同的名字 相同的数据类型 并且在存储器中连续存放 例如 数组sum 3 中包含sum 0 sum 1 sum 2 每一个变量称为数组的一个 数组单元 保存在其中的数据值称为 数组元素 用 下标变量 来标识 区分数组中的各数组元素 4 1 1一维数组的定义 一维数组的定义方式为 类型说明符数组名 常量表达式 例如 inta 6 如图 编译时分配连续内存单元 4 1 1一维数组的定义 注意事项 inta 10 数组名的命名遵循标识符命名规则 类型说明符说明该数组中数组元素的数据类型 数组名后是用方括号括起来的常量表达式 方括号中的常量表达式表示数组中元素的个数 C语言规定数组元素的下标从0开始 因此在数组a中的10个元素 分别为a 0 a 9 不存在a 10 定义数组时 方括号中的常量表达式可以是常量或者符号常量 但不能包含变量 例如 inta x 是不可以的 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 在定义数组时给数组全部元素赋值为0 inta 10 0 为全部数组元素赋初值时 可不指定数组长度 inta 0 1 2 3 4 4 1 3一维数组元素的引用 数组元素引用的一般形式为 数组名 下标 引用数组元素的几点说明 下标可以是整型常量或整型表达式 可以是变量 a 0 a x a 2 a 3 a 5 2 x为整型且有值 C语言中数组元素的下标从0开始 并且数组元素的下标一定要小于数组的长度 只能逐个引用数组元素 而不能一次引用整个数组 只能 printf d a 0 不能 printf d a 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 从键盘输入10个同学的计算机基础课成绩 整型 输出最高成绩和最低成绩 例4 2 一个歌唱比赛 共有10名评委 他们分别给一位歌手打分 分数采用百分制 选手最后的得分是用这样的方法计算出来的 从10名评委的评分中扣除一个最高分 扣除一个最低分 然后统计其总分 并除以8 最后得到这个歌手的最后得分 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一维数组的应用举例 例4 3 利用数组计算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 2二维数组 本节内容 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为2行3列的整型数组 即数组元素为 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 下标可以是整型常量或整型表达式 定义时 a 3 4 中的3和4各维的大小 引用时 a 2 3 中的2和3是下标值 如果定义数组 inta 3 4 那么引用a 3 4 是错误的 因为数组的下标是从0开始 数组a的下标1的范围是0 2 下标2的范围是0 3 数组中不存在a 3 4 这个元素 4 2 3二维数组元素的引用 例4 5 输入一个3 3的矩阵 求该矩阵的转置矩阵 行列互换 并输出这两个矩阵 例如矩阵A的转置矩阵为矩阵B 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 6 输出一个字符数组 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 7 输出一个菱形图 4 3 5字符数组的应用举例 可以用printf 函数和scanf 函数一次性输入输出一个字符串 而不必使用循环语句逐个地输入输出每个字符 例4 9 从键盘输入字符串 program 然后将其输出 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 10 多种方式为字符串赋值 4 3 5字符数组的应用举例 4 3 6常用字符串处理函数 C语言标准库提供了丰富的字符串处理的函数 大致可分为字符串基本处理函数和字符串与数值数据的转换函数两类 字符串基本处理函数包含在头文件string h中 字符串与数值数据的转换函数包含在头文件stdlib h中 使用这类函数可以大大减轻编程量 下面介绍几个最常用的字符串函数 4 3 6常用字符串处理函数 4 3 6 1gets 函数格式 char gets char string 功能 从键盘中输入一个字符串放入参数指定的数组中 其函数值是字符数组的起始地址 通常我们不关心函数值 只利用它的输入功能 所以 其格式可以写成如下形式 gets 字符数组 4 3 6常用字符串处理函数 4 3 6 2puts 函数格式 int char string 功能 输出以空字符 0 终结的字符串到标准输出设备 显示器 函数取值是字符串长度 通常我们不关心函数值 只利用它的输出功能 所以 其格式可以写成如下形式 puts 字符数组 4 3 6常用字符串处理函数 includeintmain void charstring 80 printf Inputastring gets string printf Thestringinputwas puts string return0 例4 11 分析下列程序的结果 注意字符串输入输出函数的用法 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 12 分析下列程序的输出结果 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 13 分析下列程序的输出结果 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 14 分析下列程序的输出结果 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 15 分析下列程序的输出结果 4 3 7综合应用举例 defineN100 includemain chari len charstring N c printf pleaseinputastring n gets string printf pleaseinputachar n scanf c 例4 16 在一个字符串中查找指定字符 并输出该字符在字符串中第一次出现的位置 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 17 为了保证计算机系统的安全 往往要在计算机上设置口令 密码 以杜绝非法用户使用 以下给出一个用C语言编制的密码程序 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 18 从键盘输入十个数字 然后找出其中最大和最小的数值并输出 4 4 2数组元素的排序 所谓排序 sorting 就是把数组中的元素按其值递增或递减的次序排列 排序算法 冒泡排序法 选择排序法 4 4 2数组元素的排序 4 4 2 1冒泡排序法1 第一趟冒泡排序 比较第1个数与第2个数 若为逆序a 0 a 1 则交换 然后比较第2个数与第3个数 依次类

温馨提示

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

评论

0/150

提交评论