计算机本科C语言第七章讲.ppt_第1页
计算机本科C语言第七章讲.ppt_第2页
计算机本科C语言第七章讲.ppt_第3页
计算机本科C语言第七章讲.ppt_第4页
计算机本科C语言第七章讲.ppt_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

第七章数组 学习目的 1 理解数组元素与普通变量的区别2 掌握数组的地址3 掌握数组的存储4 掌握数组的初始化 第一节数组的概念 在处理实际问题时 常要处理同一类型的成批数据 如100个学生的成绩 可以把这批数据看作一个有机的整体 称为数组 用一个统一的名字代表这批数据 而用序号或下标来区分各个数据 例如 用s代表学生成绩这组数据 s是数组名 用s1 s2 s3分别代表学生1 学生2 学生3的成绩 s右下角的数字1 2 3用来表示该数据在数中的序号 称为下标 数组中的数据称为数据元素 概括地说 数组是有序数据的集合 要寻找一个数组中的某一个元素必须给出两个要素 数组名和下标 注意 1数组是有类型属性的2同一数组中的每一个元素都必须属于同一数据类型3一个数组中内存中占一片连续的存储单元 intk 10 由于在程序中无法用下角表示下标 因此C中用方括号来表示下标 如k0 k1 k2在C中分别用k 0 k 1 k 2 来表示 1000 1002 1004 1006 1008 1010 1012 1014 1016 1018 一 一维数组的定义与引用1定义一组数组类型标识符数组名 常量表达式 例如 floats 10 它表示数组名为s 此数组为实型 有10个元素 说明 数组名定名规则和变量名相同 用方括号括起来的常量表达式表示下标值inta 10 ints 2 8 defineN20intarray N 2 第二节一维数组 常量表达式的值表示元素的个数 即数组长度 inta 10 表示a有10个元素 这10个元素是 a 0 a 1 a 9 常量表达式中可以包括常量 符号常量 但不能包含变量 也就是说 C不允许对数组的大小作动态定义 即数组的大小不依赖于程序运行过程中变量的值 intk scanf d 注意点 1 在表示数组元素时下标可以是正整数或整型变量或整型表达式for t 0 t 9 t s t t 2 数组的第一个元素的地址即为数组的首地址 而且C规定 用数组名代表数组的首地址 data 0 data3 数组名是地址常量 不能向数组名赋值 也不能对其进行 运算 数组元素最小下标由0开始 数组元素最大下标是 数组元素个数 1 例子1若有以下定义 doublew 10 则w数组元素下标的上限是 下限是 二 一维数组的初始化在定义数组的同时给数组元素赋初值的过程称为数组的初始化 格式如下 数据类型数组名 数组元素个数 数组初值 1 初始值是用逗号隔开的一组常量 如 inta 5 5 4 3 2 1 floatj 3 3 1416 0 789 5 1 chars 5 h e l l o 2 数组初始化时 多于数据个数的元素被赋0 如 inta 5 1 2 3 3 初始化时 初始值不能多于元素的个数 否则会出现语法错误 如 inta 5 1 2 3 4 5 6 4 初始化时 号中的数字可以省略 由初始化数据的个数决定数组元素的个数 如 inta 19 12 3 7 定义一个数组后 如果不给其元素赋值 则各元素的值是不确定的 要想使数组元素以准确的值参加运算 必须设法使数组获得初值 使数组元素获得初值的方法有三种 使用赋值语句 利用库函数从键盘或磁盘文件读取数据 定义数组时对其进行初始化 例子2main inta 5 1 2 3 4 5 在定义时初始化 intt for t 0 t 4 t printf d a t 例子3main inta 5 intt for t 0 t 4 t 利用赋值语句 a t t 2 for t 0 t 4 t printf d a t 例子4main inta 5 intt for t 0 t 4 t 利用库函数从终端输入 scanf d 例子5下面程序以每行4个数据的形式输出a数组 请填空 defineN20main inta N I for I 0 I N I scanf d for I 0 I N I if printf 3d a I printf n main intI f 10 f 0 f 1 1 for I 2 I 10 I f I f I 2 f I 1 for I 0 I 10 I if I 4 0 printf n printf 3d f I 例子6下面程序的运行结果是 用起泡法对数据排序 由小到大 思路 将相邻两个数比较 将小的调到前头 1次 2次 第一趟 1次 第二趟 从例子中可知 n个数用 起泡法 排序 共要比较n 1趟 每一趟要比较n j次 n表示数据的个数 j表示第几趟 例子7用起泡法对10个数进行排序 由小到大 includemain inta 11 n j temp for n 1 na j 1 temp a j a j a j 1 a j 1 temp for n 1 n 11 n printf 3d a n 例子8请根据题意编写源程序中秋佳节 有贵客来到草原 主人要从羊群中选一只肥羊宴请客人 当然要选最肥的一只 请大家以10只羊为例 从键盘输入10只羊的重量 并求出第几只羊是主人所要的 第三节二维数组和多维数组 一 二维数组和多维数组的定义定义二维数组的一般格式 数据类型数组名 行数 列数 例 inta 2 3 上面定义了一个a数组 它有 行 列 每一个数组元素都是整型数据 注意 每一维的下标都从 算起 因此 a数组中的元素如下 a 0 0 a 0 1 a 0 2 a 1 0 a 1 1 a 1 2 二维数组在内存中的排列顺序是 按行存放 即先存第0行的元素 然后再存第1行的元素 如下图 2001 2003 2005 2007 2009 2011 多维数组的定义格式 inta 2 3 2 定义了一个三维数组a 其有 12元素 其内存分配情况如右图 二 二维数组的引用 数组必须 先定义 后引用 引用二维数组的形式 数组名 下标 下标 如 c 0 0 c 7 6 引用三维数组的形式 数组名 下标 下标 下标 如 c 0 0 0 b 2 1 2 三 二维数组的初始化对一个二维数组初始化可以分行以对各元素赋值 例 inta 2 3 1 2 3 4 5 6 或inta 2 3 1 2 3 4 5 6 也可以对部分元素赋值 例 inta 2 3 1 2 3 4 如果在定义数组时 给出了全部数组元素的初值 则定义数组时第一个下标可以省略 inta 2 3 1 2 3 4 5 6 等价于inta 3 1 2 3 4 5 6 例子1includemain inta 3 4 t k for t 0 t 2 t for k 0 k 3 k scanf d 例子2定义如下变量和数组 intk inta 3 3 1 2 3 4 5 6 7 8 9 则下面语句的输出结果是 for k 0 k 3 k printf d a k 2 k 例子3有如下程序 main inta 3 3 1 2 3 4 5 6 inti j s 0 for i 1 i 3 i for j 0 j 1 j s a i j printf d n s 该程序的运行结果是 三维数组的初始化inta 2 3 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 由于第一维的大小为 可以认为a数组由二个二维数组组成 每个二维数组为 行 列 如下图示 例子4includemain inta 3 3 3 t k i for t 0 t 2 t for k 0 k 2 k for i 0 i 2 i scanf d 例子5将一个二维数组行和列元素互换 存到另一个二维数组中main intm n a 2 3 b 3 2 for m 0 m 2 m for n 0 n 3 n scanf d 例子6有一个3 4的矩阵 要求编程序求出其中值最大元素的值 以及其所在的行号和列号 解题思路 采用 打擂台 的算法如果有若干人比武 先有一个站在台上 再上去一人与其手 败者下台 胜者留台上 第3个人再上台与在台上者比 同样是败者下台 胜者留台上 如此比下去 直到所有人都上台比过为止 最后留在台上的就是胜者 程序模拟这个算法 开始时把a 0 0 的值赋给变量max max就是擂主 然后让下一个元素与它比较 将二者中值大者保存在max中 然后再让下一个元素与新的max比 直到最后一个元素比完为止 max最后的值就是数组所有元素中的最大值 includemain introw colum max a 3 4 m n for m 0 mmax max a m n row m colum n printf maxis 4d nrowis d ncolumis d n max row colum 第四节字符型数组与字符串 用来存放字符数据的数组称为字符数组 字符数组中的一个元素存放一个字符 字符数组具有数组的共同属性 由于字符应用广泛 C为它提供了许多方便用法和函数 因此专门介绍字符串和字符数组 一 字符型数组的定义与初始化与其它数组是类似的 定义 chara 15 chara 2 10 字符数组初始化的方法charc I a m h a p p y 在 中char型数组的每个元素所对应的存储空间都是一字节 因此字符型数组的每个元素都可以存放一个字符 语言中有字符串常量 在 中对字符串的处理是使用字符数组来进行的 charc Iamhappy 字符数组中的每个元素都对应着字符串中的一个字符 此外应注意字符串未尾有一个空操作符 chara Iamastudent 或chara Iamastudent 在程序的执行部分 不允许把字符串直接赋给一个字符数组名和该数组中的任何元素 如下面是错误 chara 10 a abc a 8 abc 二 字符的输入 用scanf 函数输入字符或字符串 例 charstr 9 intk for k 0 k 8 k scanf c 输入的字符串包括空格和回车 三 字符串输出 用printf 函数可以输出数组元素 也可以将存放在字符数组中的字符串整串输出 例 charstr 10 abc printf c s n str 0 str 注意 输出一个元素时 要指出元素的下标 而且要用 c格式输出 输出一个字符串时只要写出字符数组名 不必带下标 但要用 s格式 输出时 不包括 0 字符 如果一个数组中有两个 0 则输出时遇到第一个 0 即认为字符串结束 例12下面程序段的运行结果是 charc 5 a b 0 c 0 printf s c 四字符串处理函数 1 puts 字符数组 作用 将一个字符串输出到终端staticchara 5 name puts a staticchars 20 China nBeijing puts s 2 gets 字符数组 从终端输入一个字符串到字符数组 并且得到一个函数值 该函数值是字符数组的首地址 charstr 10 gets str 从终端输入 123 puts str 3 strcat 字符数组1 字符数组2 连接两个字符数组中的字符串 把串2接到串1的后面 结果放在字符数组1中 该函数值是字符数组1的首地址 staticcharstr1 20 china staticcharstr2 10 Beijing strcat str1 str2 printf s n str1 printf s strcat str1 str2 说明 1 字符数组1长度必须足够大 以便容纳新的字符串 2 连接前两个字符串的后面都有一个 0 连接时将串1后面的 0 取消 只在新串最后保留一个 0 4 strcpy 字符数组1 字符串2 作用 将字符串2拷贝到字符数组1中staticcharstr1 20 staticcharstr2 10 Beijing strcpy str1 str2 strcpy str1 china 说明 1 字符数组1的长度不应小于字符串2的长度2 字符数组1必须是数组名形式 字符串2可以是字符数组名 也可以是一个字符串常量 3 拷贝时连同字符串后面的 0 一起拷贝 5 strcmp 字符串1 字符串2 格式有 strcmp str1 str2 strcmp str1 Beijing strcmp China Chine 结果 相等 函数值为0字符串1大于字符串2 函数值为正整数字符串1小于字符串2 函数值为负整数 6 strlen 字符数组 作用 测试字符串长度的函数 函数的值为字符串中有效字符长度 不包含 0 在内 staticcharstr2 10 Beijing printf d n strlen str2 例13程序的运行结果为 include includemain chara 7 abcdef charb 4 abc strcpy a b printf c n a 5 printf s a 例14若有以下定义和语句 chars1 12345 s2 1234 printf d n strlen strcpy s1 s2 则输出结果是 例15以下程序片段的输出是 printf d n strlen ATS n 123A 例子16以下程序输出的结果是 include includemain charw 10 ABCD EFGH IJKL MNOP intk for k 1 k 3 k printf s n 例子17下述程序的运行结果是 includemain charch 7 65ab21 intk s 0 for k 0 ch k 0 例子18有3个字符串 要求找出其中最大者 include includemain charstr 3 20 charstring 20 intt for t 0 t0 strcpy string str 0 elsestrcpy string str 1 if strcmp str 2 string 0 strcpy string str 2 例子19输

温馨提示

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

评论

0/150

提交评论