c语言程序设计数组.ppt

上传人:max****ui 文档编号:6333732 上传时间:2020-02-23 格式:PPT 页数:66 大小:251.05KB
返回 下载 相关 举报
c语言程序设计数组.ppt_第1页
第1页 / 共66页
c语言程序设计数组.ppt_第2页
第2页 / 共66页
c语言程序设计数组.ppt_第3页
第3页 / 共66页
点击查看更多>>
资源描述
为了解决比较复杂的问题 本章介绍C语言提供的一种最简单的构造类型 数组 main inta0 a1 a2 a3 a4 scanf d d d d d 思考 若是要求输入100个人的年纪 程序又该如何编写 通常 处理大批同类型的数据时 我们不再使用变量 而是采用新的数据类型 数组 第5章数组 5 11维数组的定义和引用5 22维数组的定义和引用5 3字符数组与字符串 数组是一组同类型的数据的集合 前面所学的整型 实型 字符型数据 称为基本类型数据 5 11维数组的定义和引用 5 1 11维数组的定义5 1 21维数组元素的引用5 1 31维数组元素的初始化5 1 41维数组应用举例 数组同变量一样 也必须先定义 后使用 1维数组是只有1个下标的数组 定义形式如下 数据类型数组名 常量表达式 数组名2 常量表达式2 例 inta 5 表示一个整型数组a 该数组有5个数组元素 a 0 a 1 a 2 a 3 a 4 他们的数据类型为整型 1 数据类型 是指数组元素的数据类型 2 数组名 与变量名一样 必须遵循标识符命名规则 3 常量表达式 必须用方括号括起来 指的是数组的元素个数 又称数组长度 它是一个整型值 其中可以包含常数和符号常量 但不能包含变量 例 inta 5 4 C语言中不允许动态定义数组 即常量表达式中不能包括变量 例 inti scanf d 常量表达式中可以包括符号常量 例 defineN5inta N 是允许的 5 数据类型相同的数组 变量可以用一个类型表示符同时说明 数组和变量间用逗号分隔 例 inta 5 b 10 i j charc 6 d 3 6 C1 6 常量表达式表示元素的个数 即数组长度 例 a 5 中5表示a数组有5个元素 下标从0开始 该数组有5个数组元素 a 0 a 1 a 2 a 3 a 4 注意不能使用数组元素a 5 特别说明 在数组定义时 常量表达式 外的方括号 以及元素引用时 下标表达式 外的方括号 都是C语言语法规则所要求的 不是本书所约定的可选项的描述符号 4 数组元素的下标 是元素相对于数组起始地址的偏移量 所以从0开始顺序编号 5 数组名中存放的是一个地址常量 它代表整个数组的首地址 同一数组中的所有元素 按其下标的顺序占用一段连续的存储单元 5 1 2数组元素的引用 c规定只能引用数组元素而不能一次引用整个数组 引用数组中的任意一个元素的形式 数组名 下标表达式 1 下标表达式 可以是任何整型常量或整型表达式 例 a 0 a 5 a 7 a 2 3 特别强调 在运行C语言程序过程中 系统并不自动检验数组元素的下标是否越界 因此在编写程序时 保证数组下标不越界是十分重要的 2 1个数组元素 实质上就是1个变量 它具有和相同类型单个变量一样的属性 可以对它进行赋值和参与各种运算 3 当数组的长度为N时 下标的取值范围为0 1 2 N 2 N 1 例 main inti a 10 for i 0 i 0 i printf d a i 运行结果 9876543210说明 先使a 0 到a 9 的值分别为0 9 然后逆序输出 6 1 31维数组元素的初始化 数组的初始化就是在定义数组时给数组元素赋值 初始化格式 数据类型数组名 常量表达式 初值表 初始化可以有以下方法实现 1 给全部数组元素赋值 例 inta 5 8 10 1 1 2 数据是依次包括在 中 数据中间用逗号间隔 初始化结果为 a 0 a 1 a 2 a 3 a 4 810112给全部数组元素赋值时 可不制定数组长度 例 inta 8 10 1 1 2 2 给部分数组元素赋值例 inta 5 8 10 1 初始化结果为 a 0 a 1 a 2 a 3 a 4 810100对部分数组元素赋值时 由于数组长度与提供的初值不相等 所以数组长度不能省略 若inta 8 10 1 编译时系统会认为a数组的长度为3而不是5 如果要使一个数组中全部元素为0 可以写成 inta 5 0 0 0 0 0 或inta 5 0 注意 如果对int型数组不赋初值 不要错误的以为每个数组元素的值都自动为0 而是为随机值 但若在定义数组时 前面加static保留字 为静态数值 则数组元素被系统自动置初值0 注意 不能先定义 后赋值 必须定义 赋值同步 6 1 41维数组应用举例 案例 定义长度都为10的整型数组a和b 完成以下各功能 1 从键盘上任意输入10个整数 分别存放到a数组的10个数组元素中 2 求出a数组中各相邻两个元素的和 并将这些和存在b数组中 3 按每行3个元素的形式输出b数组各元素的值 defineN10main inta N b N i for i 0 i N i scanf d 运行时输入14782563910 结果如下 11151071191219注意 第1个for循环中i 0 而第2个for循环中i 1 因为10个数各相邻两个数相加得9个数 分别存放在b数组的数组元素b 1 b 9 中 案例 从键盘上任意输入10个整数 要求按从小到大的顺序在屏幕上显示出来 排序的方法有很多 本题采用冒泡法 冒泡法的基本思想 通过相邻两个数之间的比较和交换 使数值 较小的数逐渐从底部移向顶部 数值较大的数逐渐从顶部移向底部 就像水底的气泡一样逐渐向上冒 故而得名 由A n A 1 组成的n个数据 进行冒泡排序的过程可以描述为 1 首先将相邻的A 0 与A 1 进行比较 如果A 0 的值大于A 1 的值 则交换两者的位置 使较小的上浮 较大的下沉 否则不交换 接着比较A 2 与A 3 同样使小的上浮 大的下沉 依此类推 直到比较完A n 2 和A n 1 后 A n 1 为具有大数值的元素 称第一趟排序结束 2 然后在A 0 A n 2 区间内 进行第二趟排序 使剩余元素中数值最大的元素上浮到A n 2 367294不交换367294不交换367294交换362794不交换362794交换367249 3 重复上述过程 每重复一次 就得到一个最大数沉底 重复进行n 1趟后 数组顶上是最小的元素 整个排序过程结束 功能 从键盘上任意输入n个整数 用冒泡法按从小到大地排序 并在屏幕上显示出来 include stdio h defineNUM10 定义符号常量 数据个数N main intdata NUM 定义1个1维整型数组data inti j temp 定义循环变量和临时变量 clrscr 库函数clrscr 清屏 printf Pleaseinput10numbers n for i 0 i NUM i scanf d 冒泡法排序 for i 0 ii j 内循环 进行每趟比较 if data j data j 1 如果data j 大于data j 1 交换两者的位置 temp data j data j data j 1 data j 1 temp 输出排序后的数据 printf ntheresultofsort n for i 0 i NUM i printf d data i getch 等待键盘输入任一字符 目的使程序暂停 5 22维数组的定义和引用 5 2 12维数组的定义5 2 22维数组元素的引用5 2 32维数组元素的初始化5 2 42维数组应用举例 引入2维数组和多维数组最主要的应用是处理矩阵 平面和立体点阵图形等 6 2 12维数组的定义 2维数组的定义方式如下 数据类型数组名 行常量表达式 列常量表达式 例 floatx 3 4 说明 定义x为三行四列的实型数组 共有3 4个数组元素 1 定义语句不要写成floatx 3 4 或floatx 3 4 2 通常把二维数组的第1个下标称为行标 第2个下标称为列标 二维数组的各个元素在内存中的存放顺序是按行标升序存放的 既先存放第0行的元素 在存放第一行的元素 在每行内又是按列标生训存放的 12个数组元素按行列顺序排列如下 X 0 0 X 0 1 X 0 2 X 0 3 X 1 0 X 1 1 X 1 2 X 1 3 X 2 0 X 2 1 X 2 2 X 2 3 3 设有一个m n的数组x 则第i行第j列的元素x i j 在数组中的位置为 i n j 注意 行号 列号均从0开始计数 3 可以把2维数组看作是一种特殊的1维数组 它的元素又是一个1维数组 例如 对x 3 3 可以把x看作是一个1维数组 它有3个元素 x 0 x 1 x 2 每个元素又是一个包含3个元素的1维数组 如图6 4所示 即把x 0 x 1 x 2 看作是3个1维数组的名字 顺序号x 0 0 1x 0 x 0 1 2x 0 2 3x 1 0 4xx 1 x 1 1 5x 1 2 6x 2 0 7x 2 x 2 1 8x 0 0 9 同理 不难掌握多维数组的定义和存放顺序 例 floatx 2 3 2 共有2 3 2个数组元素 存放顺序如图 顺序号x 0 0 x 0 0 0 1x 0 0 1 2x 0 x 0 1 x 0 1 0 3x 0 1 1 4x 0 2 x 0 2 0 5xx 0 2 1 6x 1 0 x 1 0 0 7x 1 0 1 8x 1 x 1 1 x 1 1 0 9x 1 1 1 10 x 1 2 x 1 2 0 11x 1 2 1 12 案例 给一个2 3的2维数组各元素赋值 并输出全部元素的值 功能 从键盘上给2 3数组赋值 并在屏幕上显示出来 defineRow2 defineCol3 include stdio h main inti j array Row Col 定义1个2行3列的2维数组array for i 0 i Row i 外循环 控制2维数组的行 for j 0 j Col j 内循环 控制2维数组的列 printf pleaseinputarray 2d 2d i j scanf d i for j 0 j Col j printf d t array i j 将a i j 的值显示在屏幕上 printf n getch 6 2 22维数组元素的引用 二维数组也必须先定义 后使用 引用2维数组元素的形式为 数组名 行下标表达式 列下标表达式 1 行下标表达式 和 列下标表达式 都应是整型表达式或整型常量 例 x 2 1 y 1 3 X 5 3 4 2 7 2 行下标表达式 和 列下标表达式 的值 都应在已定义数组大小的范围内 一个M列N行的二维数组 行下标和列下标的上限值为M 1和N 1 假设有数组x 3 4 则可用的行下标范围为0 2 列下标范围为0 3 引用x 0 4 x 3 1 都是错误的 3 对基本数据类型的变量所能进行的操作 也都适合于相同数据类型的2维数组元素 4 多维数组同理 6 2 32维数组元素的初始化 1 按行赋初值数据类型数组名 行常量表达式 列常量表达式 第0行初值表 第1行初值表 最后1行初值表 赋值规则 将 第0行初值表 中的数据 依次赋给第0行中各元素 将 第1行初值表 中的数据 依次赋给第1行各元素 以此类推 之间用逗号隔开 例如 intx 3 4 1 2 3 4 5 6 7 8 9 10 11 12 1 可以只对数组的部分行赋初值 例 intx 3 4 1 2 3 4 9 10 11 12 初始化后各元素为 123400009101112 2 还可以只对数组的部分元素赋值例 intx 3 4 1 2 6 9 初始化后各元素为 120006009000可见 凡是在数组元素对应位置上被缺省的初始值 都由系统自动定为0 不言而喻 可以只对数组部分行的部分元素赋值 intx 3 4 1 2 9 初始化后各元素为 120000009000 3 分行赋值时 也可省略第一行的长度 例 intx 4 1 2 6 9 但不能写成 intx 3 1 2 6 9 系统不能确定数组x的每一行的列数 注意 若定义时不进行初始化 则每一维的长度不能省略 下面定义是不对的 intx 4 intx 3 intx 写成矩阵形式为 123456789101112 2 也可只对部分元素赋值 intx 3 4 1 2 3 4 5 2 按2维数组在内存中的排列顺序给各元素赋初值数据类型数组名 行常量表达式 列常量表达式 初值表 赋值规则 按2维数组在内存中的排列顺序 将初值表中的数据 依次赋给各元素 例 intx 3 4 1 2 3 4 5 6 7 8 9 10 11 12 1 如果对全部元素都赋初值 则 行数 可以省略 注意 只能省略 行数 写为 intx 4 1 2 3 4 5 6 7 8 9 10 11 12 不能写成 intx 3 1 2 3 4 5 6 7 8 9 10 11 12 或 intx 1 2 3 4 5 6 7 8 9 10 11 12 例 求矩阵a和b的和 结果存入矩阵c中 并按矩阵形式输出 main inta 3 4 3 2 7 5 1 0 4 3 6 8 0 2 intb 3 4 2 0 1 4 5 1 7 6 6 8 0 2 inti j c 3 4 for i 0 i 3 i for j 0 j 4 j c i j a i j b i j for i 0 i 3 i for i 0 j 4 j printf 4d c i j printf n 运行结果如下 1 2896 1113121604注意 用循环语句处理二维数组元素时 通常用外循环控制行的变化 用内循环控制列的变化 案例 有M个学生 学习N门课程 已知所有学生的各科成绩 编程 分别求每个学生的平均成绩和每门课程的平均成绩 功能 计算个人平均成绩与各科平均成绩 并在屏幕上显示出来 defineNUM std5 定义符号常量人数为5 defineNUM course4 定义符号常量课程为4 include stdio h main inti j staticfloatscore NUM std NUM course 78 85 83 65 88 91 89 93 72 65 54 75 86 88 75 60 69 60 50 72 for i 0 i NUM std i for j 0 j NUM course j score i NUM course score i j 求第i个人的总成绩 score NUM std j score i j 求第j门课的总成绩 score i NUM course NUM course 求第i个人的平均成绩 for j 0 j NUM course j score NUM std j NUM std 求第j门课的平均成绩 clrscr 输出表头 printf 学生编号课程1课程2课程3课程4个人平均 n 输出每个学生的各科成绩和平均成绩 for i 0 i NUM std i printf 学生 d t i 1 for j 0 j NUM course 1 j printf 6 1f t score i j 制表键 printf n 输出1条短划线 for j 0 j 8 NUM course 2 j printf printf n课程平均 输出每门课程的平均成绩 for j 0 j NUM course j printf 6 1f t score NUM std j printf n getch 5 3字符数组与字符串 5 3 1字符数组的定义5 3 2字符串与字符串结束标志5 3 3字符数组初始化5 3 4字符串的输出5 3 5字符串的输入5 3 6字符串处理函数5 3 7二维字符数组 1 字符数组的定义字符数组的每一个元素存放一个字符 1维字符数组 用于存储和处理1个字符串 其定义格式与1维数值数组一样 2维字符数组 用于同时存储和处理多个字符串 其定义格式与2维数值数组一样 定义格式 char数组名 常量表达式 例如 charc 6 定义c为一维字符数组 长度为6 每一个元素相当于一个字符变量 可在程序中对每个数组元素分别赋值 例如 c 0 s c 1 t c 2 d c 3 f c 4 k c 5 h 1 字符串及其结束标志所谓字符串 是指用双引号括起来的若干有效字符的序列 C语言中的字符串 可以包括字母 数字 专用字符 转义字符等 不包括双引号和反斜杠 C语言规定 以 0 作为字符串结束标志 0 代表ASCII码为0的字符 表示一个 空操作 只起一个标志作用 因此字符串是由有效字符加字符 0 组成的 例如 BASIC 有5个有效字符 但在内存中占6个字节 必须注意 在定义字符数组时 要保证数组长度始终大于字符串实际长度 因为通过字符数组对字符串进行处理时 我们关心的是字符串的有效长度 而不是字符数组的长度 程序中往往通过检测 0 的位置来判断字符串是否结束 例如 一个字符串的第六个字符是 0 则可判定有效字符为5 而存放这个字符串的数组长度可能为10 23或40 2 字符数组的初始化字符数组的初始化 可以通过为每个数组元素指定初值字符来实现 有两种方式 1 定义时将字符逐个赋给数组中各元素 例 charc 7 T U R B O C 0 1 如果花括号内提供的字符个数与预定的数组长度相同时 在数组定义时可省略数组长度 例 charc T U R B O C 0 注意 使用这种方式时对数组初始化时 不能漏写字符 0 例 charc T U R B O C 是错误的2 如果花括号内的字符个数少于所定义的字符数组个数 则将这些字符逐个赋给数组前面的元素 其余的元素自动赋予字符串结束标志 0 例 charc 8 T U R B O C c 0 c 1 c 2 c 3 c 4 c 5 c 6 c 7 TURBOC 0 03 如果花括号内的字符个数多于所定义的字符数组个数 则语法错误 2 用字符串常量对字符数组初始化例 charc turboc 花括号可省略charc turboc 数组长度自动定义为7 系统自动在字符串后加 0 注意 不要写成charc 6 turboc 或charc 6 turboc 3 字符数组的引用字符数组的逐个字符引用 与引用数值数组元素类似 1 引用数组中的单个元素 2 用数组名引用整个字符数组 5 3 4字符串的输出使用printf函数既可以输出字符数组中的一个或多个元素 也可以输出整个字符串 1 输出字符数组中的单个元素例 charc turboc printf c c 3 这种方式常用与循环语句相配合 逐个输出多个字符 inti charc turboc for i 0 i 5 i printf c c i 输出结果 turbo 2 输出整个字符串通过数组名引用整个字符串 printf函数使用 s格式符一次输出存放在字符数组中的整个字符串 例 charc turboc printf s c 输出结果 turboc注意 1 格式符 c输出单个字符 s输出整个字符串例 printf s c 3 printf c c 均是错误的2 无论字符数组长度比字符串实际长度达多少 输出字符串时 遇串结束符 0 就停止输出 只输出 0 前面的有效字符 3 如果一个字符数组中包含多个串结束符 0 则遇第一个 0 就停止输出 5 3 5字符数组的输入除了可以通过初始化使字符数组各元素得到初值外 也可以使用scanf 函数输入字符和字符串 1 单个字符输入例如 charc 10 scanf c 注意以下几点 1 c语言中数组名代表数组的首地址 所以scanf函数中输入项直接写数组名 而不能写为如果输入 turboc则c 0 c 1 c 2 c 3 c 4 c 5 c 6 c 7 turbo 0原因 c语言规定 用scanf函数输入字符串时 空格符 TAB符 回车符作为字符串间隔的标志 注意 逐个字符输入 输出时 要指出元素的下标 而且使用 c 格式符 另外 从键盘上输入字符时 无需输入字符的定界符 单引号 输出时 系统也不输出字符的定界符 5 3 6字符串处理函数 为了解决使用scanf函数不能完整的输入带空格的字符串 引入字符串处理函数字符串标准函数的原型在头文件string h中 1 输入字符串 gets 函数 1 调用方式 函数功能 从标准输入设备 stdin 键盘上 读取1个字符串 可以包含空格 并将其存储到字符数组中去 2 gets 字符数组 例 charc 8 gets c 从键盘上输入 turboc则将带有空格的字符串 turboc 连同 0 共8个字符输入字符数组中 3 使用说明1 gets 读取的字符串 其长度没有限制 编程者要保证字符数组有足够大的空间 存放输入的字符串 2 该函数输入的字符串中允许包含空格 而scanf 函数不允许 2 输出字符串 puts 函数 1 函数功能 把字符数组中所存放的字符串 输出到标准输出设备中去 并用 n 取代字符串的结束标志 0 所以用puts 函数输出字符串时 不要求另加换行符 调用方式 2 puts 字符数组 例 charc 8 puts c 也可以写成 charc 8 puts gets c 运行情况如下 turboc 输入 turboc 输出 3 使用说明1 字符串中允许包含转义字符 输出时产生一个控制操作 2 puts 函数和gets 函数一次只能输出一个字符串 而printf 函数也能用来输出字符串 且一次能输出多个 如 不能写成 puts c1 c2 gets c1 c2 3 拷贝字符串 strcpy 函数 1 函数功能 将 字符串 完整地复制到 字符数组 中 字符数组中原有内容被覆盖 2 调用方式 strcpy 字符数组1 字符串2 其中 字符串 可以是串常量 也可以是字符数组例 charc1 10 c2 turboc Strcpy c1 c2 结果为 c 0 c 0 c 0 c 0 c 0 c 0 c 0 c 0 turboc 0 3 使用说明1 字符数组必须定义得足够大 以便容纳复制过来的字符串 复制时 连同结束标志 0 一起复制 2 不能用赋值运算符 将一个字符串或字符数组直接赋值给一个字符数组 只能用strcpy 函数来处理 例 c1 c2 c1 turboc 是错误的 4 字符串比较 strcmp 函数 1 函数功能 比较两个字符串的大小 比较规则 按字符ASCII码值的大小 将两个字符串从左到右逐个进行比较 若两串对应字符出现不同或遇到 0 则结束比较 若 字符串1 字符串2 即两个串字符全部相等 函数返回值等于0 两个串字符出现不同 则以第一个不同的字符的比较结果为准 字符串1字符串2 函数返回值正整数 2 调用方式 strcmp 字符串1 字符串2 其中 字符串 可以是串常量 也可以是1维字符数组 例 strcmp c1 c2 strcmp c1 turboc strcmp basic turboc 3 使用说明1 如果一个字符串是另一个字符串从头开始的子串 则母串为大 例 strcmp basic bas 结果为正值2 不能使用关系运算符 来比较两个字符串 只能用strcmp 函数来处理 例 if c1 c2 printf yes 是错误的If strcmp c1 c2 0 printf yes 3 可以使用strncmp函数对部分字符串进行比较 一般形式为 strncmp 字符串1 字符串2 字符个数n 例 strncmp basic bas 3 结果为0 案例6 7 gets函数和strcmp函数的应用 案例代码文件名 AL6 7 C 功能 简单密码检测程序 include stdio h main charpass str 80 定义字符数组passstr inti 0 检验密码 while 1 clrscr printf 请输入密码 n gets pass str 输入密码 if strcmp pass str password 0 口令错 printf 口令错误 按任意键继续 elsebreak 输入正确的密码 中止循环 getch i if i 3 exit 0 输入三次错误的密码 退出程序 输入正确密码所进入的程序段 5 连接字符串 strcat 函数 1 函数功能 连接两个字符数组中的字符串 把 字符串2 连接到 字符数组1 中的字符串尾端 并存储于 字符数组1 中 字符数组1 中原来的结束标志 被 字符串2 的第一个字符覆盖 2 调用方式 strcat 字符数组1 字符串2 例如 charc1 15 Ilove charc2 15 china strcat c1 c2 printf s c1 运行结果是 Ilovechina 3 使用说明1 由于没有边界检查 编程者要注意保证 字符数组1 定义得足够大 以便容纳连接后的目标字符串 否则 会因长度不够而产生问题 2 连接前两个字符串都有结束标志 0 连接后 字符数组 中存储的字符串的结束标志 0 被舍弃 只在目标串的最后保留一个 0 3 可以使用strncat函数对部分字符串进行连接 一般形式为 strncat 字符串1 字符串2 字符个数n 例如 chara 15 abc strncat a basic 3 puts a 结果为 abcbas 6 求字符串长度 strlen 函数 len是length的缩写 1 函数功能 求字符串 常量或字符数组 的实际长度 不包含结束标志 2 调用方式 strlen 字符串 例如 charc turboc printf d strlen c 输出结果是字符实际长度7 而不是8 7 将字符串中大写字母转换成小写 strlwr 函数 1 函数功能 将字符串中的大写字母转换成小写 其它字符 包括小写字母和非字母字符 不转换 8 将字符串中小写字母转换成大写 strupr 函数 1 函数功能 将字符串中小写字母转换成大写 其它字符 包括大写字母和非字母字符 不转换 2 调用方式 strupr 字符串 例如 strupr pi3 14159 结果为 PI3 14159再次强调 库函数是人们为了使用方便而编写的公共函数 2 调用方式 strlwr 字符串 例如 strlwr INTA 3 结果为 inta 3 5 3 7二维字符数组二维字符数组可以存放多个字符串 所以二维字符数组也称为字符串数组 1 二维字符数组的定义char 常量表达式 常量表达式 例如 chars 3 4 包含12个数组元素 s 0 0 s 0 1 s 0 2 s 0 3 s 1 0 s 1 1 s 1 2 s 1 3 s 2 0 s 2 1 s 2 2 s 2 3 2 二维数组的初始化有两种形式 1 定义时分行将字符逐个赋给数组中各元素 例 chars 3 4 H o w a r e y o u 或 chars 4 H o w a r e y o u 2 用多个字符串常量对二维字符数组赋初值例如 chars 3 4 How are you 同样 可以把二维字符数组看作特殊的一维字符数组 它的每一个元素又是一个一维字符数组 S初始化后的状态如图 s 0 0 s 0 1 s 0 2 s 0 3 s 0 How 0s 1 0 s 1 1 s 1 2 s 1 3 s 1 are 0s 2 0 s 2 1 s 2 2 s 2 3 s 2 you 0一个N行M列的二维数组可以存放N个字符串 每个字符串的最大长度为M 1 例如 数组s是3行4列 所以可以存放3个字符串 每个字符串的最大实际长度是3而不是4 2 二维数组的引用 1 引用二维字符数组中的单个元素 例 printf c c c s 0 0 s 1 1 s 2 2 输出H r u 2 引用二维字符数组中某一行的元素 即某一字符串 例 printf s s 1 输出are 其中s 1 相当于一个一维数组名 是字符串 are 的起始地址 即二为字符数组s的第一行的起始地址 同样 可以用gets函数或scanf函数为二维字符数组输入多个字符串 例 chars 3 4 inti for i 0 i 3 i gets s i printf s n s 0 puts s 1 for i 0 i 4 i printf c n s 2 i 运行结果 howareyouhowareyou 5 3 8字符数组程序举例例1 输入输出字符串 includemain charc 13 inti for i 0 i 12 i scanf c 逐个输出数组中字符 printf n scanf s c printf s c gets c puts c 运行结果 Computer cComputer cComputer cComputerComputer c由于scanf函数不能完整输入包括空格符的字符串 因此输入时只将 Computer 输入到数组中 而用gets函数可以输入包括空格符的字符串 用puts函数输出字符串时 将串结束符 0 转换成换行符 则用puts函数时一次输出一行 不必另加换行符 即puts 与printf s n c 等效 例 输入一行字符 统计其中有多少个单词 单词之间用空格隔开 includemain charstring 81 inti num 0 word 0 charc gets string for i 0 c string i 0 i if c word 0 elseif word 0 word 1 num printf thereare dwordsintheline n num 如果输入为 Iamaboy 每个字符参数状态如下 for i 0 c string i 0 i 他的作用是先将字符数组的某一元素赋给字符变量c 此时赋值表达式的值就是该字符 然后再判定他是否结束符 例 编写程序连接两个字符串 要求不用字符串函数 include includemain chars1 15 s2 7 inti 0 j 0 gets s1 gets s2 while s1 i 0 i while s2 j 0 s i s2 j s i 0 printf nNewstring s n s1 运行结果 IloveChinaNewstring IloveChina 例 从键盘上输入4个字符串 输出其中最大者 str 0 from 0str 1 goto 0str 2 girl 0str 3 first 0 includemain charmax 15 str 4 15 inti gets str 0 strcpy max str 0 for i 1 i 4 i gets str i if strcmp max str i 0 strcpy max str i printf Thelargeststringis s n max 案例 从键盘输入一个字符串 回车键结束 并将字符串在屏幕上输出 main inti staticcharstr 80 clrscr for i 0 i 80 i str i getch 逐次给数组元素str i 赋值 但不回显在屏幕上 printf 以星号代替输入字符的个数 if str i x0d break 若输入回车则终止循环 i 0 while str i x0d printf c str i 逐次输出字符数组的各个元素 printf n getch 程序暂停
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!