C语言一维数组的定义和引用数组.ppt

上传人:sh****n 文档编号:7224701 上传时间:2020-03-16 格式:PPT 页数:47 大小:315.50KB
返回 下载 相关 举报
C语言一维数组的定义和引用数组.ppt_第1页
第1页 / 共47页
C语言一维数组的定义和引用数组.ppt_第2页
第2页 / 共47页
C语言一维数组的定义和引用数组.ppt_第3页
第3页 / 共47页
点击查看更多>>
资源描述
第7章数组数组 是构造类型 元素由基类型 整 实 字符 组成 它是有序的 同类型数据的集合 7 1一维数组的定义和引用7 1 1一维数组的定义形式 类型说明符数组名 常量表达式 如 inta 5 floatb 10 说明 1 命名规则 数组名是由合法的标识符组成 2 数组名后是用 括起来的是常量表达式包括 整 字符 符号常量表达式 如 inta 2 3 b 5 c a d 8 xyz 35 defineN5main inta N printf d n a 1 100 而 inta 10 b x 5 8 3 x y 50 5x 100 是否正确 又如 inti 5 inta 5 i 是否正确性 3 数组的长度inta 5 a 0 a 1 a 2 a 3 a 4 5个元素 下标从0 4注意 在TurboC中超过定义的数组下标元素是可以引用的 系统不作检查 例T7 0 1 cmain inti a 5 for i 0 i 4 i printf a d d n i a i i 1 printf a 5 d t a 5 printf a 6 d n a 6 运行结果 a 0 1a 1 2a 2 3a 3 4a 4 5a 5 30a 6 285 4 数组大小的定义只能是常量 而不能是变量或动态地定义 例7 0 2 Cmain intn 5 a n a 1 100 printf a 1 d n a 1 编译指出 constantexpressionrequiredinfunctionmain 主函数中要求常量表达式 7 1 2一维数组元素的引用引用规则 1 先定义 后使用 2 引用形式 数组名 下标 下标可以是整 字符型的常量 变量或表达式 3 引用方法 针对元素而不是整个数组 如 a 0 a b a a b 96 a 3 a 2 2 例T7 1 C对数组a顺序赋值 逆序输出main inta 5 i for i 0 i 0 i printf a d d n i a i 运行结果 a 4 4a 3 3a 2 2a 1 1a 0 0 7 1 3一维数组的初始化实现的方法有 1 定义时对数组元素初始化如 inta 5 1 2 3 4 5 2 只给部分元素赋值如 inta 5 1 3 5 3 初始化时给全部元素赋0值如 inta 5 0 0 0 0 0 或inta 5 0 4 对全部元素赋初值时可以不指出长度如 inta 5 2 4 6 8 10 或inta 2 4 6 8 10 效果一样 例T7 1 1 c定义时对数组元素初始化main inti inta 5 2 4 6 8 10 for i 0 i 4 i printf d n a i 注意 static存储类别 这和新ANSI新标准一致 若采用static 数组元素的值被存储在静态区 运行结果 246810 7 1 4一维数组程序举例例T7 2 c求Fibonacci数列问题关于菲波那契算法 头两个数各为1 以后的每个数皆为前两个数之和 main inti intf 20 1 1 for i 2 i 20 i f i f i 2 f i 1 for i 0 i 20 i if i 5 0 printf n printf 12d f i 运行结果 112358132134551442333776109871597258441816765 例T7 3 c用起泡法对6个数排序 由小到大 思路 将相邻两数两两比较 若小则调到前头 不小也要比较 第一轮大数沉底第二轮第三轮第四轮第五轮 此处 n 6 外层循环j 1 n 1 次内层循环i 1 n j 次 988888 895555 559444 444922 222290 000009 85555 58444 44822 22280 00008 5444 4522 2250 0005 422 240 004 20 02 main inta 7 inti j t printf input6numbers n for i 1 ia i 1 t a i a i a i 1 a i 1 t printf thesortednumbers n for i 1 i 7 i printf d a i 运行 input6numbers 输入 985420输出 024589 7 2二维数组的定义和引用7 2 1二维数组的定义1 一般形式 类型说明符数组名 常量表达式 常量表达式 如 floata 3 4 定义数组a具有三行四列在C中 可将二维数组看着是特殊形式的一维数组 如上述定义可看着是具有三个元素的一维数组 而每个元素又可看作是包含四个元素的一维数组 因此 上述定义相当于 floata 0 4 a 1 4 a 2 4 注 实际应用时若如此定义则被认为是重定义 2 二维数组各个元素在内存中的存放顺序是 按先行后列的顺序依次存放 例T7 3 1 cmain inti j a 2 3 for i 0 i 2 i for j 0 j 3 j scanf d 输入 1357911 输出 a 0 0 ffcea 0 0 1 a 0 1 ffd0a 0 1 3 a 0 2 ffd2a 0 2 5 a 1 0 ffd4a 1 0 7 a 1 1 ffc6a 1 1 9 a 1 2 ffd8a 1 2 11 注 从键盘给实型数组元素赋值时 应通过一中间变量进行 或采用其它办法实施 T7 3 2 c实型数组从键盘赋值情况main inti j floata 2 3 k for i 0 i 2 i for j 0 j 3 j scanf f for j 0 j 3 j scanf f f a 0 j a 1 j 3 多维数组的定义和在内存中的存放顺序 如inta 2 3 4 共24个元素 在内存中排列的顺序是 第三维变化最快 然后是第二维 第一维最慢 7 2 2二维数组的引用形式 数组名 下标 下标 其中 下标是整型或字符型的常量 变量或表达式 定义时不能使用变量 如 a 1 2 a i j 1 数组元素可出现在表达式中 如 a 1 2 a 2 2 22 使用数组元素时 应注意不要超出其定义的范围 如 inta 2 3 a 2 3 5 7 2 3二维数组的初始化1 按行给二维数组赋初值如 inta 2 3 1 2 3 4 5 6 2 按数组元素排列的顺序赋初值如 inta 2 3 1 2 3 4 5 6 3 对部分元素赋初值 按行赋值较直观如 inta 2 3 2 5 3 4 全部元素赋值时 第一维下标可省略如 inta 3 1 2 3 4 5 6 又如 inta 4 0 0 3 0 0 10 7 2 4二维数组程序举例例T7 4将一个二维数组的行和列元素互换 存到另一个二维数组中 T7 4 c两数组行列互换main inta 2 3 1 2 3 4 5 6 intb 3 2 i j printf arraya n for i 0 i 1 i for j 0 j 2 j printf 4d a i j b j i a i j printf n printf arrayb n for i 0 i 2 i for j 0 j 1 j printf 4d b i j printf n 例T7 5 c有3 4矩阵 求出其中最大元素所在的行号和列号main inti j r 0 c 0 max inta 3 4 1 2 3 4 9 8 7 6 10 10 5 2 max a 0 0 for i 0 imax max a i j r i c j printf max d row d colum d n max r c 运行结果 max 10 row 2 colum 1问题 在比较前为什么要把a 0 0 赋给max 7 3字符数组字符型数组 用于存放字符型数据 一维字符数组 存放一个字符串 每个数组元素存放一个字符 二维字符数组 存放多个字符串 行数是字符串的个数 7 3 1字符数组的定义形式 char数组名 常量表达式 char数组名 常量表达式 常量表达式 常量表达式 整 字符 符号常量 例 chara 5 a 0 C a 1 H a 2 I a 3 N a 4 A 7 3 2字符数组的初始化如 chara 5 C H I N A charb 5 C H I N W U 编译时将指出 初始化值太多charc 5 C H I chard C H I N A 系统自动确认其长度为5 7 3 3字符数组的引用例T7 6 c输出一个字符串main charc 10 I a m h a p p y inti for i 0 i 10 i printf c c i print n 运行结果 I am happy T7 7 C输出一个钻石图main chardiamond 5 inti intj for i 0 i 5 i for j 0 j 5 j printf c diamond i j printf n 7 3 4字符串和字符串结束标志几点说明 1 字符串 用双引号括起的若干字符 可将其存放在一维或两维字符型数组中 2 字符串结束标志为 0 既无动作 又不显示 3 字符串的长度 第一个 0 以前字符的个数 4 在字符型数组或字符串中遇 0 即认为该字符结束 5 字符串可对字符型数组初始化如 charc I am happy 系统自动在数组的最后加了 0 长度为11或charc I am happy 系统自动在数组的最后加了 0 长度为11 相当于c I a m h a p p y 0 而charc 10 CHINA 注意 字符 0 并不一定都在字符数组的后面 输出时遇到第一个 0 结束 例T7 7 1 cmain chara a b 0 1 2 charb ab 0cd printf s n s n a b 运行结果 abab 7 3 5字符数组的输入输出1 字符数组的输出 例T7 7 2 cmain inti chara 10 CHINA charb 18 CHINA 0CHINA 0CHINA for i 0 i 10 i printf c a i printf n printf s n a for i 0 i 18 i printf c b i printf n printf s n b 运行结果 CHINACHINACHINA CHINA CHINACHINA 注意 1 s格式输出时 遇第一个 0 时结束 2 c格式输出时 按指定的长度输出 当遇 0 时输出 3 s格式输出字符型数组元素时 如printf s a 2 编译时虽然无错 但输出的是不可确定的字符 因此 这里必须是数组名 2 字符数组的输入形式 scanf s a 其中 a是一个已被定义的字符型的数组名 字符数组名前不加地址运算符 数组名代表数组的首地址 例T7 7 3 c输入函数中为多个字符型数组输入字符串 main chara1 5 a2 5 a3 5 scanf s s s a1 a2 a3 printf a1 s na2 s na3 s n a1 a2 a3 printf printf printf 说明 1 用scanf函数输入多个字符串时 可用 Tab 分隔 2 在printf函数中 用 s打印字符型数组的内容 而用 x 或 o可打印字符型数组的地址 输入 how are you 输出 a1 how a2 are a3 you a1 ffcc a2 ffd2 a3 ffd8 h o w 0 0 0 a r e 0 0 0 y o u ffcc ffcd ffce ffcf ffd0 ffd1 ffd2 ffd3 ffd4 ffd5 ffd6 ffd7 ffd8 ffd9 ffda a1 0 a1 1 a1 2 a1 3 a1 4 a2 0 a2 1 a2 2 a2 3 a3 4 a3 0 a3 1 a3 2 a3 3 0 a3 4 ffdb ffdc 7 3 6字符串处理函数1 字符串输出函数形式 puts 字符数组或字符串 功能 输出一个字符串 且将 0 换成 n 例T7 7 4 cmain chara1 china nbeijing chara2 china 0beijing puts a1 puts a2 puts WUHAN 运行结果 chinabeijingchinaWUHAN 这里是将 0 n 因此光标移到下行 2 字符串输入函数形式 gets 字符数组 功能 从键盘输入一个字符串到字符数组 在输入过程中 遇 结束 并将其转换为 0 存入字符串尾部 对输入的 Tab 作为字符存入字符型数组中 例T7 7 5 c用gets和scanf函数分别输入字符串 在scanf中遇 字符串便结束了 而gets中 却将 作为字符存入字符型数组中 main chara1 15 a2 15 gets a1 scanf s a2 printf a1 s n a1 printf a2 s n a2 输入 china beijing china beijing 输出 a1 china beijinga2 china 3 字符串连接函数形式 strcat 字符数组1 字符数组2 功能 连接两个数组中的字符串 操作 把字符数组2 串2 中的内容连接到字符数组1的后面 结果是两串相加存放到字符数组1中 使用时要考虑字符数组1的容量要足够大 例T7 7 6 c main charstr1 30 People s Republic of charstr2 china printf s n strcat str1 str2 i a h n l e e o p l s i c o f l e o p l e p u i c o f n a 4 字符串拷贝函数形式 strcpy 字符数组1 字符数组2 功能 将字符串2 也可以是字符数组 拷贝到字符数组1中 字符数组1中原来的内容被覆盖 例T7 7 7 cmain chara1 8 a2 china a3 wuhan strcpy a1 a2 strcpy a2 a3 strcpy a3 beijing printf a1 s na2 s na3 s n a1 a2 a3 运行结果 a1 chinaa2 wuhana3 beijing 注意 1 字符串拷贝不能用赋值语句 如 chara1 10 a2 10 china a1 a2 只能用strcpy a1 a2 2 字符数组的元素可用赋值语句 如 a1 1 a2 1 2 字符数组初始化时可用 其它地方对字符数组赋值时不能用 5 字符串比较函数形式 strcmp 字符串1 字符串2 功能 两串按Ascii码值从左向右逐个比较 直到出现不同字符或 0 为止 比较结果 1 串1 串2返回值为0 2 串1 串2返回值为正数其值是Ascii码的差值 3 串1 串2返回值为负数其值也是Ascii码的差值 例T7 7 8 cmain inti j k chara1 wuhan a2 beijing i strcmp a1 a2 j strcmp china korea k strcmp a2 beijing printf i d nj d nk d n i j k 注意 两字符串比较不能用 运算符 虽然编译无错 但结果不对 运行结果 i 21i w b 119 98 21j 8j c k 99 107 8k 0k b b 98 98 0 6 求字符串长度函数形式 strlen 字符数组 功能 检测字符串长度 返回字符串长度值 不包括 0 例T7 7 9 cmain chara1 10 china printf d n strlen a1 printf d n strlen beijing 0wuhan 运行结果 57 7 大 小写字母转换函数 strlwr 字符串 8 小 大写字母转换函数 strupr 字符串 例T7 7 10 cmain chara1 6 CHinA a2 wuHAn printf s n strlwr a1 printf s n strupr a2 运行结果 chinaWUHAN 7 3 7字符数组应用举例例T7 8 c输入一行字符 统计单词数 单词间用 分隔 main chars 81 inti n 0 w 0 charc gets s for i 0 c s i 0 i if c w 0 elseif w 0 w 1 n printf There are dwords in the line n n 输入 I am a boy 输出 There are 4 word in the line 其中 n 统计单词数w 单词标志 在单词中为1 出了单词为0i 11
展开阅读全文
相关资源
相关搜索

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


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

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


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