• / 92
  • 下载费用:10 金币  

C语言程序设计(数组)

关 键 词:
语言程序设计 数组
资源描述:
C C语言程序设计课程组语言程序设计课程组 魏慧琴魏慧琴 第第5章章 数组数组 1 一维数组 2 二维数组 3 字符数组 学习内容学习内容 1 1 数组的概念 2 一维数组的定义及初始化 3 数组的引用 第一单元第一单元 一维数组一维数组 2 3 数组的概念数组的概念 构造数据类型之一构造数据类型之一 定义 数组是有序数据的集合定义 数组是有序数据的集合 组成数组的数据称为数组的元素 组成数组的数据称为数组的元素 数组的每个元素都属于同一个数据类型 数组的每个元素都属于同一个数据类型 每个数组要用一个统一的标识符标识 称为数组名 每个数组要用一个统一的标识符标识 称为数组名 英语英语数学数学计算机计算机 90 90 89 89 91 95 90 100 90 a 1 1 4 数组的定义及初始化数组的定义及初始化 类型说明符类型说明符 数组名数组名 常量表达式常量表达式 一维一维二维二维 inta 5 inta 3 4 charc 20 charc 2 3 float x 10 float x 2 3 注意注意 数组的大小是固定的 即 不允许对数组的大小进行 数组的大小是固定的 即 不允许对数组的大小进行 动态定义 另动态定义 另常量表达式常量表达式的值表示元素的个数 下标值从的值表示元素的个数 下标值从 0开始 开始 5 普通普通数组如果不初始化 其元素值为所分配内存中数组如果不初始化 其元素值为所分配内存中的的随机随机值值 对对staticstatic数组元素不赋初值 系统会自动赋以数组元素不赋初值 系统会自动赋以0 0值 值 只只给部分数组元素赋初值 例如 给部分数组元素赋初值 例如 intint fib 10 0 1 fib 10 0 1 对对数组的前两个元素赋初值数组的前两个元素赋初值 未赋初值未赋初值的的元素其值默认元素其值默认为为0 0 一维数组的初始化一维数组的初始化 数组的定义及初始化数组的定义及初始化 注意注意 初值初值的个数的个数不能大于不能大于数组元素的个数 数组元素的个数 6 当当对全部元素赋初值时对全部元素赋初值时 则定义时可以不指定数组的长度 则定义时可以不指定数组的长度 如如 intint a 10 0 1 2 3 4 5 6 7 8 9 a 10 0 1 2 3 4 5 6 7 8 9 可写成可写成 intint a a 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 一维数组的初始化一维数组的初始化 数组的定义及初始化数组的定义及初始化 建议不要省略数组长度建议不要省略数组长度 10 7 数组的引用数组的引用 数组必须先定义 后使用 数组必须先定义 后使用 对数值型数组而言对数值型数组而言 只能逐个引用数组元素 只能逐个引用数组元素 例如例如 定义数组定义数组 intint a 3 a 3 数组元素为 数组元素为 a 0 a 1 a 2 a 0 a 1 a 2 8 引用形式引用形式 一维一维 数组名数组名 下标值下标值 示例示例 a 2 1 a 2 1 a a i i 7 7 i i为整型变量为整型变量 注意 注意 下标下标的值不要超过数组的的值不要超过数组的范围 下标的取值范围 下标的取值 范围范围0 0 数组长度数组长度 1 1 数组定义时不能进行数组定义时不能进行 动态定义 引用时 动态定义 引用时 可以用变量做下标值可以用变量做下标值 9 数组的引用数组的引用 数组和循环数组和循环 for i 0 i 10 i printf d f i 数组下标数组下标作为循环变量 通过循环 逐个 处理数组元素 10 例例5 5 1 1阅读下列源程序 请写出运行结果 阅读下列源程序 请写出运行结果 注意输出注意输出 及处理 及处理 include include intint main main intintf 10 f 10 i i f 0f 0 1 f 1 1 1 f 1 1 for for i i 2 i 10 i 2 i 10 i f f i i f i f i 1 f i1 f i 2 2 for for i i 0 i 10 i 0 i 10 i if i 5 0 if i 5 0 printfprintf n n printfprintf 4d f 4d f i i return 0return 0 一维数组的应用 排序 一维数组的应用 数据查找 第二单元第二单元 一维数组的应用一维数组的应用 11 一维数组的应用一维数组的应用 求最小值求最小值 例例 5 2 输入输入n n 10 再再输入输入n个数个数 1 求最小值求最小值 2 求最小值和它所对应的下标求最小值和它所对应的下标 3 将最小值与第一个数交换 输出交换后的将最小值与第一个数交换 输出交换后的n个数个数 12 include int main void int i min n int a 10 printf Enter n scanf d printf Enter d integers n for i 0 i n i scanf d min a 0 for i 1 i n i if a i min min a i printf min is d n min return 0 一维数组的应用一维数组的应用 求最小值求最小值 Enter n 6 Enter 6 integers 2 9 1 8 1 6 min is 1 13 输入输入n n 10 再再输入输入n个数个数 输出最小值和它所对应的下标输出最小值和它所对应的下标 用用index记录最小值对应的下记录最小值对应的下标标 a index 就是最小值就是最小值 一维数组的应用一维数组的应用 求最小值求最小值及其下标及其下标 14 include int main void int i index n int a 10 printf Enter n scanf d printf Enter d integers n for i 0 i n i scanf d index 0 for i 1 i n i if a i a index index i printf min is d tsub is d n a index index return 0 Enter n 6 Enter 6 integers 2 9 1 8 1 6 min is 1sub is 2 一维数组的应用一维数组的应用 求最小值求最小值及其下标及其下标 15 输入输入n n 10 再再输入输入n个数个数 将最小值与第一个数交换 输将最小值与第一个数交换 输 出交换后的出交换后的n个数 个数 用用index记录最小值对应的下标记录最小值对应的下标 a index 就是最小值就是最小值 最小值与第一个数交换最小值与第一个数交换 a index a 0 一维数组的应用一维数组的应用 交换交换最小值最小值 16 35281 例例5 3 输入输入n n 10 再再输入输入n个数个数 用选择法将它们从小到大排序用选择法将它们从小到大排序 后输出 后输出 设设 n 5 设数据为 设数据为 3 5 2 8 1 1 1 5 2 8 3 2 2 5 8 3 3 3 8 5 4 5 8 一维数组的应用一维数组的应用 选择法排序选择法排序 17 3 5 2 8 1 n 5 5个数个数 a 0 a 4 中找最小数 与中找最小数 与a 0 交换交换 1 1 5 2 8 3 a 4 a 0 4个数个数 a 1 a 4 中找最小数 与中找最小数 与a 1 交换交换 2 1 2 5 8 3 a 2 a 1 3个数个数 a 2 a 4 中找最小数 与中找最小数 与a 2 交换交换 3 1 2 3 8 5 a 4 a 2 2个数个数 a 3 a 4 中找最小数 与中找最小数 与a 3 交换交换 4 1 2 3 5 8 a 4 a 3 一维数组的应用一维数组的应用 选择法排序选择法排序 18 1 n个个数 a 0 a n 1 中找最小数 与 a 0 交换 2 n 1个数 a 1 a n 1 中找最小数 与 a 1 交换 2个个数 a n 2 a n 1 中找最小数 与 a n 2 交换 1 5个个数数 a 0 a 4 中找最小数 与中找最小数 与 a 0 交换交换 2 4个个数数 a 1 a 4 中找最小数 与中找最小数 与 a 1 交换交换 3 3个个数数 a 2 a 4 中找最小数 与中找最小数 与 a 2 交换交换 4 2个个数数 a 3 a 4 中找最小数 与中找最小数 与 a 3 交换交换 一维数组的应用一维数组的应用 选择法排序选择法排序 19 for k 0 k n 1 k index k for i k 1 i n i if a i a index index i temp a index a index a k a k temp include int main void int i index n int a 10 printf Enter n scanf d printf Enter d integers n for i 0 i n i scanf d 一维数组的应用一维数组的应用 选择法排序选择法排序 20 Enter n 5 Enter 10 integers 3 5 2 8 1 After sorted 1 2 3 5 8 printf n排序后为排序后为 n for i 0 i n i printf 6d a i printf n return 0 for k 0 k n 1 k index k for i k 1 i n i if a i a index index i if i k temp a index a index a k a k temp 一维数组的应用一维数组的应用 选择法排序选择法排序 21 例例5 5 4 4 编程 用冒泡法对编程 用冒泡法对1010个整数按从小到大的个整数按从小到大的 顺序排列 顺序排列 一一维数组的维数组的应用应用 冒泡排序冒泡排序 22 13 21 90 32 1 13 21 90 32 1 int a 5 n a 0 a 1 a 2 a 3 a 4 第一轮21 13 90 32 1 13 21 32 90 1 13 21 32 1 90 一一维数组的维数组的应用应用 冒泡排序冒泡排序 23 13 21 32 1 13 21 32 1 a 0 a 1 a 2 a 3 a 4 第二轮13 21 32 1 90 第三轮 13 21 1 32 一一维数组的维数组的应用应用 冒泡排序冒泡排序 24 总结 对于对于5 5个数要进行个数要进行4 4轮轮比较交换 第一比较交换 第一轮轮中比中比4 4次 第二次 第二轮轮中比中比 3 3次 次 可以可以推知 如果有推知 如果有n n个数 要进行 个数 要进行 n n 1 1 轮轮比较交换处理 比较交换处理 在第在第i i轮轮要比较 要比较 n n i i 次 次 用用外循环表示第外循环表示第i i轮轮比较 用内循环表示第比较 用内循环表示第i i轮轮中第中第j j次比较 次比较 因此应该使用双重循环因此应该使用双重循环 算法算法的整体思路是让大的数不断地往下沉 小的数不断地往上的整体思路是让大的数不断地往下沉 小的数不断地往上 冒 所以叫冒 所以叫 冒泡排序冒泡排序法法 一一维数组的维数组的应用应用 冒泡排序冒泡排序 25 为了表述方便 定义以下为了表述方便 定义以下3 3个变量 个变量 n n 待排序的数的个数 这里待排序的数的个数 这里 n 10n 10 i i 扫描轮数 扫描轮数 i i 1 2 n 1 2 n 1 1 j j 第第i i轮比较的次数 也表示扫描轮比较的次数 也表示扫描待比较元素的待比较元素的下标 下标 j 0 1 j 0 1 n n i i 1 1 冒泡排序算法冒泡排序算法设计设计 26 变量 数组长度定义变量 数组长度定义 for j 0 j N i 1 j scanf d i N i for i 0 ia j 1 10 a j 与与a j 1 交换交换 for i 1 i N 1 i printf 6d a i 冒泡法完成冒泡法完成10个数由小到大个数由小到大 的排序的排序 include define N 10 int main int a N i j t printf 请输入请输入10个数个数 n for i 0 i N i scanf d printf n 变量 数组长度定义变量 数组长度定义 for j 0 j N i 1 j scanf d i N i for i 0 ia j 1 10 a j 与与a j 1 交换交换 for i 1 i N 1 i printf 6d a i for i 1 i N 1 i for j 0 ja j 1 t a j a j a j 1 a j 1 t printf n排序后为排序后为 n for i 0 i N i printf 6d a i printf n return 0 冒泡法完成冒泡法完成1010个数由小到大个数由小到大 的排序的排序 include define N 10 int main int a N i j t printf 请输入请输入10个数个数 n for i 0 i N i scanf d printf n for i 1 i N 1 i for j 0 ja j 1 t a j a j a j 1 a j 1 t printf n排序后的数据为排序后的数据为 n for i 0 i N i printf 6d a i printf n return 0 例例5 5 5 5输入输入5 5个整数个整数 将它们存入数组将它们存入数组a a中中 再输入再输入1 1个数个数x x 然后在数组中查找然后在数组中查找x x 如果找到如果找到 输出相应的下标输出相应的下标 否则否则 输输 出出 Not Not Found Found 输入 2 9 8 9 6 9 输出 1 输入 2 9 8 9 6 7 输出 Not Found 一一维数组的维数组的应用应用 数据查找数据查找 线性查找线性查找 include int main void int i flag x int a 5 printf Enter 5 integers for i 0 i 5 i scanf d printf Enter x scanf d flag 0 for i 0 i 5 i if a i x printf Index is d n i flag 1 break if flag 0 printf Not Found n return 0 Enter 5 integers 2 9 8 1 9 Enter x 9 Index is 1 Enter 5 integers 2 9 8 1 9 Enter x 7 Not Found 线性查找线性查找 一一维数组的维数组的应用应用 数据查找数据查找 例例 5 5 思考思考 1 Enter 5 integers 2 9 8 1 9 Enter x 9 Index is 1 Index is 4 include int main void int i flag x int a 5 printf Enter 5 integers for i 0 i 5 i scanf d printf Enter x scanf d flag 0 for i 0 i 5 i if a i x printf Index is d n i flag 1 break if flag 0 printf Not Found n return 0 include int main void int i sub x int a 5 printf Enter 5 integers for i 0 i 5 i scanf d printf Enter x scanf d sub 1 for i 0 i 20 34 一一维数组的维数组的应用应用 数据查找数据查找 示例 示例 101017172020222231314444515155556868 查找 查找 2020 例例5 5 6 6 利用折半查找法利用折半查找法 二分查找法二分查找法 查找查找指定的数据 指定的数据 分析 分析 a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 10 17 20 22 31 44 51 55 6810 17 20 22 31 44 51 55 68 tbm 一一维数组的维数组的应用应用 数据查找数据查找 35 再判断再判断a m 与与20的关系的关系a m 20 示例 示例 101017172020222231314444515155556868 查找 查找 2020 例例5 5 6 6 利用折半查找法利用折半查找法 二分查找法二分查找法 查找查找指定的数据 指定的数据 分析 分析 a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 10 17 20 22 31 44 51 55 6810 17 20 22 31 44 51 55 68 tbm 36 再判断再判断a m 与与20的关系的关系a m 20 a m 20 找到了 找到了 折半查找法只适合于对折半查找法只适合于对 已排序已排序的数列进行查找 的数列进行查找 一一维数组的维数组的应用应用 数据查找数据查找 37 定义变量 数组定义变量 数组 for i 0 ix 10 b m 1 t m 1 当当 t b 输入已排序好的数列输入已排序好的数列 for i 0 i N i scanf d printf 请输入要查找的数值请输入要查找的数值 scanf d t 0 b N 1 find 0 do m t b 2 if a m x printf 找到了找到了 3d 是是 a d n x m find 1 else if x a m b m 1 elset m 1 while t b if find 0 printf 3d 没有找到没有找到 n x 38 定义变量 数组定义变量 数组 for i 0 ix 10 b m 1 t m 1 当当 t b for i m i n i b i 1 b i void main int i a N 1 2 3 4 5 6 7 8 9 10 f a 2 9 for i 0 i 5 i printf d a i a 1 2 3 4 5 6 7 8 9 10 b 10 9 8 7 6 4 5 3 方法一 方法一 用数组名作为实际参数 用数组名作为实际参数 给函数传递数组的地址 通过给函数传递数组的地址 通过 这个地址就可以访问到数组的这个地址就可以访问到数组的 元素了元素了 双向传递双向传递 12334 40 例例5 5 7 7阅读下列源程序 请总结其功能 阅读下列源程序 请总结其功能 include int fmax int x int y return x y x y void main int a 10 j max for j 0 j 9 j scanf d max a 0 for j 1 j 9 j max fmax max a j printf n最大值为 最大值为 8d n max 方法二方法二 用数组元素作为实际参用数组元素作为实际参 数 是一种传值的方式 即 数 是一种传值的方式 即 调用函数时要复制数据调用函数时要复制数据 单向传递单向传递 41 练习 练习 对最多对最多100100个无序的整数 用折半查找法查找某个无序的整数 用折半查找法查找某 元素值 元素值 分析 分析 1 1 定义定义sort int a int n 完成对完成对n个整数的升序排序 个整数的升序排序 2 2 定义定义search int a int n int x 完成折半查找 完成折半查找 3 3 main 完成原始数据的输入 完成原始数据的输入 sort 和和search 函数函数 的调用的调用 42 参考源程序参考源程序 include define N 100 void sort int int search int int int void main int a N j n x scanf d for j 0 j n j 实现实现n个原始数据的输入个原始数据的输入 scanf d sort a n printf n printf 请输入要查找的数值 请输入要查找的数值 n scanf d search a n x 43 冒泡法排序冒泡法排序 void sort int a int n int i j t for i 1 i n 1 i for j 0 ja j 1 t a j a j a j 1 a j 1 t 44 参考源程序参考源程序 void search int a int n int x int t 0 b find 0 m b n 1 do m t b 2 if a m x printf 找到了找到了 3d 是是a d n x m find 1 else if x a m b m 1 elset m 1 while t b if find 0 printf 3d 没有找到没有找到 n x 45 参考源程序参考源程序 1 二维数组的定义和初始化 2 二维数组的引用 3 二维数组元素在内存中的排列顺序 4 二维数组应用 第四单元第四单元 二维数组二维数组 46 多维数组的空间想象多维数组的空间想象 二维数组 二维数组 一个表格或一个平面矩阵一个表格或一个平面矩阵 一维数组 一维数组 一列长表或一个向量一列长表或一个向量 多维数组 多维数组 多维空间的一个数据列阵多维空间的一个数据列阵 三维数组 三维数组 三维空间的一个方阵三维空间的一个方阵 第四单元第四单元 二维数组二维数组 47 48 二维数组的定义及初始化二维数组的定义及初始化 二维数组的定义二维数组的定义 类型名类型名 数组名数组名 行长度行长度 列长度列长度 intint a 3 2 a 3 2 定义定义1 1个二维数组个二维数组a a 3 3行行2 2列 列 6 6个元素个元素 intintb 5 10 b 5 10 定义定义1 1个二维数组个二维数组a a 5 5 行行 10 10 列 列 50 50 个元素个元素 二维数组的初始化二维数组的初始化 分行分行赋初值赋初值 int a 3 3 1 2 3 4 5 6 7 8 9 static int b 4 3 1 2 3 4 5 数组数组a 1 2 3 4 5 6 7 8 9 数组数组b 1 2 3 0 0 0 4 5 0 0 0 0 顺序赋初值顺序赋初值 int a 3 3 1 2 3 4 5 6 7 8 9 static int b 4 3 1 2 3 0 0 0 4 5 二维数组的定义及初始化二维数组的定义及初始化 49 省略行长度省略行长度 对全部元素都赋了初值 对全部元素都赋了初值 int a 3 1 2 3 4 5 6 7 8 9 或分行赋初值时 在初值表中列出了全部行或分行赋初值时 在初值表中列出了全部行 static int b 3 1 2 3 4 5 建议不要省略建议不要省略 数组数组a 1 2 3 4 5 6 7 8 9 数组数组b 1 2 3 0 0 0 4 5 0 0 0 0 50 二维数组的引用二维数组的引用 先定义 后使用先定义 后使用 数组元素的引用 数组元素的引用 数组名数组名 行下标行下标 列下标列下标 行下标和列下标 整型表达式 行下标的取值范围是 0 行长度行长度 1 列下标的取值范围是 0 列长度列长度 1 int a 3 2 3 行行 2 列 列 6 个元素个元素 a 0 0 a 0 1 a 1 0 a 1 1 a 2 0 a 2 1 下标不要越界下标不要越界 51 int a 3 2 3 行 2 列 6 个元素 表示1个3行2列的矩阵 a 0 0 a 0 1 a 1 0 a 1 1 a 2 0 a 2 1 二维数组的元素在内存二维数组的元素在内存 中按行中按行 列方式存放列方式存放 a 0 0 a 0 1 a 1 0 a 1 1 a 2 0 a 2 1 二维数组元素在内存中的排列顺序二维数组元素在内存中的排列顺序 52 二维数组元素在内存中的排列顺序二维数组元素在内存中的排列顺序 可把二维数组看作是一种特殊的一维数组 它的元素又是一个一维可把二维数组看作是一种特殊的一维数组 它的元素又是一个一维 数组数组 例如 可把例如 可把 a 3 4 看作是一个一维数组 有看作是一个一维数组 有3个元素 个元素 a 0 a 1 a 2 每个元素又是一个包含 每个元素又是一个包含 4 个元素的一维数组 见下图 个元素的一维数组 见下图 二维数组中元素排列的顺序是按行行存放 a 0 a 1 a 2 a 0 0 a 0 1 a 0 2 a 0 3 a a 1 0 a 1 1 a 1 2 a 1 3 a 2 0 a 2 1 a 2 2 a 2 3 4 4 4 53 按行存放 二维数组的元素在数组中的排列顺序可以计算出来二维数组的元素在数组中的排列顺序可以计算出来 设一设一 个个m n的数组的数组x 数组元素数组元素x i j 在数组中的排列顺序为在数组中的排列顺序为 i i n j n j 1 1 例如 3 3 4 4数组数组x x 元素元素x x 2 2 2 2 在数组的排列顺序为在数组的排列顺序为2 2 4 4 2 2 1 1 1111 即数组中的第即数组中的第1111个元素个元素 二维数组元素在内存中的排列顺序二维数组元素在内存中的排列顺序 55 二维数组应用二维数组应用 行下标和列下标分别做为循环变量行下标和列下标分别做为循环变量 通过通过二重循环二重循环遍遍 历二维数组历二维数组 通常将通常将行下标行下标做为做为外循环外循环的循环变量的循环变量 列下标列下标做为做为内循环内循环的循环变量的循环变量 56 二维数组应用二维数组应用 例例5 5 8 8 将将1个个3 2的矩阵存入的矩阵存入1个个3 2的二维数组中 找出的二维数组中 找出 最大值以及它的行下标和列下标 并输出该矩阵 最大值以及它的行下标和列下标 并输出该矩阵 row 记录最大值的行下标记录最大值的行下标 col最大值的列下标最大值的列下标 a row col 就是最大值就是最大值 Enter 6 integers 3 2 10 9 6 1 3 2 10 9 6 1 max a 1 0 10 int main void int col i j row int a 3 2 printf Enter 6 integers n for i 0 i 3 i for j 0 j 2 j scanf d for i 0 i 3 i for j 0 j 2 j printf 4d a i j printf n row col 0 for i 0 i 3 i for j 0 j a row col row i col j printf max a d d d n row col a row col return 0 二维数组应用二维数组应用 58 1 字符串的概念 第五单元第五单元 字符串与数组字符串与数组 什么是字符串什么是字符串 printf hello world 字符串字符串 是用一对双引号括起来若干有效字符的是用一对双引号括起来若干有效字符的 序列 序列 所谓所谓 有效字符有效字符 是是指系统允许使用的字符 指系统允许使用的字符 C C语言中的字符串可以包括字母 数字 专用字语言中的字符串可以包括字母 数字 专用字 符 转义字符等等 符 转义字符等等 对字符串如何处理对字符串如何处理 C C语言中没有字符串变量 字符串不是存放在一语言中没有字符串变量 字符串不是存放在一 个变量中而是存放在一个个变量中而是存放在一个字符型数组字符型数组中 中 因此为了存放字符串 常常在程序中定义字符数因此为了存放字符串 常常在程序中定义字符数 组 例如 组 例如 char c 10 char c 10 字符串字符串的概念的概念 59 系统对字符串系统对字符串常量自动常量自动加一加一个个 0 作为作为结束符 结束符 0 代表代表ASCII码码为为0的字符 它不是一个可显示的字符 它不是一个可显示 字符 而是一字符 而是一个个 空操作字符空操作字符 它什么也不干 不会它什么也不干 不会 产生任何附加操作或增加有效字符 只起一个字符串产生任何附加操作或增加有效字符 只起一个字符串 结束标志结束标志 的作用的作用 但需要占用存储空间 但需要占用存储空间 字符串字符串的概念的概念 60 a 2 个字符个字符 a 和和 0 a 1 个字符常量个字符常量 区分区分 a 和和 a 定义字符数组定义字符数组 char c VC 6 0 char c VC 6 0 示例示例 存储存储字符串字符串 VC 6 0 V C 6 0 0 c 8 个个 字字 节节 字符串字符串的概念的概念 61 有了结束有了结束标志标志 0 后后 在程序中往往依靠 在程序中往往依靠检测检测 0 来来判定字符串是否结束而不是根据数组长度来决定字判定字符串是否结束而不是根据数组长度来决定字 符串长度 符串长度 但是 在定义字符数组时应估计实际字符串长度 但是 在定义字符数组时应估计实际字符串长度 使数组长度始终保证大于字符串实际长度使数组长度始终保证大于字符串实际长度 字符串字符串的概念的概念 62 63 2 用字符数组处理字符串 第五单元第五单元 字符串与数组字符串与数组 63 字符串的存储和运算可以用一维字符数组实现字符串的存储和运算可以用一维字符数组实现 一维字符数组的定义 引用 初始化与其他类型的一维数组一一维字符数组的定义 引用 初始化与其他类型的一维数组一 样 样 char str 80 定义一个含有定义一个含有8080个字符型元素的数组个字符型元素的数组str char t 5 H a p p y 初始化数组初始化数组 t t t 0 t 1 t 4 tH a p py 输出数组输出数组 t t 的所有元素的所有元素 for i 0 i 对字符数组的操作对字符数组的操作 static char s 6 H a p p y 0 字符数组初始化 用字符串常量 static char s 6 Happy static char s 6 Happy 数组长度数组长度 字符串的有效长度字符串的有效长度 1 char t 5 Happy 能存入t吗 65 用字符数组处理字符串用字符数组处理字符串 char s 80 Happy 字符串遇字符串遇 0 结束结束 第一个第一个 0 前面的所有字符和前面的所有字符和 0 一起构成了字符串一起构成了字符串 Happy 0 之后的其他数组元素与该字符串无关之后的其他数组元素与该字符串无关 s 0 s 1 s 5 sH a p py 0 字符串由有效字符和字符串结束符字符串由有效字符和字符串结束符 0 组成组成 66 用字符数组处理字符串用字符数组处理字符串 普通字符数组普通字符数组 数组元素的个数是确定的数组元素的个数是确定的 一般用下标控制一般用下标控制 循环循环 字符串字符串 没有显式地给出有效字符的个数 没有显式地给出有效字符的个数 只规定在字符串只规定在字符串 结束符结束符 0 之前的字符都是字符串的有效字符之前的字符都是字符串的有效字符 一般用结束一般用结束 符符 0 来控制循环来控制循环 循环条件 循环条件 s i 0 67 例例5 9 计算字符串的有效长度 并输出该字符串 计算字符串的有效长度 并输出该字符串 include int main void int i 0 len char str 80 Happy 初始化 for i 0 str i 0 i len i printf len d n len for i 0 str i 0 i 输出字符串 putchar str i return 0 循环条件循环条件 len 5 Happy 用字符数组处理字符串用字符数组处理字符串 68 for i 0 s i 0 i putchar s i for i 0 i len i putchar s i for i 0 i 80 i putchar s i 字符串的输入输出字符串的输入输出 69 逐个字符逐个字符I OI O c c 用用 c c include void main char s 5 int i for i 0 i 5 i scanf c for i 0 i 5 i printf c s i 用用 s s include void main char s 5 scanf s s printf s s 字符串的输入输出字符串的输入输出 整个字符串整个字符串I OI O s s 70 整体整体I OI O的格式 的格式 scanfscanf s s 数组名数组名 printfprintf s s 数组名数组名 注意 注意 1 由键盘输入的串应短于数组的长度 2 输出时 遇到 0 停止输出 3 与 s对应的是地址 对一维数组 数组名就是地址 字符串的输入输出字符串的输入输出 71 练习 使用练习 使用scanfscanf函数输入字符串给函数输入字符串给 字符串变量 字符串变量 include stdio h void main char str 10 scanf s str printf s str 注意注意 scanfscanf函数不能完函数不能完 整地读入带空格的字符串 整地读入带空格的字符串 字符串的输入输出字符串的输入输出 运行结果 运行结果 Welcome you Welcome 72 用于字符串处理的函数 第五单元第五单元 字符串与数组字符串与数组 73 包含包含在头文件在头文件stdio hstdio h 字符串输出函数字符串输出函数puts puts 字符数组字符数组名名 字符串字符串 功能 向显示器输出字符串 输出完 换行 功能 向显示器输出字符串 输出完 换行 说明 字符数组必须说明 字符数组必须以以 0 结束结束 字符串输入函数字符串输入函数gets gets 字符数组字符数组名名 功能 从键盘输入一以回车结束的字符串放入字符功能 从键盘输入一以回车结束的字符串放入字符 数组中 并自动数组中 并自动加加 0 说明 输入串长度应小于字符数组长度 说明 输入串长度应小于字符数组长度 字符串连接函数字符串连接函数strcat 字符数组字符数组1 1 字符数组字符数组2 2 例如 例如 char s1 12 VC char s2 6 0 printf s strcat s1 s2 输出结果 输出结果 VC 6 0 74 字符串字符串处理函数处理函数 包含包含在头文件在头文件string hstring h 功能 功能 把字符数组把字符数组2 2存储的字符串从存储的字符串从字符数组字符数组1 1存储串的存储串的 结尾处开始连接结尾处开始连接 返值 返值 返回字符数组返回字符数组1 1的首地址的首地址 说明 说明 字符数组字符数组1 1必须足够大必须足够大 连接前连接前 两串均两串均以以 0 0 结束结束 连接后连接后 串串1 1的的 0 0 取消取消 75 字符串字符串处理函数处理函数 例例5 5 10 10 阅读下列源程序 分析其功能 阅读下列源程序 分析其功能 include void main char x 10 y 30 intj k gets x gets y 输入两个串输入两个串 for j 0 y j 0 j 查找查找y串中串中 0 的下标值的下标值 for k 0 x k 0 j k y j x k x串连接到串连接到y串的尾部串的尾部 y j 0 printf n puts y strcat y x include 76 字符串字符串处理函数处理函数 功能 将字符功能 将字符数组数组2 2中存放的字符串中存放
展开阅读全文
  麦档网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:C语言程序设计(数组)
链接地址:https://www.maidoc.com/p-16761811.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2018-2020 maidoc.com版权所有  文库上传用户QQ群:3303921 

麦档网为“文档C2C模式”,即用户上传的文档所得金币直接给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的金币归上传人(含作者)所有。
备案号:蜀ICP备17040478号-3  
川公网安备:51019002001290号 

本站提供办公文档学习资料考试资料文档下载


收起
展开